简介
算子融合是整网性能提升的一种关键手段,包括图融合和UB融合。
系统内置了一些图融合和UB融合规则,均为默认开启。当前文档仅对部分融合规则进行介绍。
图融合
图融合是FE根据融合规则进行改图的过程。图融合用融合后算子替换图中融合前算子,提升计算效率。图融合的场景如下:
- 在某一些算子的数学计算量可以进行优化的情况下,可以进行图融合,融合后可以节省计算时间。例如:conv+biasAdd,可以融合成一个算子,直接在l0c中完成累加,从而省去add的计算过程。
- 在融合后的计算过程可以通过硬件指令加速的情况下,可以进行图融合,融合后能够加速。例如:conv+biasAdd的累加过程,就是通过l0c中的累加功能进行加速的,可以通过图融合完成。
UB融合
UB即昇腾AI处理器上的Unified Buffer,UB融合指A算子的计算结果在Unified Buffer上,需要搬移到Global Memory。B算子再执行时,需要将A算子的输出由Global Memory再搬移到Unified Buffer,进行B的计算逻辑,计算完之后,又从Unified Buffer搬移回Global Memory。
从这个过程会发现A的结果从Unified Buffer->Global Memory->Unified Buffer->Global Memory。这个经过Global Memory进行数据搬移的过程是浪费的,因此将A和B算子合并成一个算子,省去了数据搬移的过程叫UB融合。UB融合可以减少整网中数据搬移的时间(Global Memory>Unified Buffer,Unified Buffer->Global Memory),提高运算效率,有效降低带宽。
如何关闭融合规则
用户可以在模型编译时,提前识别是否需要关闭某些融合规则,便于提升编译性能,但并不会提升计算性能。关闭方法如下:
- ATC模型转换时,通过--fusion_switch_file配置融合开关配置文件路径以及文件名。
- IR模型构建时,通过FUSION_SWITCH_FILE配置融合开关配置文件路径以及文件名。
配置文件示例如下,on表示开启,off表示关闭。
{ "Switch":{ "GraphFusion":{ "RequantFusionPass":"on", "ConvToFullyConnectionFusionPass":"on", "SoftmaxFusionPass":"on", "NotRequantFusionPass":"on", "SplitConvConcatFusionPass":"on", "ConvConcatFusionPass":"on", "MatMulBiasAddFusionPass":"on", "PoolingFusionPass":"on", "ZConcatv2dFusionPass":"on", "ZConcatExt2FusionPass":"on", "TfMergeSubFusionPass":"on" }, "UBFusion":{ "TbePool2dQuantFusionPass":"on" } } }