AddLayerNormFusionPass
融合模式
- 场景一:基础场景,将Add + Cast(可选)+ LayerNorm/LayerNormV3融合为AddLayerNorm算子。

- 场景二:支持将Add + Add + Cast(可选)+ LayerNorm/LayerNormV3融合为AddLayerNorm算子。

- 场景三:支持将Cast + Add + LayerNorm/LayerNormV3融合为AddLayerNorm算子。

- 场景四:支持将Add + Add + Cast + LayerNorm/LayerNormV3/LayerNormV4 + Cast融合为AddLayerNorm算子。

使用约束
- 数据类型约束:
- 场景一只支持如下输入数据类型组合:
x1
x2
gamma
beta
FLOAT16
FLOAT16
FLOAT16
FLOAT16
BFLOAT16
BFLOAT16
BFLOAT16
BFLOAT16
FLOAT16
FLOAT16
FLOAT32
FLOAT32
BFLOAT16
BFLOAT16
FLOAT32
FLOAT32
- 场景二只支持如下输入数据类型组合:
x1
x2
gamma
beta
bias(可选)
FLOAT16
FLOAT16
FLOAT16
FLOAT16
FLOAT16
BFLOAT16
BFLOAT16
BFLOAT16
BFLOAT16
BFLOAT16
FLOAT16
FLOAT16
FLOAT32
FLOAT32
FLOAT16
BFLOAT16
BFLOAT16
FLOAT32
FLOAT32
BFLOAT16
- 场景三只支持如下输入数据类型组合:
x1
x2
gamma
beta
FLOAT16
FLOAT32
FLOAT32
FLOAT32
FLOAT32
FLOAT16
FLOAT32
FLOAT32
BFLOAT16
FLOAT32
FLOAT32
FLOAT32
FLOAT32
BFLOAT16
FLOAT32
FLOAT32
- 场景四支持的数据类型约束:
- x1、x2、bias的数据类型需要保持一致,且只支持FLOAT16、BFLOAT16。
- gamma、beta的数据类型需要保持一致,且只支持LOAT32。
- 其他数据类型约束:
- 场景一只支持如下输入数据类型组合:
- shape约束:
- 输入x1和x2必须有相同shape。
- 输入gamma和beta的shape必须为1维,并且shape取值和x1,x2输入shape的尾轴相同,即:gamma.shape = beta.shape = [x1.shape[-1]]
- 场景四时,x1、x2、bias的shape最后一维保持一致。
- Cast算子和Add算子的约束:
- 对于精度的影响:
当融合模式为场景一或者场景二,且LayerNorm和Add之间存在Cast场景。
如果Cast输入类型为FLOAT16/BFLOAT16,输出类型为FLOAT32时,使用此融合规则AddLayerNorm输出y的数据类型为FLOAT16/BFLOAT16,相比融合前存在精度降低的情况。
- 场景四仅训练场景下,融合前支持LayerNormV3或者LayerNormV4。
支持的型号
父主题: 图融合规则说明