开发者
资源
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能: aclnnMatmulReduceScatterV2接口是对aclnnMatmulReduceScatter接口的功能扩展,在支持x1和x2输入类型为FLOAT16/BFLOAT16的基础上,

    • Atlas 350 加速卡:
      • 新增了对低精度数据类型FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8的支持。支持pertensor、perblock、mx
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:
      • 新增了对低精度数据类型INT8的支持。支持pertoken/perchannel
  • 计算公式

    • 情形1:如果x1和x2数据类型为FLOAT16/BFLOAT16时,对入参x1、x2、bias进行matmul计算后,进行ReduceScatter通信。

      output=ReduceScatter(x1@x2+biasoptional)output=ReduceScatter(x1@x2 + bias_{optional})
    • 情形2:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8的pertensor场景,或者x1和x2数据类型为INT8的perchannel、pertoken场景,且不输出amaxOut,入参x1、x2进行matmul计算和dequant计算后,进行ReduceScatter通信。

      output=ReduceScatter((x1Scalex2Scale)(x1@x2+biasoptional))output=ReduceScatter((x1Scale*x2Scale)*(x1@x2 + bias_{optional}))
    • 情形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、x2进行matmul计算和dequant计算后,再进行ReduceScatter通信。

      output=ReduceScatter(0kblockSize=128(x1pr@x2rq(x1Scaleprx2Scalerq)))output=ReduceScatter(\sum_{0}^{\left \lfloor \frac{k}{blockSize=128} \right \rfloor} (x1_{pr}@x2_{rq}*(x1Scale_{pr}*x2Scale_{rq})))
    • 情形4:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2的mx量化场景,且不输出amaxOut,当x1为(a0, a1)、x2为(b0, b1)时, x1Scale为(a0, ceildiv(a1, 64), 2)、x2Scale为(b0, ceildiv(b1, 64), 2)时,入参x1、x2进行matmul计算和dequant计算后,再进行ReduceScatter通信。

      output=ReduceScatter(0kblockSize=32(x1pr@x2rq(x1Scaleprx2Scalerq)))output=ReduceScatter(\sum_{0}^{\left \lfloor \frac{k}{blockSize=32} \right \rfloor} (x1_{pr}@x2_{rq}*(x1Scale_{pr}*x2Scale_{rq})))
