昇腾社区首页
中文
注册

aclnnAddLayerNorm

产品支持情况

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

功能说明

  • 算子功能:实现AddLayerNorm功能。
  • 计算公式x=x1+x2+biasOptionalx = x1 + x2 + biasOptional rstd=1Var(x)+epsrstd = {{1}\over\sqrt {Var(x)+eps}} y=(xxˉ)rstdγ+βy = (x-\bar{x}) * rstd * \gamma + \beta

函数原型

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

  • aclnnStatus aclnnAddLayerNormGetWorkspaceSize(const aclTensor *x1, const aclTensor *x2, const aclTensor *gamma, const aclTensor *beta, const aclTensor *biasOptional, double epsilon, bool additionalOutput, const aclTensor *yOut, const aclTensor *meanOut, const aclTensor *rstdOut, const aclTensor *xOut, uint64_t *workspaceSize, aclOpExecutor **executor)
  • aclnnStatus aclnnAddLayerNorm(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

aclnnAddLayerNormGetWorkspaceSize

  • 参数说明:

    • x1(aclTensor *,计算输入):表示AddLayerNorm中加法计算的输入,公式中的x1,将会在算子内做(x1 + x2 + biasOptional)的计算并对计算结果做层归一化;是Device侧的aclTensor,shape支持1-8维度,不支持输入的某一维的值为0,undefined支持ND。
      • [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 *,计算输入):表示AddLayerNorm中加法计算的输入,公式中的x2,将会在算子内做(x1 + x2 + biasOptional)的计算并对计算结果做层归一化;是Device侧的aclTensor,shape需要与x1一致,undefined支持ND。
      • [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。
    • beta(aclTensor *,计算输入):对应LayerNorm计算公式中的β\beta,表示层归一化中的beta参数;是Device侧的aclTensor,shape支持1-8维度,与x1需要norm的维度的维度值相同,undefined支持ND。
      • [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。
    • gamma(aclTensor *,计算输入):对应LayerNorm计算公式中的γ\gamma,表示层归一化中的gamma参数;是Device侧的aclTensor,shape支持1-8维度,与x1需要norm的维度的维度值相同,undefined支持ND。
      • [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。
    • biasOptional(aclTensor *,计算输入):可选输入参数,表示AddLayerNorm中加法计算的输入,公式中的biasOptional,将会在算子内做(x1 + x2 + biasOptional)的计算并对计算结果做层归一化;shape可以和gamma/beta或是和x1/x2一致,是Device侧的aclTensor,shape支持1-8维度,undefined支持ND。
      • [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。
    • epsilon(double,计算输入):公式中的输入eps,添加到分母中的值,以确保数值稳定;host侧的aclScalar,数据类型为double,仅支持取值1e-5。
    • additionalOutput(bool,计算输入):表示是否开启x=x1+x2+biasOptional的输出,host侧的aclScalar,数据类型为bool。
    • meanOut(aclTensor *,计算输出):输出LayerNorm算过程中(x1 + x2 + biasOptional)的结果的均值,公式中的xˉ\bar{x},Device侧的aclTensor,数据类型为FLOAT32,shape需要与x1满足undefined(前几维的维度和x1前几维的维度相同,后面的维度为1,总维度与x1维度相同,前几维指x1的维度减去gamma的维度,表示不需要norm的维度),undefined支持ND。计算逻辑:mean = np.mean(x1 + x2 + biasOptional)。
      • [object Object]Atlas 推理系列产品[object Object]:该输出在本产品无效。
    • rstdOut(aclTensor *,计算输出):输出LayerNorm算过程中rstd的结果,Device侧的aclTensor,数据类型为FLOAT32,shape需要与x1满足undefined(前几维的维度和x1前几维的维度相同,后面的维度为1,总维度与x1维度相同),undefined支持ND。
      • [object Object]Atlas 推理系列产品[object Object]:该输出在本产品无效。
    • yOut(aclTensor *,计算输出):表示LayerNorm的结果输出y,Device侧的aclTensor,shape需要与输入x1一致,undefined支持ND。
      • [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。
    • xOut(aclTensor *,计算输出):表示LayerNorm的结果输出x,Device侧的aclTensor,shape需要与输入x1一致,undefined支持ND。
      • [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。
    • workspaceSize(uint64_t *,出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor **,出参):返回op执行器,包含了算子计算流程。
  • 返回值:

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

    [object Object]

aclnnAddLayerNorm

  • 参数说明:

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

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

约束说明

  • 功能维度
    • 数据类型支持
      • [object Object]Atlas 推理系列产品[object Object]:x1、x2、beta、gamma、biasOptional支持FLOAT32、FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:x1、x2、beta、gamma、biasOptional支持FLOAT32、FLOAT16、BFLOAT16。
      • rstdOut、meanOut支持:FLOAT32。
    • 数据格式支持:ND。
    • [object Object]Atlas 推理系列产品[object Object]:x1、x2、beta、gamma、biasOptional五个输入的尾轴长度必须大于等于32 Bytes。
  • 未支持类型说明
    • DOUBLE:不支持DOUBLE。
    • 是否支持空tensor:不支持空进空出。
    • 是否支持非连续tensor:输入输出不支持非连续。
  • 边界值场景说明
    • 当输入是inf时,输出为inf。
    • 当输入是nan时,输出为nan。
  • 各产品支持数据类型说明
    • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
      x1数据类型 x2数据类型 gamma数据类型 beta数据类型 biasOptional数据类型 yOut数据类型 meanOut数据类型 rstdOut数据类型 xOut数据类型
      FLOAT32 FLOAT16 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32
      FLOAT32 BFLOAT16 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32
      FLOAT16 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32
      BFLOAT16 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32
      FLOAT16 FLOAT16 FLOAT32 FLOAT32 FLOAT16 FLOAT16 FLOAT32 FLOAT32 FLOAT16
      BFLOAT16 BFLOAT16 FLOAT32 FLOAT32 BFLOAT16 BFLOAT16 FLOAT32 FLOAT32 BFLOAT16
      FLOAT16 FLOAT16 FLOAT16 FLOAT16 FLOAT16 FLOAT16 FLOAT32 FLOAT32 FLOAT16
      BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 FLOAT32 FLOAT32 BFLOAT16
      FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32
    • [object Object]Atlas 推理系列产品[object Object]:
      x1数据类型 x2数据类型 gamma数据类型 beta数据类型 biasOptional数据类型 yOut数据类型 meanOut数据类型 rstdOut数据类型 xOut数据类型
      FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32 FLOAT32
      FLOAT16 FLOAT16 FLOAT16 FLOAT16 FLOAT16 FLOAT16 FLOAT32 FLOAT32 FLOAT16

调用示例

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

[object Object]