LayerNormOperation
功能
LayerNorm是一种归一化方法,可以将网络层输入数据归一化到[0, 1]之间。当前支持三种:NORM、PRENORM、POSTNORM三种归一化。
计算公式
- Norm
标准的LayerNorm操作,公式为:
图1 LayerNorm计算公式图 - PostNorm
add和layernorm融合算子,先将x和residual相加再做layernorm归一化,公式为:
图2 Add+LayerNorm计算公式图 - PreNorm
add和layernorm融合算子,先将x和residual相加再做layernorm归一化。公式与PostNorm相同。和postNorm区别在于会输出x和residual相加的结果。
定义
struct LayerNormParam { enum LayerNormType : int { LAYER_NORM_UNDEFINED = 0, LAYER_NORM_NORM, LAYER_NORM_PRENORM, LAYER_NORM_POSTNORM, LAYER_NORM_MAX, }; struct NormParam { QuantType quantType = QUANT_UNDEINFED; float epsilon = 1e-5; int32_t beginNormAxis = 0; int32_t beginParamsAxis = 0; DynamicQuantType dynamicQuantType = DYNAMIC_QUANT_UNDEFINED; }; struct PreNormParam { QuantType quantType = QUANT_UNDEFINED; float epsilon = 1e-5; size_t opMode = 0; float zoomScaleValue = 1.0f; }; struct PostNormParam { QuantType quantType = QUANT_UNDEINFED; float epsilon = 1e-5; size_t opMode = 0; float zoomScaleValue = 1.0f; }; LayerNormType layerType = LAYER_NORM_UNDEFINED; NormParam normParam; PreNormParam preNormParam; PostNormParam postNormParam; };
参数列表
成员名称 |
描述 |
---|---|
layerType |
归一化类型。
|
normParam |
NORM参数,具体请参见表1。 |
preNormParam |
PRETNORM参数,具体请参见表2。 |
postNormParam |
POSTNORM参数,具体请参见表3。 |
参数 |
类型 |
默认值 |
描述 |
---|---|---|---|
quantType |
QuantType |
QUANT_UNDEFINED |
量化类型。 当前支持以下类型。 QUANT_UNDEINFED; QUANT_INT8。 |
epsilon |
float |
1e-5 |
Epsilon,归一化时加在分母上防止除零。 |
beginNormAxis |
int32_t |
0 |
归一化的维度,默认值为0,从第几维开始norm,同时决定输入gamma和beta维度。 |
beginParamsAxis |
int32_t |
0 |
归一化的维度,默认值为0,决定从第几维开始把后面的维度按轴合并。 |
dynamicQuantType |
DynamicQuantType |
DYNAMIC_QUANT_UNDEFINED |
动态量化类型。默认为DYNAMIC_QUANT_UNDEFINED非动态量化。当前版本暂不支持非对称动态量化。 |

8.0.RC2及后续版本normParam不再支持quantInputScale、quantInputOffset、quantInputAlpha量化参数。
参数 |
类型 |
默认值 |
描述 |
---|---|---|---|
quantType |
QuantType |
QUANT_UNDEFINED |
量化类型。当前仅支持QUANT_UNDEINFED。 |
epsilon |
float |
1e-5 |
Epsilon,归一化时加在分母上防止除零。 |
opMode |
size_t |
0 |
|
zoomScaleValue |
float |
1.0f |
缩放因子。 |
参数 |
类型 |
默认值 |
描述 |
---|---|---|---|
quantType |
QuantType |
QUANT_UNDEFINED |
量化类型。当前支持以下类型。 QUANT_UNDEINFED; QUANT_INT8。 |
epsilon |
float |
1e-5 |
Epsilon,归一化时加在分母上防止除零。 |
opMode |
size_t |
0 |
|
zoomScaleValue |
float |
1.0f |
缩放因子。 |

8.0.RC2及后续版本postNormParam不再支持quantInputScale、quantInputOffset、quantInputAlpha量化参数。
规格约束
- beginNormAxis 需要小于 tensor x的维度大小。为负数时,与tensor x维度大小之和需要大于0。
- Norm的动态量化只支持DYNAMIC_QUANT_SYMMETRIC对称动态量化。最后一维需要小于等于12288。
- 除量化场景下的scale和offset tensor,其余tensor的最后一维大小相等。
功能列表
- 非量化
- 基础layernorm
- add+layernorm融合(prenorm,postnorm)
- 量化
- layernorm量化
- layernorm对称动态量化
- add+layernorm量化(postnorm)