接口功能:
计算公式:
路由专家:
共享专家:
该算子分为两段式接口,必须先调用[object Object]接口获取入参并根据计算流程计算所需workspace大小以及包含了算子计算流程的执行器,再调用[object Object]接口执行计算。
参数说明
[object Object]gmmXQuantMode、gmmWeightQuantMode、mmXQuantMode、mmWeightQuantMode、commQuantMode的枚举值跟关系如下:
- 0: 非量化
- 1: pertensor
- 2: perchannel
- 3: pertoken
- 4: pergroup
- 5: perblock
- 6: mx量化
- 7: pertoken动态量化
返回值
第一阶段接口完成入参校验,出现以下场景报错:
[object Object]
确定性计算:
- aclnnQuantGroupedMatMulAlltoAllv默认确定性实现。
通信引擎约束:
- Ascend 950PR/Ascend 950DT:支持CCU通信。
e * epWorldSize最大支持256,e表示单卡上的专家数量,最大支持到32,epWorldSize支持2/4/8/16/32/64/128/256;
gmmX的shape(A, H1),A为sendCounts之和,H1取值范围(0, 65536);
gmmWeight的shape(e, H1, N1),N1取值范围(0, 65536);
y的shape为(BSK, N1),第一维其中K的范围[2, 8],BSK为recvCounts之和;
mmX是共享专家的左矩阵,shape为(BS, H2),H2的取值范围(0, 12288];
mmWeight是共享专家的右矩阵,shape为(H2, N2),N2的取值范围(0, 65536);
sendCounts为发送到其他卡的token数,数组大小为e * epWorldSize;
recvCounts从其他卡的token数,数组大小为e * epWorldSize;
路由专家和共享专家量化Scale、Mode等均为必选;
低比特通信Mode为必选参数,DType和Scale为可选,当Mode为非0时需要提供DType和Scale;
参数说明里shape使用的变量:
- BSK:本卡接收的token数,是recvCounts参数累加之和,取值范围(0, 52428800)。
- H1:表示路由专家hidden size隐藏层大小,取值范围(0, 65536)。
- H2:表示共享专家hidden size隐藏层大小,取值范围(0, 12288]。
- e:表示单卡上专家个数,0<e<=32,e * epWorldSize最大支持256。
- N1:表示路由专家FFN的中间层维度,取值范围(0, 65536)。
- N2:表示共享专家FFN的中间层维度,取值范围(0, 65536)。
- BS:batch sequence size。
- K:表示选取TopK个专家,K的范围[2, 8]。
- A:本卡发送的token数,是sendCounts参数累加之和。
- ep通信域内所有卡的A参数的累加和等于所有卡上的BSK参数的累加和。
- mx量化且gmmX与gmmWeight为FLOAT4_E2M1时,H1和H2必须为偶数且不能为2,同时transGmmWeight和transMmWeight为false情况下,N1和N2必须为偶数。
- gmmWeight和gmmWeightScale的转置状态必须保持一致:同时转置或同时不转置。mmWeight和mmWeightScale同样需要保持转置状态一致。
- groupSize:
- 仅当gmmXScale/gmmWeightScale/mmXScale/mmWeightScale输入都是2维及以上数据时,groupSize取值有效,其他场景需传入0。
- groupSize值支持公式推导:传入的groupSize内部会按如下公式分解得到groupSizeM、groupSizeN、groupSizeK,当其中有1个或多个为0,会根据gmmX/gmmWeight/mmX/mmWeight/gmmXScale/gmmWeightScale/mmXScale/mmWeightScale输入shape重新设置groupSizeM、groupSizeN、groupSizeK用于计算。设置原理:如果groupSizeM=0,表示m方向量化分组值由接口推导,推导公式为groupSizeM = m / scaleM(需保证m能被scaleM整除),其中m与gmmX/mmX shape中的m一致,scaleM与gmmXScale/mmXScale shape中的m一致;如果groupSizeK=0,表示k方向量化分组值由接口推导,推导公式为groupSizeK = k / scaleK(需保证k能被scaleK整除),其中k与gmmX/mmX shape中的k一致,scaleK与gmmXScale/mmXScale shape中的k一致;如果groupSizeN=0,表示n方向量化分组值由接口推导,推导公式为groupSizeN = n / scaleN(需保证n能被scaleN整除),其中n与gmmWeight/mmWeight shape中的n一致,scaleN与gmmWeightScale/mmWeightScale shape中的n一致。
- 如果满足重新设置条件,当gmmXScale/gmmWeightScale/mmXScale/mmWeightScale输入是2维及以上时,且数据类型都为FLOAT8_E8M0时,[groupSizeM,groupSizeN,groupSizeK]取值组合会推导为[1, 1, 32],对应groupSize的值为4295032864。
量化参数约束:
- 当前版本支持pertensor量化、mx量化。
类型约束
pertensor量化
[object Object]undefined
mx量化
[object Object]undefined
mmX类型与gmmX类型保持一致,mmWeight类型与gmmWeight类型保持一致,mmY类型与y类型保持一致。
示例代码如下,仅供参考,具体编译和执行过程请参考编译与运行样例。
说明:本示例代码调用了部分HCCL集合通信库接口:HcclGetCommName、HcclCommInitAll、HcclCommDestroy,请参考。
Atlas 350 加速卡:
[object Object]