文件最后提交记录最后更新时间
25 天前
2 天前
2 天前
2 天前
2 天前
3 个月前
1 个月前
README.md

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 可选属性
  • 量化模式,用于确定融合算子融合的时静态还是动态量化算子。对应公式中的`quantMode`。取值为0(静态量化)或1(动态量化)。
  • 默认值为0。
Int -
epsilon 可选属性
  • 表示对应LayerNorm中的epsilon,添加到分母中的值,以确保数值稳定。对应公式中的`epsilon`。
  • 默认值为1e-5。
FLOAT -
res 输出 表示LayerNorm的结果输出y被量化后的结果。对应公式中的`res`。 INT8 ND
scaleOut 输出 表示动态量化计算的scaleOut结果输出,对应公式中的`scaleOut`,仅在quantMode等于1时有效。 FLOAT32 ND
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品:

    入参xgammabetascale的数据类型不支持FLOAT32。

  • Atlas 推理系列产品:

    • 入参xgammabetascale的数据类型仅支持FLOAT16。
    • 入参xgammabeta的尾轴长度必须大于等于32Bytes。

约束说明

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_layer_norm_quant 通过aclnnLayerNormQuant接口方式调用LayerNormQuant算子。