[object Object]

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

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

    [object Object]
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
      • x1、x2:在commMode为aicpu时,数据类型支持FLOAT16、BFLOAT16;commMode为aiv时,数据类型支持FLOAT16、BFLOAT16、INT8,x1数据格式仅支持ND,x2数据格式支持ND、FRACTAL_NZ。
      • bias:在commMode为aicpu时,数据类型支持FLOAT16、BFLOAT16,仅支持为0的输入。在commMode为aiv时,当前版本仅支持输入nullptr。
      • x1Scale:在commMode为aicpu时,仅支持输入nullptr。在commMode为aiv时,数据类型支持FLOAT。当x1和x2数据类型为FLOAT16/BFLOAT16时,仅支持输入为nullptr。在pertoken场景,shape为(m, 1)。
      • x2Scale:在commMode为aicpu时,仅支持输入nullptr。在commMode为aiv时,数据类型支持FLOAT、INT64,数据格式支持ND。INT64数据类型仅在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保持一致。
    • Atlas 350 加速卡:
      • x1、x2:数据类型支持FLOAT16、BFLOAT16、FLOAT8_E4M3FN、FLOAT8_E5M2、HIFLOAT8,数据格式仅支持ND。
      • bais:如果x1的数据类型是FLOAT16、BFLOAT16,则bias的数据类型必须为FLOAT16、BFLOAT16。如果x1的数据类型是FLOAT8_E4M3FN、FLOAT8_E5M2、HIFLOAT8时,在pertensor和mx量化场景下,bias的数据类型必须为FLOAT。在perblock场景下,仅支持输入为nullptr。
      • x1Scale:当x1和x2数据类型为FLOAT16、BFLOAT16时,仅支持输入为nullptr。在pertensor场景下,shape为[1]。在perblock场景下,shape为[ceildiv(m, 128), ceildiv(k, 128)]。在pertensor和perblock场景下,数据类型支持FLOAT。在mx量化场景下,数据类型为FLOAT8_E8M0,shape为(m, ceilDiv(k, 64), 2)。
      • x2Scale:当x1和x2数据类型为FLOAT16、BFLOAT16时,仅支持输入为nullptr。在pertensor场景下,shape为[1]。在perblock场景下,shape为[ceildiv(k, 128), ceildiv(n, 128)]。在pertensor和perblock场景下,数据类型支持FLOAT。在mx场景下,数据类型为FLOAT8_E8M0,shape为(n, ceilDiv(k, 64), 2)。
      • groupSize:在perblock场景下,x1Scale、x2Scale输入都是2维,且数据类型都为FLOAT时,[groupSizeM,groupSizeN,groupSizeK]取值组合仅支持[128, 128, 128],对应groupSize的值为549764202624;在mx量化场景下,当x1Scale、x2Scale输入都是3维,且数据类型都为FLOAT8_E8M0时,[groupSizeM, groupSizeN, groupSizeK]取值组合仅支持[1, 1, 32],对应groupSize的值为4295032864;其他场景输入,当前版本仅支持输入0。
      • commMode:当前版本仅支持输入“ccu”。
      • output:如果x1类型为FLOAT16、BFLOAT16,则output类型与x1保持一致。如果x1类型为FLOAT8_E4M3FN、FLOAT8_E5M2、HIFLOAT8,则数据类型支持FLOAT16、BFLOAT16、FLOAT。groupSize=groupSizeKgroupSizeN<<16groupSizeM<<32groupSize = groupSizeK | groupSizeN << 16 | groupSizeM << 32
  • 返回值

    返回aclnnStatus状态码,具体参见

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

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

    [object Object]
  • 返回值

    返回aclnnStatus状态码,具体参见

[object Object]
  • 确定性计算:

    • [object Object]默认采用确定性计算实现。
  • Atlas 350 加速卡:

    • 只支持x2矩阵转置/不转置,x1矩阵仅支持不转置场景。
    • 输入x1为2维,其shape为(m, k),m须为卡数rank_size的整数倍。
    • 输入x2必须是2维,其shape为(k, n),轴满足mm算子入参要求,k轴相等,且k轴取值范围为[256, 65535)。
    • bias为1维,shape为(n,)。
    • 输出为2维,其shape为(m/rank_size, n), rank_size为卡数。
    • 当x1、x2的数据类型为FLOAT16/BFLOAT16时,x1/x2支持的空tensor场景,m和n可以为空,k不可为空,且需满足以下条件:
      • m为空,k不为空,n不为空;
      • m不为空,k不为空,n为空;
      • m为空,k不为空,n为空。
    • 当x1、x2的数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8时,不支持空tensor。
    • 当x1、x2的数据类型为FLOAT16/BFLOAT16/HIFLOAT8时,x1和x2的数据类型需要保持一致。
    • 当x1、x2的数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2时,x1和x2的数据可以为其中一种。
    • 支持2、4、8、16、32、64卡。
    • reduceScatter集合通信数据总量不能超过16*256MB,集合通信数据总量计算方式为:m * n * sizeof(output_dtype)。由于shape不同,算子内部实现可能存在差异,实际支持的总通信量可能略小于该值。
  • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:

    • 只支持x2矩阵转置/不转置,x1矩阵仅支持不转置场景。
    • 输入x1为2维,其shape为(m, k),m须为卡数rank_size的整数倍。
    • 输入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的数据类型需要保持一致。
    • 支持2、4、8卡。
[object Object]

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

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

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

    [object Object]
  • Atlas 350 加速卡:

    [object Object]