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

aclnnAllGatherMatmulV2

产品支持情况

[object Object]undefined

功能说明

  • 接口功能

    [object Object]接口是对[object Object]接口的功能拓展,在支持x1和x2输入类型为FLOAT16/BFLOAT16的基础上,新增功能如下:

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

      新增了对低精度数据类型INT8/INT4的支持。支持pertoken/perchannel

  • 计算公式

    • 情形1:如果x1和x2数据类型为FLOAT16/BFLOAT16时,入参x1进行AllGather后,对x1、x2进行MatMul计算。
    output=AllGather(x1)@x2+biasoutput=AllGather(x1)@x2 + bias gatherOut=AllGather(x1)gatherOut=AllGather(x1)
    • 情形2:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8的pertensor场景,或者x1和x2数据类型为INT8/INT4的perchannel、pertoken场景,且不输出amaxOut,入参x1进行AllGather后,对x1、x2进行MatMul计算,然后进行dequant操作。
    output=(x1Scalex2Scale)(AllGather(x1)@x2+bias)output=(x1Scale*x2Scale)*(AllGather(x1)@x2 + bias) gatherOut=AllGather(x1)gatherOut=AllGather(x1)
    • 情形3:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8的perblock场景,且不输出amaxOut, 当x1为(a0, a1)、x2为(b0, b1)时, x1Scale为(ceildiv(a0, 128), ceildiv(a1, 128))、x2Scale为(ceildiv(b0, 128), ceildiv(b1, 128))时,入参x1和x1Scale进行AllGather后,对x1、x2进行perblock量化MatMul计算,然后进行dequant操作。
    output=0kblockSize=128(AllGather(x1)pr@x2rq(AllGather(x1Scale)prx2Scalerq))output=\sum_{0}^{\left \lfloor \frac{k}{blockSize=128} \right \rfloor} (AllGather(x1)_{pr}@x2_{rq}*(AllGather(x1Scale)_{pr}*x2Scale_{rq})) gatherOut=AllGather(x1)gatherOut=AllGather(x1)
    • 情形4:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2的mx量化场景,x1为(a0, a1)、x2 为(b0, b1),且x1Scale为(a0, ceilDiv(a1, 64), 2)、x2Scale为(b0, ceilDiv(b1, 64), 2),入参x1和x1Scale进行AllGather后,对x1、x2进行MatMul计算,然后进行dequant操作;
    output=0kblockSize=32(AllGather(x1)pr@x2rq(AllGather(x1Scale)prx2Scalerq))output=\sum_{0}^{\left \lfloor \frac{k}{blockSize=32} \right \rfloor} (AllGather(x1)_{pr}@x2_{rq}*(AllGather(x1Scale)_{pr}*x2Scale_{rq})) gatherOut=AllGather(x1)gatherOut=AllGather(x1)

函数原型

每个算子分为两段式接口,必须先调用[object Object]接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用[object Object]接口执行计算。

[object Object]
[object Object]

aclnnAllGatherMatmulV2GetWorkspaceSize

  • 参数说明:

    [object Object]
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
      • x1、x2:数据类型支持FLOAT16、BFLOAT16、INT8、INT4。
      • bias:在commMode为aiv时,当前版本仅支持输入nullptr。
      • x1Scale:数据类型支持FLOAT。当x1和x2数据类型为FLOAT16/BFLOAT16时,仅支持输入为nullptr。在pertoken场景,shape为(m, 1)。
      • x2Scale:数据类型支持FLOAT、INT64。INT64数据类型仅在x1和x2数据类型为INT4或者output数据类型为FLOAT16场景支持。当x1和x2数据类型为FLOAT16/BFLOAT16时,仅支持输入为nullptr。在perchannel场景,shape为(1, n)。
      • groupSize:当前版本仅支持输入为0。
      • commMode:当前仅支持aiv模式。aiv模式下使用AI VECTOR核完成通信任务。当前版本仅支持输入“aiv”。
      • output:数据类型支持FLOAT16、BFLOAT16。 如果x1类型为FLOAT16、BFLOAT16,则output类型与x1保持一致。
      • gatherOut:数据类型支持FLOAT16、BFLOAT16、INT8、INT4。
  • 返回值:

    返回aclnnStatus状态码,具体参见

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

    [object Object]

aclnnAllGatherMatmulV2

  • 参数说明:

    [object Object]
  • 返回值

    返回aclnnStatus状态码,具体参见

约束说明

  • 确定性计算:
    • [object Object]默认确定性实现。
  • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:
    • 只支持x2矩阵转置/不转置,x1矩阵仅支持不转置场景。
    • 输入x1必须是2维,其shape为(m, k)。
    • 输入x2必须是2维,其shape为(k, n),轴满足mm算子入参要求,k轴相等,且k轴取值范围为[256, 65535)。
    • bias为1维,shape为(n,)。
    • 输出为2维,其shape为(m*rank_size, n), rank_size为卡数。
    • 不支持空tensor。
    • x1和x2的数据类型需要保持一致。
    • x1和x2数据类型为INT4时,k与n必须为偶数。
    • 支持2、4、8卡。

调用示例

说明:本示例代码调用了部分HCCL集合通信库接口:HcclGetCommName、HcclCommInitAll、HcclCommDestroy, 请参考

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

[object Object]