---
title: FusionVirtualOpSetSwitch
description: "控制执行split_n轴优化和split_c_to_n轴优化的开关。将符合约束条件的Split类算子(SplitD/SplitVD)添加no_task属性，通过N轴拼接操作跳过算子编译流程，从而提升性能。如果Split类算子输入的内存过大，可以选择关闭该融合规则。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/maintenref/graphubfusionref/atlasrr_30_0177.html
sourcePath: /source/zh/canncommercial/900/maintenref/graphubfusionref/atlasrr_30_0177.html
indexId: 860dd5666411bbde4fa89b81e64099c835fa45bc3d9a07a00dbd805bb7b9268878
---
# FusionVirtualOpSetSwitch

#### 融合模式

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

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

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

如上.pbtxt文件的生成，需要在执行训练或者推理之前设置如下环境变量。更多环境变量信息请参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref_07_0001.html)》。

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一致。
