文件最后提交记录最后更新时间
22 天前
2 个月前
1 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
README

RmsNormQuantV3

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品 ×
Atlas A2 训练系列产品/Atlas A2 推理系列产品 ×
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 ×
Atlas 训练系列产品 ×

功能说明

  • 算子功能:RmsNorm算子是大模型常用的标准化操作,相比LayerNorm算子,其去掉了减去均值的部分。RmsNormQuantV3算子将RmsNorm算子以及RmsNorm归一化的输出给到1个或2个Quantize算子融合起来,减少搬入搬出操作。同时在RmsNormQuantV2算子的基础上新增了Rstd的输出。

  • 计算公式:

    yi=xiRms⁡(x)gi+beta, where Rms⁡(x)=1n∑i=1nxi2+epsy_i=\frac{x_i}{\operatorname{Rms}(\mathbf{x})} g_i + beta, \quad \text { where } \operatorname{Rms}(\mathbf{x})=\sqrt{\frac{1}{n} \sum_{i=1}^n x_i^2+eps}

    • divMode为True时:

      y1=round((y/scales1)+zero_points1)y1=round((y/scales1)+zero\_points1)

      y2=round((y/scales2)+zero_points2)y2=round((y/scales2)+zero\_points2)

    • divMode为False时:

      y1=round((y∗scales1)+zero_points1)y1=round((y*scales1)+zero\_points1)

      y2=round((y∗scales2)+zero_points2)y2=round((y*scales2)+zero\_points2)

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 表示标准化过程中的源数据张量,对应公式中的`x`。 FLOAT32、FLOAT16、BFLOAT16 ND
gamma 输入 表示标准化过程中的权重张量,对应公式中的`g`。shape与x1需要norm(层归一化)的维度保持一致。 FLOAT32、FLOAT16、BFLOAT16 ND
scales1 输入 表示量化过程中得到y1的scales张量,对应公式中的`scales1`。 FLOAT32、FLOAT16、BFLOAT16 ND
scales2 可选输入 表示量化过程中得到y2的scales张量,对应公式中的`scales2`。 FLOAT32、FLOAT16、BFLOAT16 ND
zero_points1 可选输入 表示量化过程中得到y1的offset张量,对应公式中的`zero_points1`。 FLOAT32、FLOAT16、BFLOAT16、INT32、INT8 ND
zero_points2 可选输入 表示量化过程中得到y2的offset张量,对应公式中的`zero_points2`。 FLOAT32、FLOAT16、BFLOAT16、INT32、INT8 ND
beta 可选输入 表示标准化过程中的偏置项,公式中的`beta`。 FLOAT32、FLOAT16、BFLOAT16 ND
epsilon 可选属性
  • 用于防止除0错误,对应公式中的`epsilon`。
  • 默认值为1e-6。
FLOAT32 -
div_mode 可选属性
  • 公式中决定量化公式是否使用除法的参数,对应公式中的`divMode`。
  • 默认值为true。
BOOL -
dst_type 可选属性
  • 表示指定数据转换后y的类型,对应公式中的`y1`或`y2`的数据类型。
  • 输入范围为{2, 29, 34, 35, 36},分别对应{INT8, INT4, HIFLOAT8, FLOAT8_E5M2, FLOAT8_E4M3FN}。
  • 默认值为2。
INT64 -
output_rstd 可选属性
  • 表示指定是否输出有效的rstd。
  • 支持True和False。
  • 默认值为False。
  • 当output_rstd为False时,算子不写出rstd,此时rstd为无效占位输出。
BOOL -
y1 输出 表示量化输出Tensor,对应公式中的`y1`。 INT8、 INT4、 HIFLOAT8、 FLOAT8_E5M2、 FLOAT8_E4M3FN ND
y2 输出 表示量化输出Tensor,对应公式中的`y2`。 INT8、 INT4、 HIFLOAT8、 FLOAT8_E5M2、 FLOAT8_E4M3FN ND
rstd 输出
  • 表示归一化后的标准差的倒数,对应公式中Rms(x)的倒数。
  • shape为与入参x的shape前几维保持一致,前几维指x的维度减去gamma的维度,表示不需要norm的维度。
FLOAT32 ND

约束说明

  • Ascend 950PR/Ascend 950DT:
    • x的数据类型为FLOAT32时,scales1scales2zero_points1zero_points2的数据类型只能为FLOAT32;当x的数据类型为FLOAT16或者BFLOAT16,并且scales1scales2的数据类型为FLOAT32时,zero_points1zero_points2的数据类型只能是FLOAT32或者INT32,否则scales1scales2的数据类型需要与x的数据类型保持一致同为FLOAT16或者BFLOAT16,zero_points1zero_points2的数据类型也需要与x的数据类型保持一致或者为INT8。
    • y的数据类型为INT4时,xgamma以及beta的最后一维必须为偶数。
    • zero_points2必须在scales2存在的情况下,才能作为可选输入。

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_rms_norm_quant_v3 通过aclnnRmsNormQuantV3接口方式调用RmsNormQuantV3算子。
图模式 - 通过算子IR构图方式调用RmsNormQuantV3算子。