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

RmsNormDynamicQuant

产品支持情况

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

功能说明

  • 算子功能:RmsNorm算子是大模型常用的归一化操作,相比LayerNorm算子,其去掉了减去均值的部分。DynamicQuant算子则是为输入张量进行对称动态量化的算子。RmsNormDynamicQuant算子将RmsNorm归一化和DynamicQuant动态量化融合起来,减少搬入搬出操作。

  • 计算公式:

    y=RmsNorm⁡(x)=xRms⁡(x)⋅gamma+beta, where Rms⁡(x)=1n∑i=1nxi2+epsilony = \operatorname{RmsNorm}(x)=\frac{x}{\operatorname{Rms}(\mathbf{x})}\cdot gamma + beta, \quad \text { where } \operatorname{Rms}(\mathbf{x})=\sqrt{\frac{1}{n} \sum_{i=1}^n x_i^2+epsilon}

    • 若smooth_scales不输入,则直接对rmsnorm输出做量化:

    scaleOut=row_max(abs(y))/max_val scaleOut=row\_max(abs(y))/max\_val

    yOut=round(y/scaleOut) yOut=round(y/scaleOut)

    • 若输入smooth_scales,则先做smooth缩放再量化:

    input=y⋅smooth_scales input = y\cdot smooth\_scales

    scaleOut=row_max(abs(input))/max_val scaleOut=row\_max(abs(input))/max\_val

    yOut=round(input/scaleOut) yOut=round(input/scaleOut)

    其中row_max代表每行求最大值。max_val在INT8时为127。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 表示标准化过程中的源数据张量。公式中的x。 FLOAT16、BFLOAT16 ND
gamma 输入 表示标准化过程中的权重张量,公式中的gamma。shape需要与x最后一维一致。 FLOAT16、BFLOAT16 ND
smooth_scales 可选输入 表示量化过程中使用的smoothScale张量,公式中的smooth_scales。 FLOAT16、BFLOAT16 ND
beta 可选输入 表示标准化过程中的偏置项,公式中的beta。shape和dtype需要与gamma一致。 FLOAT16、BFLOAT16 ND
epsilon 可选属性
  • 用于防止除0错误,公式中的epsilon,必须大于零。
  • 默认值为1e-6。
FLOAT32 -
dst_type 可选属性
  • 表示输出y的数据类型枚举值。
  • 默认值为DT_INT8。
INT -
y 输出 表示量化输出Tensor,公式中的yOut。shape与x一致。 INT8 ND
scale 输出 量化的scale输出,公式中的scaleOut。shape为x去掉最后一维后的shape。 FLOAT32 ND

约束说明

  • 输入x的最后一维必须小于等于8192。

  • 输入x的每一行不能全为零(否则归一化后仍全为零,量化 scale 为 0 导致除法异常)。

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_rms_norm_dynamic_quant 通过aclnnRmsNormDynamicQuant接口方式调用RmsNormDynamicQuant算子。
图模式 - 通过算子IR构图方式调用RmsNormDynamicQuant算子。