昇腾社区首页
中文
注册

aclnnRotaryPositionEmbeddingGrad

产品支持情况

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

功能说明

  • 算子功能:执行单路旋转位置编码undefined的反向计算。

  • 计算公式

    取旋转位置编码的正向计算中,boardcast的轴列表为dims,则计算公式可表达如下:

    (1)half模式(mode等于0):

    dy1,dy2=chunk(dy,chunks=2,dim=1)dy1, dy2 = chunk(dy, chunks=2, dim=-1) cos1,cos2=chunk(cos,chunks=2,dim=1)cos1, cos2 = chunk(cos, chunks=2, dim=-1) sin1,sin2=chunk(sin,chunks=2,dim=1)sin1, sin2 = chunk(sin, chunks=2, dim=-1) x1,x2=chunk(x,chunks=2,dim=1)x1, x2 = chunk(x, chunks=2, dim=-1) dx=cat((cos1dy1+sin2dy2,cos2dy2sin1dy1),dim=1)dx = cat((cos1 * dy1 + sin2 * dy2, cos2 * dy2 - sin1 * dy1), dim=-1) dcos=sum(dyx,dims)dcos = sum(dy * x, dims) dsin=sum(dycat((x2,x1),dim=1),dims)dsin = sum(dy * cat((-x2, x1), dim=-1), dims)

    (2)interleave模式(mode等于1):

    dy1,dy2=dy[...,::2],dy[...,1::2]dy1, dy2 = dy[..., :: 2], dy[..., 1 :: 2] cos1,cos2=cos[...,::2],cos[...,1::2]cos1, cos2 = cos[..., :: 2], cos[..., 1 :: 2] sin1,sin2=sin[...,::2],sin[...,1::2]sin1, sin2 = sin[..., :: 2], sin[..., 1 :: 2] x1,x2=x[...,::2],x[...,1::2]x1, x2 = x[..., :: 2], x[..., 1 :: 2] dx=stack((cos1dy1+sin2dy2,cos2dy2sin1dy1),dim=1).reshape(dy.shape)dx = stack((cos1 * dy1 + sin2 * dy2, cos2 * dy2 - sin1 * dy1), dim=-1).reshape(dy.shape) dcos=sum(dyx,dims)dcos = sum(dy * x, dims) dsin=sum(dystack((x2,x1),dim=1).reshape(dy.shape),dims)dsin = sum(dy * stack((-x2, x1), dim=-1).reshape(dy.shape), dims)

函数原型

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

  • aclnnStatus aclnnRotaryPositionEmbeddingGradGetWorkspaceSize(const aclTensor *dy, const aclTensor *cos, const aclTensor *sin, const aclTensor *xOptional, int64_t mode, const aclTensor *dxOut, const aclTensor *dcosOut, const aclTensor *dsinOut, uint64_t *workspaceSize, aclOpExecutor **executor)
  • aclnnStatus aclnnRotaryPositionEmbeddingGrad(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

aclnnRotaryPositionEmbeddingGradGetWorkspaceSize

  • 参数说明:

    • dy(aclTensor*,计算输入):表示旋转位置编码的正向计算中输出y的导数,公式中的dy,Device侧的aclTensor。支持undefinedundefined支持ND,维度为4维,数据类型支持BFLOAT16、FLOAT16、FLOAT32。
    • cos(aclTensor*,计算输入):表示旋转位置编码的正向计算中的输入cos,公式中的cos,Device侧的aclTensor。支持undefinedundefined支持ND,维度为4维,数据类型支持BFLOAT16、FLOAT16、FLOAT32,且必须与dy的数据类型一致。
    • sin(aclTensor*,计算输入):表示旋转位置编码的正向计算中的输入sin,公式中的sin,Device侧的aclTensor。支持undefinedundefined支持ND,维度为4维,数据类型支持BFLOAT16、FLOAT16、FLOAT32,且必须与dy的数据类型一致。
    • xOptional(aclTensor*,可选计算输入):表示旋转位置编码的正向计算中的输入x,公式中的x,Device侧的aclTensor。如果该输入为空指针,则不会计算输出dcosOutdsinOut。支持undefinedundefined支持ND,维度为4维,数据类型支持BFLOAT16、FLOAT16、FLOAT32,且必须与dy的数据类型一致。
    • mode(int64_t,计算输入):表示公式中的旋转模式,数据类型为INT64,支持的枚举值如下:
      • 0:表示旋转模式为half模式。
      • 1:表示旋转模式为interleave模式。
    • dxOut(aclTensor*,计算输出):表示旋转位置编码的正向计算中输入x的导数,公式中的dx,Device侧的aclTensor。 不支持undefinedundefined支持ND,维度为4维,数据类型支持BFLOAT16、FLOAT16、FLOAT32,且必须与dy的数据类型一致。
    • dcosOut(aclTensor*,计算输出):表示旋转位置编码的正向计算中输入cos的导数,公式中的dcos,Device侧的aclTensor。只有当输入xOptional不是空指针时,此输出才有意义。不支持undefinedundefined支持ND,维度为4维,数据类型支持BFLOAT16、FLOAT16、FLOAT32,且必须与dy的数据类型一致。
    • dsinOut(aclTensor*,计算输出):表示旋转位置编码的正向计算中输入sin的导数,公式中的dsin,Device侧的aclTensor。 只有当输入xOptional不是空指针时,此输出才有意义。不支持undefinedundefined支持ND,维度为4维,数据类型支持BFLOAT16、FLOAT16、FLOAT32,且必须与dy的数据类型一致。
    • workspaceSize(uint64_t*,出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。
  • 返回值:

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

    [object Object]

aclnnRotaryPositionEmbeddingGrad

  • 参数说明:

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

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

约束说明

  • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]:

    • 输入张量dy支持BNSD、BSND、SBND排布。
    • 输入张量dy、cos、sin、xOptional及输出张量dxOut、dcosOut、dsinOut的D维度大小必须相同,满足D<896,且必须为2的倍数。
    • 输入张量dy、xOptional和输出张量dxOut的shape必须完全相同。
    • 输入张量cos、sin和输出张量dcosOut、dsinOut的shape必须完全相同,且cos和sin的shape必须完全相同。
    • half模式:
      • B,N < 1000;当需要计算dsin、dcos时,B * N <= 1024
      • 当dy为BNSD时,cos、sin支持11SD、B1SD、BNSD
      • 当dy为BSND时,cos、sin支持1S1D、BS1D、BSND
      • 当dy为SBND时,cos、sin支持S11D、SB1D、SBND
    • interleave模式:
      • B * N < 1000
      • 当dy为BNSD时,cos、sin支持11SD
      • 当dy为BSND时,cos、sin支持1S1D
      • 当dy为SBND时,cos、sin支持S11D

调用示例

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

[object Object]