开发者
资源
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能 :LayerNorm算子是大模型常用的归一化操作。AddLayerNormQuant算子将LayerNorm前的Add算子和LayerNorm归一化输出给1个或2个下游的量化算子融合起来,减少搬入搬出操作。LayerNorm下游的量化算子可以是Quantize、AscendQuantV2或DynamicQuant算子,具体的量化算子类型由attr入参divMode和quantMode决定。当下游有2个量化算子时,2个量化算子的算子类型、输入输出dtype组合和可选输入的组合需要完全一致。
  • 计算公式: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(y/outScales1Out)y1Out = round(y / 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(y/outScales1Out),y2Out=round(y/outScales2Out)y1Out = round(y / outScales1Out),\quad y2Out = round(y / 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]
  • 功能维度:

    • 可选输入(scales1Optional、scales2Optional、zeroPoints1Optional、zeroPoints2Optional)支持的可选输入组合如下所示:[object Object]undefined
      其中:
      • [object Object]代表可选输入存在,[object Object]合法。
      • [object Object]代表可选输入不存在,[object Object]不合法。
      • [object Object]代表任意情况均可。
  • 数据类型支持说明:

    • [object Object]为"static"时:

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

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

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

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

[object Object]