接口功能:
[object Object]接口是对[object Object]接口的功能拓展,在支持x1和x2输入类型为FLOAT16/BFLOAT16的基础上,新增功能如下:计算公式:
- 情形1:如果x1和x2数据类型为FLOAT16/BFLOAT16时,入参x1进行AllGather后,对x1、x2进行MatMul计算。
- 情形2:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8的pertensor场景,或者x1和x2数据类型为INT8/INT4的perchannel、pertoken场景,且不输出amaxOut,入参x1进行AllGather后,对x1、x2进行MatMul计算,然后进行dequant操作。
情形3:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8的perblock场景,且不输出amaxOut, 当x1为(m, k)、x2为(k, n)时, x1Scale为(ceildiv(m, 128), ceildiv(k, 128))、x2Scale为(ceildiv(k, 128), ceildiv(n, 128))时,入参x1和x1Scale进行AllGather后,对x1、x2进行perblock量化MatMul计算,然后进行dequant操作。
情形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操作;
每个算子分为两段式接口,必须先调用[object Object]接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用[object Object]接口执行计算。
参数说明:
[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。
- Atlas 350 加速卡:
- x1、x2:的数据类型支持FLOAT16、BFLOAT16、FLOAT8_E4M3FN、FLOAT8_E5M2、HIFLOAT8。
- 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为(ceilDiv(k, 64), n, 2),仅支持转置场景。
- groupSize:当x1Scale、x2Scale输入都是2维,且数据类型都为FLOAT时,[groupSizeM,groupSizeN,groupSizeK]取值组合仅支持[128, 128, 128],对应groupSize的值为549764202624;当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。
- gatherOut:数据类型支持FLOAT16、BFLOAT16、FLOAT8_E4M3FN、FLOAT8_E5M2、HIFLOAT8。
- groupSize相关约束:
- 仅当x1Scale和x2Scale输入都是2维及以上数据时,groupSize取值有效,其他场景需传入0。
- 传入的groupSize内部会按如下公式分解得到groupSizeM、groupSizeN、groupSizeK,当其中有1个或多个为0,会根据x1/x2/x1Scale/x2Scale输入shape重新设置groupSizeM、groupSizeN、groupSizeK用于计算。原理:假设groupSizeM=0,表示m方向量化分组值由接口推断,推断公式为groupSizeM = m / scaleM(需保证m能被scaleM整除),其中m与x1 shape中的m一致,scaleM与x1Scale shape中的m一致。
- [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
返回值:
第一段接口完成入参校验,出现以下场景时报错:
[object Object]
确定性计算:
[object Object]默认确定性实现。
Atlas 350 加速卡:
- 输入x1为2维,其维度为(m, k)。x2必须是2维,其维度为(k, n),轴满足mm算子入参要求,k轴相等,且k轴取值范围为[256, 65535)。
- bias为1维,shape为(n,)。
- 输出output为2维,其维度为(m*rank_size, n),rank_size为卡数。
- 输出gatherout为2维,其维度为(m*rank_size, k),rank_size为卡数。
- 当x1、x2的数据类型为FLOAT16/BFLOAT16时,output计算输出数据类型和x1、x2保持一致。
- 当x1、x2的数据类型为FLOAT8_E4M3FN/FLOAT_E5M2/HIFLOAT8时,output输出数据类型支持FLOAT16、BFLOAT16、FLOAT。
- 当x1、x2的数据类型为FLOAT16/BFLOAT16/HIFLOAT8时,x1和x2数据类型需要保持一致。
- 当x1、x2数据类型为FLOAT8_E4M3FN/FLOAT_E5M2时,x1和x2数据类型可以为其中一种。
- 当x1、x2数据类型为FLOAT16/BFLOAT16/HIFLOAT8/FLOAT8_E4M3FN/FLOAT_E5M2时,x2矩阵支持转置/不转置场景,x1矩阵只支持不转置场景。
- 当groupSize取值为549764202624,bias必须为空。
- 支持2、4、8、16、32、64卡。
- allgather(x1)集合通信数据总量不能超过16*256MB,集合通信数据总量计算方式为:m * k * sizeof(x1_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)。
- 输入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, 请参考。
Atlas 350 加速卡:
[object Object]