开发者
下载
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:执行单路旋转位置编码的Inplace计算,直接修改输入张量xRef,不产生新的输出张量。

  • 计算公式:

    (1)interleave模式(rotary_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]) x=xcos+x_rotatesinx = x * cos + x\_rotate * sin
  • partial_slice参数说明:支持对输入张量的最后一维进行部分旋转位置编码计算。通过[object Object]指定[start, end)范围,仅对该范围内的数据进行旋转位置编码。

[object Object]

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

[object Object]
[object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值

    返回aclnnStatus状态码,具体参见

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

    [object Object]
[object Object]
  • 参数说明:

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

[object Object]
  • 确定性计算:
    • aclnnInplacePartialRotaryMul默认确定性实现。
  • 不支持非连续。
  • 仅支持interleave模式(rotary_mode = 1)。
  • Inplace执行:输入xRef和输出共享同一个Tensor,计算结果直接写回输入xRef。
  • 输入张量xRef的shape为BSND排布。各参数的shape约束可以描述如下:
    • 输入张量xRef的最后一维(D)大小不超过1024。
    • interleave模式(rotary_mode = 1)下,xRef最后一维(D)大小必须为2的倍数。partialSlice切片长度(即partialSlice[1] - partialSlice[0])必须为2的倍数。
    • 输入张量cos、sin最后一维大小必须相同,且必须等于partialSlice的切片长度(即partialSlice[1] - partialSlice[0])。
    • cos/sin的shape必须与xRef满足,且存在如下约束:
      • [object Object]Ascend 950PR/Ascend 950DT[object Object]:cos/sin的shape当前只支持BSND、B1ND、B11D、111D排布。
      • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:cos/sin的shape当前只支持BS1D、B11D排布,即要求B轴保持相等。
    • partialSlice约束:sliceStart ≥ 0,sliceEnd ≥ 0,sliceEnd ≤ xRef最后一维(D)大小,sliceLength = sliceEnd - sliceStart >= 0,当sliceEnd和sliceStart相同时,不做旋转位置编码,直接返回。
[object Object]

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

[object Object]