LayerNormQuant
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | × |
功能说明
- 算子功能:LayerNorm算子是大模型常用的归一化操作。LayerNormQuant算子将LayerNorm归一化输出和下游的量化算子融合起来,减少搬入搬出操作。
- 计算公式:
-
LayerNorm操作:
y=x−E(x)Var(x)+epsilon∗gamma+betay = {{x-E(x)}\over\sqrt {Var(x)+epsilon}} * gamma + beta
E(x)=1n∑i=1nxiE(x) = {\frac{1}{n} \sum_{i=1}^{n} x_i }
Var(x)=1n∑i=1n(xi−E(x))2Var(x) = {\frac{1}{n} \sum_{i=1}^{n} (x_i-E(x))^2 }
-
quantMode为0时,量化模式为静态量化,输出scaleOut无实际意义:
res=y/scale+zeroPointsOptionalres = y / scale + zeroPointsOptional
-
quantMode为1时,量化模式为动态量化:
tmp=y∗scaletmp = y * scale
scaleOut=row_max(abs(tmp))/dtypeMaxscaleOut = row\_max(abs(tmp))/dtypeMax
res=round(y/scaleOut)res = round(y / scaleOut )
-
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 表示层归一化中的x参数。对应公式中的`x`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| gamma | 输入 | 表示层归一化中的gamma参数。对应公式中的`gamma`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| beta | 输入 | 对应LayerNorm计算公式中的beta,表示层归一化中的beta参数。对应公式中的`beta`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| scale | 输入 | 表示被融合的量化计算中的scale输入。对应公式中的`scale`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| zeroPointsOptional | 可选输入 | 表示被融合的量化计算中的zeroPointsOptional输入。仅在quantMode为0时有效,对应公式中的`zeroPointsOptional`。 | INT8 | ND |
| quantMode | 可选属性 |
|
Int | - |
| epsilon | 可选属性 |
|
FLOAT | - |
| res | 输出 | 表示LayerNorm的结果输出y被量化后的结果。对应公式中的`res`。 | INT8 | ND |
| scaleOut | 输出 | 表示动态量化计算的scaleOut结果输出,对应公式中的`scaleOut`,仅在quantMode等于1时有效。 | FLOAT32 | ND |
-
Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品:
入参
x、gamma、beta、scale的数据类型不支持FLOAT32。 -
Atlas 推理系列产品:
- 入参
x、gamma、beta、scale的数据类型仅支持FLOAT16。 - 入参
x、gamma、beta的尾轴长度必须大于等于32 Bytes。
- 入参
约束说明
无
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_aclnn_layer_norm_quant | 通过aclnnLayerNormQuant接口方式调用LayerNormQuant算子。 |