SplitConvConcatFusionPass
融合模式
对如下几种场景进行融合:
场景一
场景二
- 当ConcatD/Concat2D的第一个输出节点的数据类型不是Relu/LeakyRelu时,融合场景如下。
- 当ConcatD/Concat2D的第一个输出节点的数据类型是Relu/LeakyRelu时,融合场景如下。
- 当ConcatD/Concat2D的第一个输出节点的数据类型是Relu/LeakyRelu时,融合场景如下。
场景三
- 当ConcatD/Concat2D的第一个输出节点的数据类型不是Relu/LeakyRelu时,融合场景如下。
- 当ConcatD/Concat2D的第一个输出节点的数据类型是Relu/LeakyRelu时,融合场景如下。
- 当ConcatD/Concat2D的第一个输出节点的数据类型是Relu/LeakyRelu时,融合场景如下。
使用约束
- 该融合结构会优先匹配ASplitConv2dConcatPass,不满足ASplitConv2dConcatPass约束条件才会匹配此融合pass。
- ConcatD/ConcatV2D至少有两个不同输入节点。
- ConcatD/ConcatV2D和SplitD/SplitVD的dim轴必须是C轴,C轴跟dtype对齐。
- 原始dtype为fp16和float时,dim C需要为16的倍数。
- 原始dtype为int8,dim C需要为32的倍数。
- 原始dtype为int4,dim C需要为64的倍数。
- ConcatD/ConcatV2D所有输入是4维,并且输入format为NCHW或者NHWC。
- SplitD/SplitVD至少有两个不同输出节点。
- ConcatD/ConcatV2D输入路数和SplitD/SplitVD输出路数一致。
- SplitD/SplitVD连接的AscendQuant算子的scale、offset、sqrt_mode属性需要一致。
- 如果ConcatD/ConcatV2D输出节点中存在一个输出节点类型为NETOUTPUT,并且其主格式或存储格式为FORMAT_NC1HWC0,则该pass不生效;如果ConcatD/ConcatV2D输出节点中存在一个输出节点的类型为QUANT、LEAKYRELU或RELU,且该节点的输出节点为NETOUTPUT并且主格式或存储格式为FORMAT_NC1HWC0,则该pass不生效。
- SplitD/SplitVD的输入不为空,并且其第一个输入节点的数据类型不属于Data或RefData。
父主题: 图融合规则说明