昇腾社区首页
中文
注册

aclnnAddLayerNormGrad

产品支持情况

产品 是否支持
[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] ×

功能说明

  • 算子功能:LayerNorm是一种归一化方法,可以将网络层输入数据归一化到[0, 1]之间。LayerNormGrad算子是深度学习中用于反向传播阶段的一个关键算子,主要用于计算LayerNorm操作的梯度。AddLayerNormGrad算子是将Add和LayerNormGrad融合起来,减少搬入搬出操作。

  • 计算公式

    • 正向公式:(D为reduce轴大小)

      x=inputx1+inputx2x= inputx1 + inputx2 LayerNorm(x)=xiE(x)Var(x)+epsγ+β\operatorname{LayerNorm}(x)=\frac{x_i−\operatorname{E}(x)}{\sqrt{\operatorname{Var}(x)+ eps}}*\gamma + \beta 其中E(xi)=1D1Dxi其中\operatorname{E}(x_i)=\frac{1}{D}\sum_{1}^{D}{x_i} Var(xi)=1D1D(xiE(x))2\operatorname{Var}(x_i)=\frac{1}{D}\sum_{1}^{D}{(x_i-\operatorname{E}(x))^2}
    • 反向公式:

      x=inputx1+inputx2x= inputx1 + inputx2 dxOut=jinputdyiγjdxj^dxi+dsumOptionaldxOut = \sum_{j}{inputdy_i * \gamma_j * \frac{{\rm d}\hat{x_j}}{{\rm d}x_i}} + dsumOptional dgammaOut=jinputdyidxj^dxidgammaOut = \sum_{j}{inputdy_i * \frac{{\rm d}\hat{x_j}}{{\rm d}x_i}} dbetaOut=jinputdyidbetaOut = \sum_{j}{inputdy_i}

      其中:

      • xj^\hat{x_j}

        xj^=(xiE(x))rstd\hat{x_j}=({x_i-\operatorname{E}(x)}) * {rstd}
      • rstdrstd

        rstd=1Var(x)rstd=\frac {1}{\sqrt{\operatorname{Var}(x)}}
      • dxj^dxi\frac{{\rm d}\hat{x_j}}{{\rm d}x_i}

        dxj^dxi=(δijdE(x)dxi)1Var(xi)1Var(xi)(xjE(x))dVar(xi)dx\frac{{\rm d}\hat{x_j}}{{\rm d}x_i}=(\delta_{ij} - \frac{{\rm d}\operatorname{E}(x)}{{\rm d} x_i}) * \frac{1}{\sqrt{\operatorname{Var}(x_i)}}-\frac{1}{\operatorname{Var}(x_i)} (x_j-\operatorname{E}(x))\frac{\rm d \operatorname{Var}(x_i)}{\rm dx}

        其中,当i=j时,δij\delta_{ij}=1;当i!=j时,δij\delta_{ij}=0。

      • dE(x)dxi\frac{{\rm d}\operatorname{E}(x)}{{\rm d}x_i}

        dE(x)dxi=1D\frac{{\rm d}\operatorname{E}(x)}{{\rm d}x_i}=\frac{1}{D}

        其中,D为x中参加均值计算的数量。

      • dVar(xi)dx\frac{\rm d \operatorname{Var}(x_i)}{\rm dx}

        dVar(xi)dx=1D1Var(xi)(xiE(x))\frac{\rm d \operatorname{Var}(x_i)}{\rm dx}=\frac{1}{D}\frac{1}{\sqrt{\operatorname{Var} (x_i)}}(x_i-\operatorname{E}(x))
      • 化简后的dxOutdxOut

        dxOut=rstd(inputdyiγj1D(jinputdyiγj+xj^jinputdyiγjxj^))+dsumOptionaldxOut = rstd * ({inputdy_i * \gamma_j} - \frac{1}{D} * (\sum_{j}{inputdy_i * \gamma_j} + \hat {x_j} * \sum_{j}{inputdy_i * \gamma_j * \hat{x_j}})) + dsumOptional

函数原型

