昇腾社区首页
中文
注册

aclnnAddRmsNormQuantV2

产品支持情况

产品 是否支持
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]
[object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]
[object Object]Atlas 200I/500 A2 推理产品[object Object] ×
[object Object]Atlas 推理系列产品 [object Object]
[object Object]Atlas 训练系列产品[object Object] ×

功能描述

  • 算子功能:RmsNorm是大模型常用的标准化操作,相比LayerNorm,其去掉了减去均值的部分。AddRmsNormQuant算子将RmsNorm前的Add算子以及RmsNorm归一化的输出给到1个或2个Quantize算子融合起来,减少搬入搬出操作。AddRmsNormQuantV2算子相较于AddRmsNormQuant在RmsNorm计算过程中增加了偏置项betaOptional参数,即计算公式中的beta

  • 计算公式:

    xi=x1i+x2ix_i={x1}_i+{x2}_i yi=xiRms(x)gi+beta, where Rms(x)=1ni=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}
    • divMod为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)
    • divMod为False时:y1=round((yscales1)+zero_points1)y1=round((y*scales1)+zero\_points1) y2=round((yscales2)+zero_points2)y2=round((y*scales2)+zero\_points2)

函数原型

每个算子分为undefined,必须先调用aclnnAddRmsNormQuantV2GetWorkspaceSize接口获取入参并根据计算流程所需workspace大小,再调用aclnnAddRmsNormQuantV2接口执行计算。

  • aclnnStatus aclnnAddRmsNormQuantV2GetWorkspaceSize(const aclTensor *x1, const aclTensor *x2, const aclTensor *gamma, const aclTensor *scales1, const aclTensor *scales2Optional, const aclTensor *zeroPoints1Optional, const aclTensor *zeroPoints2Optional, const aclTensor *betaOptional, int64_t axis, double epsilon, bool divMode, const aclTensor *y1Out, const aclTensor *y2Out, const aclTensor *xOut, uint64_t *workspaceSize, aclOpExecutor **executor)
  • aclnnStatus aclnnAddRmsNormQuantV2(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

aclnnAddRmsNormQuantV2GetWorkspaceSize

  • 参数说明:

    • x1(aclTensor*,计算输入):表示标准化过程中的源数据张量,公式中的x1,Device侧的aclTensor。shape支持1-8维。undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • x2(aclTensor*,计算输入):表示标准化过程中的源数据张量,公式中的x2,Device侧的aclTensor。shape支持1-8维,shape和数据类型需要与x1保持一致。undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • gamma(aclTensor*,计算输入):表示标准化过程中的权重张量,公式中的g,Device侧的aclTensor。shape支持1-8维,shape需要与x1需要Norm的维度保持一致,数据类型需要与x1保持一致。undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • scales1(aclTensor*,计算输入):表示量化过程中得到y1进行的scales张量,公式中的scales1,Device侧的aclTensor。shape需要与gamma保持一致。undefined支持ND,支持undefined。当参数divMode的值为True时,该参数的值不能为0。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、BFLOAT16。
    • scales2Optional(aclTensor*,计算输入):表示量化过程中得到y2进行的scales张量,公式中的scales2,Device侧的aclTensor。可选参数,支持传入空指针。shape需要与gamma保持一致,数据类型需要与scales1保持一致。undefined支持ND,支持undefined。当参数divMode的值为True时,该参数的值不能为0。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、BFLOAT16。
    • zeroPoints1Optional(aclTensor*,计算输入):表示量化过程中得到y1进行的offset张量,公式中的zero_points1,Device侧的aclTensor。可选参数,支持传入空指针。shape需要与gamma保持一致。undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持INT32。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持INT32、BFLOAT16。
    • zeroPoints2Optional(aclTensor*,计算输入):表示量化过程中得到y2进行的offset张量,公式中的zero_points2,Device侧的aclTensor。可选参数,支持传入空指针。shape需要与gamma保持一致,数据类型需要与zeroPoints1Optional保持一致。undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持INT32。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持INT32、BFLOAT16。
    • betaOptional(aclTensor*,计算输入):表示标准化过程中的偏置项,公式中的beta,Device侧的aclTensor。shape支持1-8维,shape需要与gamma的shape保持一致,数据类型需要与gamma保持一致。undefined支持ND,支持非连续的Tensor。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • axis(int64_t,计算输入):Host侧的整型,表示需要进行量化的elewise轴,其他的轴做broadcast,指定的轴不能超过输入x的维度数。当前仅支持-1,传其他值均不生效。
    • epsilon(double,计算输入): 公式中的输入eps,用于防止除0错误,数据类型为double。建议传较小的正数。
    • divMode(bool,计算输入): 公式中决定量化公式是否使用除法的参数,数据类型为bool。
    • y1Out(aclTensor*,计算输出):表示量化输出Tensor,公式中的y1,Device侧的aclTensor。shape支持1-8维度,shape需要与输入x1/x2一致,数据类型支持INT8,undefined支持ND,支持undefined
    • y2Out(aclTensor*,计算输出):表示量化输出Tensor,公式中的y2,Device侧的aclTensor。shape支持1-8维度,shape需要与输入x1/x2一致,数据类型支持INT8,undefined支持ND,支持undefined
    • xOut(aclTensor*,计算输出):表示x1和x2的和,公式中的x,Device侧的aclTensor。shape支持1-8维度,shape和数据类型需要与输入x1/x2一致,undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • workspaceSize(uint64_t*,出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。
  • 返回值:

    aclnnStatus:返回状态码。(参见undefined

    [object Object]

aclnnAddRmsNormQuantV2

  • 参数说明:

    • workspace(void*,入参):在Device侧申请的workspace内存地址。
    • workspaceSize(uint64_t,入参):在Device侧申请的workspace大小,由第一段接口aclnnAddRmsNormQuantV2GetWorkspaceSize获取。
    • executor(aclOpExecutor*,入参):op执行器,包含了算子计算流程。
    • stream(aclrtStream,入参):指定执行任务的Stream。
  • 返回值:

    aclnnStatus:返回状态码。(具体参见undefined

约束说明

  • [object Object]Atlas 推理系列产品[object Object]:x1、x2需要Norm的维度数据个数不能小于32。gamma、beta、scales1、scales2、zeroPoints1、zeroPoints2的数据个数不能小于32。

  • 支持类型说明

    是否支持空Tensor:支持空进空出。

  • 边界值场景说明

    • [object Object]Atlas 推理系列产品[object Object]:输入不支持包含inf和nan。
    • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:当输入是inf时,输出为inf。当输入是nan时,输出为nan。
  • 维度的边界说明

    参数x1、x2、gamma、scales1、scales2Optional、zeroPoints1Optional、zeroPoints2Optional、betaOptional、y1Out、y2Out、xOut的shape中每一维大小都不大于INT32的最大值2147483647。

  • 数据格式说明 所有输入输出tensor的数据格式推荐使用ND格式,其他数据格式会由框架默认转换成ND格式进行处理。

  • 各产品型号支持数据类型说明

    • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:

      x1数据类型 x2数据类型 gamma数据类型 scales1数据类型 scales2Optional数据类型 zeroPoints1Optional数据类型 zeroPoints2Optional数据类型 betaOptional数据类型 y1Out数据类型 y2Out数据类型 xOut数据类型
      FLOAT16 FLOAT16 FLOAT16 FLOAT32 FLOAT32 INT32 INT32 FLOAT16 INT8 INT8 FLOAT16
      BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 INT8 INT8 BFLOAT16
    • [object Object]Atlas 推理系列产品[object Object]:

      x1数据类型 x2数据类型 gamma数据类型 scales1数据类型 scales2Optional数据类型 zeroPoints1Optional数据类型 zeroPoints2Optional数据类型 betaOptional数据类型 y1Out数据类型 y2Out数据类型 xOut数据类型
      FLOAT16 FLOAT16 FLOAT16 FLOAT32 FLOAT32 INT32 INT32 FLOAT16 INT8 INT8 FLOAT16

调用示例

示例编译和执行请参考编译与运行样例。

[object Object]