昇腾社区首页
中文
注册
开发者
下载

aclnnAddRmsNormQuantV2

产品支持情况

[object Object]undefined

功能描述

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

  • 计算公式:

    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} rmsNormOuti=xiRms(xi)girmsNormOut_i=\frac{x_i}{\operatorname{Rms}(x_i)} g_i
    • 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((yscales1)+zero_points1)y1=round((y*scales1)+zero\_points1) y2=round((yscales2)+zero_points2)y2=round((y*scales2)+zero\_points2)

函数原型

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

  • [object Object]
  • [object Object]

aclnnAddRmsNormQuantV2GetWorkspaceSize

  • 参数说明:

    • x1(aclTensor*,计算输入):表示标准化过程中的源数据张量,公式中的[object Object],Device侧的aclTensor。shape支持1-8维。支持ND,支持
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • x2(aclTensor*,计算输入):表示标准化过程中的源数据张量,公式中的[object Object],Device侧的aclTensor。shape支持1-8维,shape和数据类型需要与x1保持一致。支持ND,支持
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • gamma(aclTensor*,计算输入):表示标准化过程中的权重张量,公式中的[object Object],Device侧的aclTensor。shape支持1-8维,shape需要与x1需要Norm的维度保持一致,数据类型需要与x1保持一致。支持ND,支持
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • scales1(aclTensor*,计算输入):表示量化过程中得到y1进行的scales张量,公式中的[object Object],Device侧的aclTensor。shape需要与gamma保持一致。支持ND,支持。当参数divMode的值为True时,该参数的值不能为0。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、BFLOAT16。
    • scales2Optional(aclTensor*,计算输入):表示量化过程中得到y2进行的scales张量,公式中的[object Object],Device侧的aclTensor。可选参数,支持传入空指针。shape需要与gamma保持一致,数据类型需要与scales1保持一致。支持ND,支持。当参数divMode的值为True时,该参数的值不能为0。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、BFLOAT16。
    • zeroPoints1Optional(aclTensor*,计算输入):表示量化过程中得到y1进行的offset张量,公式中的[object Object],Device侧的aclTensor。可选参数,支持传入空指针。shape需要与gamma保持一致。支持ND,支持
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持INT32。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持INT32、BFLOAT16。
    • zeroPoints2Optional(aclTensor*,计算输入):表示量化过程中得到y2进行的offset张量,公式中的[object Object],Device侧的aclTensor。可选参数,支持传入空指针。shape需要与gamma保持一致,数据类型需要与zeroPoints1Optional保持一致。支持ND,支持
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持INT32。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持INT32、BFLOAT16。
    • betaOptional(aclTensor*,计算输入):表示标准化过程中的偏置项,公式中的[object Object],Device侧的aclTensor。可选参数,支持传入空指针。shape支持1-8维,shape需要与[object Object]的shape保持一致,数据类型需要与[object Object]保持一致。支持ND,支持非连续的Tensor。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[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,公式中的[object Object],Device侧的aclTensor。shape支持1-8维度,shape需要与输入x1/x2一致,数据类型支持INT8,支持ND,支持
    • y2Out(aclTensor*,计算输出):表示量化输出Tensor,公式中的[object Object],Device侧的aclTensor,可选输出。shape支持1-8维度,shape需要与输入x1/x2一致,数据类型支持INT8,支持ND,支持。当scales2Optional为空时,该输出的值无效。
    • xOut(aclTensor*,计算输出):表示x1和x2的和,公式中的[object Object],Device侧的aclTensor,可选输出。shape支持1-8维度,shape和数据类型需要与输入x1/x2一致,支持ND,支持
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • rmsNormOut(aclTensor*,计算输出):表示进行RmsNorm之后的结果,公式中的[object Object],Device侧的aclTensor,可选输出。shape支持1-8维度,shape和数据类型需要与输入x1/x2一致,支持ND,支持
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16。
    • workspaceSize(uint64_t*,出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。
  • 返回值:

    aclnnStatus:返回状态码。(参见

    [object Object]

aclnnAddRmsNormQuantV2

  • 参数说明:

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

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

约束说明

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

  • 可选输出[object Object][object Object],必须且只能选择其一进行输出。

  • 当需要输出[object Object]时,此时要求[object Object][object Object]的shape保持一致,且需要与[object Object]需要Norm的维度保持一致,可选输出只能输出[object Object]

  • 当需要输出[object Object]时,且参数[object Object][object Object]的shape为[1],且[object Object]的shape为1维且与x1的最后一维相等或者[object Object]的shape为2维且第一维为1、第二维为[object Object]的最后一维时,此时[object Object][object Object]不生效。

  • 当需要输出[object Object]时,参数[object Object][object Object]的shape为[1],且[object Object]的shape为1维且与x1的最后一维相等或者[object Object]的shape为2维且第一维为1、第二维为[object Object]的最后一维,且[object Object][object Object]必须传空指针,此时[object Object][object Object]不生效。

  • 支持类型说明

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

  • 边界值场景说明

    • [object Object]Atlas 推理系列产品[object Object]:输入不支持包含inf和nan。
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[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 A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:

      [object Object]undefined
    • [object Object]Atlas 推理系列产品[object Object]:

      [object Object]undefined

调用示例

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

[object Object]