每个算子分为undefined,必须先调用“aclnnAddLayerNormGradGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnAddLayerNormGrad”接口执行计算。

  • aclnnStatus aclnnAddLayerNormGradGetWorkspaceSize(const aclTensor *dy, const aclTensor *x1, const aclTensor *x2, const aclTensor *rstd, const aclTensor *mean, const aclTensor *gamma, const aclTensor *dsumOptional, const aclTensor *dxOut, const aclTensor *dgammaOut, const aclTensor *dbetaOut, uint64_t *workspaceSize, aclOpExecutor **executor)
  • aclnnStatus aclnnAddLayerNormGrad(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

aclnnAddLayerNormGradGetWorkspaceSize

  • 参数说明:

    • dy(aclTensor *,计算输入):主要的grad输入,公式中的inputdy,Device侧的aclTensor,shape支持1-8维,undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16、BFLOAT16。
    • x1(aclTensor *,计算输入):为正向融合算子的输入x1,公式中的inputx1,Device侧的aclTensor,shape、数据类型与dy的shape、数据类型保持一致。undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16、BFLOAT16。
    • x2(aclTensor *,计算输入):为正向融合算子的输入x2,公式中的inputx2,Device侧的aclTensor,shape、数据类型与dy的shape、数据类型保持一致。undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16、BFLOAT16。
    • rstd(aclTensor *,计算输入):表示正向输入x1、x2之和的标准差的倒数,公式中的rstd,Device侧的aclTensor,输入数据类型支持FLOAT32,shape需要与dy满足undefined(前几维的维度和dy前几维的维度相同,前几维指dy的维度减去gamma的维度,表示不需要norm的维度),undefined支持ND,支持undefined
    • mean(aclTensor *,计算输入):表示正向输入x1、x2之和的均值,公式中的E(x),Device侧的aclTensor,数据类型支持FLOAT32,shape需要与dy满足undefined(前几维的维度和dy前几维的维度相同,前几维指dy的维度减去gamma的维度,表示不需要norm的维度),undefined支持ND,支持undefined
    • gamma(aclTensor *,计算输入):表示正向输入的gamma,公式中的γ,Device侧的aclTensor,shape维度和dy后几维的维度相同,shape支持1-8维,表示需要norm的维度。数据类型与dy的数据类型保持一致。undefined支持ND,支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16、BFLOAT16。
    • dsumOptional(aclTensor *,计算输入):额外的反向梯度累加输入,shape支持2-8维,公式中的dsumOptional,Device侧的aclTensor,undefined支持ND,支持undefined。shape、数据类型与dy的shape、数据类型保持一致。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16、BFLOAT16。
    • dxOut(aclTensor *,计算输出):表示输入x1+x2之和的梯度。shape支持2-8维,公式中的dxOut,Device侧的aclTensor,undefined支持ND,支持undefined。shape、数据类型与dy的shape、数据类型保持一致。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT32、FLOAT16、BFLOAT16。
    • dgammaOut(aclTensor *,计算输出):表示入参gamma的梯度,数据类型支持FLOAT32,公式中的dgammaOut,Device侧的aclTensor,shape与输入gamma一致,undefined支持ND,支持undefined
    • dbetaOut(aclTensor *,计算输出):表示正向入参beta的反向梯度,数据类型支持FLOAT32。公式中的dbetaOut,Device侧的aclTensor,shape与输入gamma一致,undefined支持ND,支持undefined
    • workspaceSize(uint64_t *,出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor **,出参):返回op执行器,包含了算子计算流程。
  • 返回值:

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

    [object Object]

aclnnAddLayerNormGrad

  • 参数说明:

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

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

约束说明

  • 功能维度

    • 数据类型支持
      • [object Object]Atlas 推理系列产品[object Object]:dy、x1、x2、gamma、dsumOptional、dxOut支持FLOAT32、FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:dy、x1、x2、gamma、dsumOptional、dxOut支持FLOAT32、FLOAT16、BFLOAT16。
      • rstd、mean、dgammaOut、dbetaOut支持:FLOAT32。
    • 数据格式支持:ND。
  • 未支持类型说明

    DOUBLE:指令不支持DOUBLE。

  • 支持类型说明

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

  • 边界值场景说明

    • 当输入是inf时,输出为inf。
    • 当输入是nan时,输出为nan。

调用示例

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

[object Object]