开发者
下载
[object Object]

[object Object][object Object]
  • [object Object]Ascend 950PR/Ascend 950DT[object Object]:支持
[object Object][object Object]
  • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:支持
[object Object][object Object]
  • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:支持
[object Object][object Object]
  • [object Object]Atlas 200I/500 A2 推理产品[object Object]:不支持
[object Object][object Object]
  • [object Object]Atlas 推理系列产品[object Object]:支持
[object Object][object Object]
  • [object Object]Atlas 训练系列产品[object Object]:不支持
[object Object][object Object]
  • 接口功能:LayerNorm算子是大模型常用的归一化操作。AddLayerNormQuantV2算子将LayerNorm前的Add算子和LayerNorm归一化输出给1个或2个下游的量化算子融合起来,减少搬入搬出操作。LayerNorm下游的量化算子可以是Quantize、AscendQuantV2或DynamicQuant算子,具体的量化算子类型由attr入参divMode和quantMode决定。当下游有2个量化算子时,2个量化算子的算子类型、输入输出dtype组合和可选输入的组合需要完全一致。本接口相较于,增加了LayerNorm的输出,请根据实际情况选择合适的接口。

  • 计算公式:

    x=x1+x2+biasOptionalx = x1 + x2 + biasOptional y=xE(x)Var(x)+epsilongamma+betay = {{x-E(x)}\over\sqrt {Var(x)+epsilon}} * gamma + beta
    • 当quantMode输入为"static"时,输出outScales1Out和outScales2Out无实际意义。取决于divMode的输入,融合的量化算子可能是Quantize或AscendQuantV2。

      • 当divMode输入为true时,融合的量化算子为Quantize,计算公式如下所示:

        y1Out=round(y/scales1Optional+zeroPoints1Optional)y1Out = round(y / scales1Optional + zeroPoints1Optional) y2Out=round(y/scales2Optional+zeroPoints2Optional),当且仅当scales2Optional存在y2Out = round(y / scales2Optional + zeroPoints2Optional), \quad \text{当且仅当scales2Optional存在}
      • 当divMode输入为false时,融合的量化算子为AscendQuantV2,计算公式如下所示:

        y1Out=round(yscales1Optional+zeroPoints1Optional)y1Out = round(y * scales1Optional + zeroPoints1Optional) y2Out=round(yscales2Optional+zeroPoints2Optional),当且仅当scales2Optional存在y2Out = round(y * scales2Optional + zeroPoints2Optional), \quad \text{当且仅当scales2Optional存在}
    • 当quantMode输入为"dynamic"时,输入zeroPoints1Optional和zeroPoints2Optional无实际意义。融合的量化算子是DynamicQuant,此时divMode无效:

      • 若scales1Optional和scales2Optional均无输入,则y2Out和scale2Out输出无实际意义,可忽略。计算公式如下所示:

        outScales1Out=row_max(abs(y))/127outScales1Out = row\_max(abs(y))/127 y1Out=round(y/outScales1Out)y1Out = round(y / outScales1Out)
      • 若仅输入scales1Optional,则y2Out和scale2Out输出无实际意义,可忽略。计算公式如下所示:

        tmp1=yscales1Optionaltmp1 = y * scales1Optional outScales1Out=row_max(abs(tmp1))/127outScales1Out = row\_max(abs(tmp1))/127 y1Out=round(tmp1/outScales1Out)y1Out = round(tmp1 / outScales1Out)
      • 若scales1Optional和scales2Optional均存在,则y2Out和scale2Out输出有效。计算公式如下所示:

        tmp1=yscales1Optional,tmp2=yscales2Optionaltmp1 = y * scales1Optional, \quad tmp2 = y * scales2Optional outScales1Out=row_max(abs(tmp1))/127,outScales2Out=row_max(abs(tmp2))/127outScales1Out = row\_max(abs(tmp1))/127, \quad outScales2Out = row\_max(abs(tmp2))/127 y1Out=round(tmp1/outScales1Out),y2Out=round(tmp2/outScales2Out)y1Out = round(tmp1 / outScales1Out),\quad y2Out = round(tmp2 / outScales2Out)

        其中row_max代表对每行求最大值。

[object Object]

每个算子分为,必须先调用[object Object]接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用[object Object]接口执行计算。

[object Object]
[object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值

    aclnnStatus:返回状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值

    aclnnStatus:返回状态码,具体参见

[object Object]
  • 支持产品约束:

    [object Object]
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:
      • 当前场景仅支持[object Object][object Object][object Object]分别取值为[object Object][object Object][object Object]
      • 当前场景仅支持[object Object][object Object]为空。
      • 当前场景仅支持perTensor量化模式,即[object Object][object Object]的shape为[1],[object Object][object Object]的shape为[1,x1的最后一维]。
      • 当前场景仅支持[object Object][object Object]数据类型与[object Object]保持一致。
    [object Object][object Object]
    • [object Object]Atlas 推理系列产品[object Object]:
      • 当前场景仅支持[object Object][object Object][object Object]分别取值为[object Object][object Object][object Object]
      • 当前场景仅支持[object Object][object Object]为空。
      • 当前场景仅支持perTensor量化模式,即[object Object][object Object]的shape为[1],[object Object][object Object]的shape为[1,x1的最后一维]。
      • 当前场景仅支持[object Object][object Object]数据类型与[object Object]保持一致。
      • 当前场景不支持BFLOAT16类型。
      • 入参[object Object][object Object]的norm轴长度必须大于等于32 Bytes。
    [object Object]
  • 功能维度:

    • 可选输入(scales1Optional、scales2Optional、zeroPoints1Optional、zeroPoints2Optional)支持的可选输入组合如下所示:

      [object Object]undefined

      其中:

      • [object Object]代表可选输入存在或组合方式合法。
      • [object Object]代表可选输入不存在或组合方式不合法。
      • [object Object]代表任意情况均可。
  • 数据类型支持说明:

    • [object Object]为"static"时:

      [object Object]undefined
    • [object Object]为"dynamic"时:

      [object Object]undefined
  • 确定性计算:

    • aclnnAddLayerNormQuantV2默认确定性实现。
[object Object]

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]