| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 30 天前 | ||
| 16 天前 | ||
| 16 天前 | ||
| 1 个月前 | ||
| 16 天前 | ||
| 16 天前 | ||
| 5 天前 | ||
| 1 个月前 | ||
| 1 个月前 |
AddLayerNormQuantV2
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | × |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | × |
功能说明
-
接口功能:LayerNorm算子是大模型常用的归一化操作。AddLayerNormQuantV2算子将LayerNorm前的Add算子和LayerNorm归一化输出给1个或2个下游的量化算子融合起来,减少搬入搬出操作。LayerNorm下游的量化算子可以是Quantize、AscendQuantV2或DynamicQuant算子,具体的量化算子类型由attr入参divMode和quantMode决定。当下游有2个量化算子时,2个量化算子的算子类型、输入输出dtype组合和可选输入的组合需要完全一致,当前仅支持下游有1个AscendQuantV2量化算子。
-
计算公式:
x=x1+x2+biasOptionalx = x1 + x2 + biasOptional
y=x−E(x)Var(x)+epsilon∗gamma+betay = {{x-E(x)}\over\sqrt {Var(x)+epsilon}} * gamma + beta
-
当quantMode输入为"static"时,输出outScales1Out和outScales2Out无实际意义。取决于divMode的输入,融合的量化算子可能是Quantize或AscendQuantV2:
-
当divMode输入为true时,融合的量化算子为Quantize,计算公式如下所示:
y1Out=round(y/scales1Optional+zeroPoints1Optional)y1Out = round(y / scales1Optional + zeroPoints1Optional)
y2Out=round(y/scales2Optional+zeroPoints2Optional),当且仅当scales2Optional存在y2Out = round(y / scales2Optional + zeroPoints2Optional), \quad \text{当且仅当scales2Optional存在}
-
当divMode输入为false时,融合的量化算子为AscendQuantV2,计算公式如下所示:
y1Out=round(y∗scales1Optional+zeroPoints1Optional)y1Out = round(y * scales1Optional + zeroPoints1Optional)
y2Out=round(y∗scales2Optional+zeroPoints2Optional),当且仅当scales2Optional存在y2Out = round(y * scales2Optional + zeroPoints2Optional), \quad \text{当且仅当scales2Optional存在}
-
-
当quantMode输入为"dynamic"时,输入zeroPoints1Optional和zeroPoints2Optional无实际意义。融合的量化算子是DynamicQuant,此时divMode无效:
-
若scales1Optional和scales2Optional均无输入,则y2Out和scale2Out输出无实际意义,可忽略。计算公式如下所示:
outScales1Out=row_max(abs(y))/127outScales1Out = row\_max(abs(y))/127
y1Out=round(y/outScales1Out)y1Out = round(y / outScales1Out)
-
若仅输入scales1Optional,则y2Out和scale2Out输出无实际意义,可忽略。计算公式如下所示:
tmp1=y∗scales1Optionaltmp1 = y * scales1Optional
outScales1Out=row_max(abs(tmp1))/127outScales1Out = row\_max(abs(tmp1))/127
y1Out=round(tmp1/outScales1Out)y1Out = round(tmp1 / outScales1Out)
-
若scales1Optional和scales2Optional均存在,则y2Out和scale2Out输出有效。计算公式如下所示:
tmp1=y∗scales1Optional,tmp2=y∗scales2Optionaltmp1 = y * scales1Optional, \quad tmp2 = y * scales2Optional
outScales1Out=row_max(abs(tmp1))/127,outScales2Out=row_max(abs(tmp2))/127outScales1Out = row\_max(abs(tmp1))/127, \quad outScales2Out = row\_max(abs(tmp2))/127
y1Out=round(tmp1/outScales1Out),y2Out=round(tmp2/outScales2Out)y1Out = round(tmp1 / outScales1Out),\quad y2Out = round(tmp2 / outScales2Out)
其中row_max代表对每行求最大值。
-
-
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x1 | 输入 | 表示AddLayerNorm中加法计算的输入,对应公式中的`x1`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| x2 | 输入 | 表示AddLayerNorm中加法计算的输入,对应公式中的`x2`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| gamma | 输入 | 表示层归一化中的gamma参数,对应公式中的`gamma`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| beta | 输入 | 表示层归一化中的beta参数,对应公式中的`beta`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| bias | 可选输入 | 表示AddLayerNormQuantV2中加法计算的输入,对应公式中的`bias`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| scales1 | 可选输入 | 表示第一个被融合的量化计算子中的scale/smooth输入,对应公式中的`scales1`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| scales2 | 可选输入 | 表示第二个被融合的量化计算子中的scale/smooth输入,对应公式中的`scales2`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| zero_points1 | 可选输入 | 表示第一个被融合的量化计算子中的zeroPoints输入,对应公式中的`zeroPoints1`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| zero_points2 | 可选输入 | 表示第二个被融合的量化计算子中的zeroPoints输入,对应公式中的`zeroPoints2`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| quant_mode | 可选属性 |
|
String | - |
| epsilon | 可选属性 |
|
FLOAT | - |
| additional_output | 可选属性 |
|
BOOL | - |
| div_mode | 可选属性 |
|
BOOL | - |
| y1 | 输出 | 表示量化输出Tensor,对应公式中的`y1`。 | INT8 | ND |
| y2 | 输出 | 表示量化输出Tensor,对应公式中的`y2`。 | INT8 | ND |
| x | 输出 | 表示x1和x2的和,对应公式中的`x`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| layernormRes | 输出 | 表示layernorm的结果输出,对应公式中的`x`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| out_scales1 | 输出 | 表示通过scales1计算的动态量化缩放结果,对应公式中的`outScales1`。 | FLOAT32 | ND |
| out_scales2 | 输出 | 表示通过scales2计算的动态量化缩放结果,对应公式中的`outScales2`。 | FLOAT32 | ND |
- Atlas 推理系列产品:不支持BFLOAT16。
约束说明
无
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_aclnn_add_layer_norm_quant_v2 | 通过aclnnAddLayerNormQuantV2接口方式调用AddLayerNormQuantV2算子。 |