昇腾社区首页
中文
注册
开发者
下载

aclnnRotaryPositionEmbeddingV2

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:执行单路旋转位置编码计算。

  • 计算公式:

    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:

      • 不传入rotate参数(推荐half模式1D使用):

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

        x1=x[...,:x.shape[1]//2]x1 = x[..., : x.shape[-1] // 2] x2=x[...,x.shape[1]//2:]x2 = x[..., x.shape[-1] // 2 :] x_rotate=torch.cat((x2,x1),dim=1)x\_rotate = torch.cat((-x2, x1), dim=-1) y=xcos+x_rotatesiny = x * cos + x\_rotate * sin

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

        x1=x[...,::2].view(1,1)x1 = x[..., ::2].view(-1, 1) x2=x[...,1::2].view(1,1)x2 = x[..., 1::2].view(-1, 1) x_rotate=torch.cat((x2,x1),dim=1).view(x.shape[0],x.shape[1],x.shape[2],x.shape[3])x\_rotate = torch.cat((-x2, x1), dim=-1).view(x.shape[0], x.shape[1], x.shape[2], x.shape[3]) y=xcos+x_rotatesiny = x * cos + x\_rotate * sin
      • 传入rotate参数时(由开发者生成rotate矩阵,参考调用示例生成部分):

        x_rotate=x@rotatex\_rotate = x @ rotate y=xcos+x_rotatesiny = x * cos + x\_rotate * sin
  • rotate推荐使用场景

    • interleave模式,且B * N * S > 28800。

    • half模式仅在以下场景时推荐使用:输入矩阵x需要在最后一个维度切分多份时,每一份都需要调用aclnnRotaryPositionEmbedding接口进行旋转位置编码计算,可以通过构造旋转编码矩阵实现一次调用获得性能收益,以x的layout为BSND需要切分为3份为例: x切分为3份,x=[x1x2x3](dim=4)RB×S×N×D,x1RB×S×N×D1,x2RB×S×N×D2,x3RB×S×N×D3,其中D=D1+D2+D3x = [x1|x2|x3]_{(dim=4)} ∈ R^{B×S×N×D}, x1 ∈ R^{B×S×N×D1},x2 ∈ R^{B×S×N×D2},x3 ∈ R^{B×S×N×D3}, 其中D = D1 + D2 + D3,那么可以构造一个rotate矩阵,实现调用一次aclnnRotaryPositionEmbeddingV2接口完成x的旋转位置编码计算功能,rotate矩阵构造如下:

      rotate=diag(rotate1,rotate2,rotate3)=(rotate1000rotate2000rotate3)rotate = diag(rotate1, rotate2, rotate3) = \begin{pmatrix}rotate1&0&0\\0&rotate2&0\\0&0&rotate3\\\end{pmatrix}

      其中rotate1、rotate2、rotate3分别为x1、x2、x3的旋转编码矩阵,单个旋转矩阵构建参考调用示例。

函数原型

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

[object Object]
[object Object]

aclnnRotaryPositionEmbeddingGetWorkspaceSizeV2

  • 参数说明

    [object Object]
    • 参数mode约束:

      • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:0=half,1=interleave。V2接口不同mode参数约束和V1接口相同,开发者可以根据mode在调用示例的辅助矩阵rotate生成中选择合适的rotate生成方式。
    • 参数rotate当前仅支持BFLOAT16类型。

  • 返回值:

    返回aclnnStatus状态码,具体参见

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

    [object Object]

aclnnRotaryPositionEmbeddingV2

  • 参数说明:

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

约束说明

  • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:

    输入张量x支持BNSD、BSND、SBND、TND排布。 输入张量x、cos、sin及输出张量y的D维度大小必须相同,满足D<896,且必须为2的倍数。 输入张量x和输出张量y的shape必须完全相同。 输入张量cos和sin的shape必须完全相同.

    • half模式:
      • B,N < 1000;
      • 当x为BNSD时,cos、sin支持11SD、B1SD、BNSD
        • 当(D/2)% (32/inputDtypeSize) == 0时,需满足B * N <= S * 8
        • 当(D/2)% (32/inputDtypeSize) != 0时,需满足B * N * 2 <= (S + coreNum -1) / coreNum 或者 D >= 80
      • 当x为BSND时,cos、sin支持1S1D、BS1D、BSND
      • 当x为SBND时,cos、sin支持S11D、SB1D、SBND
      • 当x为TND时,cos、sin支持T1D、TND
    • interleave模式:
      • B * N < 1000(N<1000当x为TND)
      • 当x为BNSD时,cos、sin支持11SD
      • 当x为BSND时,cos、sin支持1S1D
      • 当x为SBND时,cos、sin支持S11D
      • 当x为TND时,cos、sin支持T1D

调用示例

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

[object Object]
  • 辅助矩阵rotate生成示例:
[object Object]