昇腾社区首页
中文
注册

FusionVirtualOpSetSwitch

融合模式

控制执行split_n轴优化和split_c_to_n轴优化的开关。将符合约束条件的Split类算子(SplitD/SplitVD)打上no_task属性,Split类算子N轴拼接,跳过算子编译流程,从而提升性能。如果Split类算子输入的内存过大,可以选择关闭该融合规则。

该融合比较特殊,生效情况不会写进fusion_result.json

对比当前图ge_onnx_****PreRunAfterOptimizeGraphBeforeBuild.pbtxt和前一张图ge*.pbtxt中的SplitD/SplitVD的"_no_task"属性变化,由0->1表示pass生效。

如上.pbtxt文件的生成,需要在执行训练或者推理之前需要设置如下环境变量。更多环境变量信息请参见环境变量参考

DUMP_GE_GRAPH=2 //把整个流程中各个阶段的图描述信息打印到文件中,此环境变量控制dump图的内容多少。

DUMP_GRAPH_LEVEL=2 //把整个图编译流程中各个阶段的图描述信息打印到文件中。此环境变量控制图落盘的个数。

使用约束

通用约束

  • 不支持动态场景。
  • 当SplitD/SplitVD上"_input_memory_type"和"_output_memory_type"属性列表中含有RT_MEMORY_L1(65536)或RT_MEMORY_L2(131072)数值时,该融合规则不生效。
  • 不支持如下输入。
    • Data->TransData/Reshape->Split结构。
    • SplitD/SplitVD对端输入节点已有no_task属性。
    • SplitD/SplitVD对端输入节点已有"atomic_output_index"属性且值非空。
    • SplitD/SplitVD对端输入节点是Const。
  • 不支持如下输出。
    • SplitD/SplitVD对端输出节点包括NetOutput/HcomBroadcast/HcomAllGather/HcomAllReduce/HcomReduceScatter/HcomReduce/SplitD/SplitVD。
    • SplitD/SplitVD对端输出节点已有no_task属性。
    • SplitD/SplitVD对端输出节点不是TVM算子("imply_type"属性不为1)。
    • SplitD/SplitVD对端输出节点"_fusion_virtual_op"属性不为空。
    • SplitD/SplitVD对端输出节点"continuous_input"属性为true。
    • SplitD/SplitVD对端输出节点已有"atomic_output_index"属性且值非空。

除了满足如上通用约束,split_n轴优化还需要满足如下特殊约束:

  • 当split_dim属性为0时,该融合规则生效。如下特殊场景会对原始的split_dim进行转换,split_dim属性以转换后的为准。
  • SplitD/SplitVD为ND->NZ格式且shape dim为2场景下,昇腾AI处理器会对split_dim进行转换(0转换成1或者1转换成0)。
  • 对于所有格式的SplitD/SplitVD,如果原始的split_dim为负值,昇腾AI处理器会将其转换,转换后的split_dim值=原始的split_dim值+shape的维度值。例如split_dim为-2,shape为[1,32,32,1],shape的dim为4,split_dim转后为2。

除了满足如上通用约束,split_c_to_n轴优化还需要满足特殊约束:

SplitD/SplitVD上split_dim属性为1,SplitD/SplitVD的origin shape维度大于或等于2,并且N轴为1(shape[0]=1)时,还需要满足如下条件之一,该融合规则生效。

如果原始的split_dim为负值,昇腾AI处理器会将其转换,转换后的split_dim值=原始的split_dim值+shape的维度值。例如split_dim为-2,shape为[1,32,32,1],shape的dim为4,split_dim转后为2。

  • 原始format为ND,当前format为NZ且origin shape维度大于或等于4。
  • 原始format为NCHW,当前format为NC1HWC0,C轴(shape[1])按照对应dtype对齐,fp16格式按照16位对齐,int8按照32位对齐,int4按照64位对齐。
  • 原始format和当前format一致。