在MOE中,实现topK个专家权重与token激活值的乘法。
UP:根据各个专家的权值,将token值分配给topK个专家。
DOWN:根据各个专家的权值,将topK个专家计算的结果重新整合。
UP过程的计算公式如下:
其中,AcTensor为激活token值,Expertindex为专家-token索引,ExpertWeight为专家权重,计算过程如下:
DOWN过程的计算公式如下:
其中,AcTensor为激活token值,Expertindex为专家-token索引,ExpertWeight为专家权重,计算过程如下:
1 2 3 4 5 6 7 8 9 10 11 |
struct GroupedMatmulWithRoutingParam { enum GroupedMatmulType : int { GROUPED_MATMUL_UP = 0, GROUPED_MATMUL_DOWN }; bool transposeB = true; int32_t topK = 0; GroupedMatmulType groupedMatmulType = GROUPED_MATMUL_UP; aclDataType outDataType = ACL_DT_UNDEFINED; uint8_t rsv[16] = {0}; }; |
成员名称 |
类型 |
默认值 |
取值范围 |
是否必选 |
描述 |
---|---|---|---|---|---|
groupedMatmulType |
GroupedMatmulType |
GROUP_MATMUL_UP |
|
必选 |
GroupedMatmulType类型参数:
|
transposeB |
bool |
true |
false/true |
非必选 |
是否转置 B 矩阵。 |
topK |
int32_t |
0 |
大于0 |
必选 |
选取 topK 个专家数量。 |
outDataType |
aclDataType |
ACL_DT_UNDEFINED |
|
反量化场景必选 |
|
rsv[16] |
uint8_t |
{0} |
[0] |
- |
预留参数。 |
非量化场景
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
AcTensor |
[num_tokens, hidden_size_in] |
float16/bf16 |
ND |
激活值。 |
ExpertWeight |
[num_experts, hidden_size_in, hidden_size_out] |
float16/bf16 |
ND |
专家权重。如果设置“transposeB”为true,则hidden_size_in和hidden_size_out位置调换。 |
ExpertCount |
[num_experts] |
int32 |
ND |
专家 Token 数量。 |
Expertindex |
[num_tokens*topK] |
int32 |
ND |
专家 Token 索引。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
Result |
[num_tokens*Topk, hidden_size_out] |
float16/bf16 |
ND |
输出。 |
量化场景
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
AcTensor |
[num_tokens, hidden_size_in] |
int8 |
ND |
激活值。 |
ExpertWeight |
[num_experts, hidden_size_in, hidden_size_out] |
int8 |
ND/NZ |
专家权重。如果设置“transposeB”为true,则hidden_size_in和hidden_size_out位置调换。 |
ExpertCount |
[num_experts] |
int32 |
ND |
专家 Token 数量。 |
Expertindex |
[num_tokens*topK] |
int32 |
ND |
专家 Token 索引。 |
nscale |
[num_experts, hidden_size_out] |
float |
ND |
ExpertWeight方向反量化系数。 |
mscale |
[num_tokens] |
float |
ND |
AcTensor方向反量化系数。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
Result |
[num_tokens*Topk, hidden_size_out] |
float16/bf16 |
ND |
输出。 |
非量化场景
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
AcTensor |
[num_tokens*topK, hidden_size_in] |
float16/bf16 |
ND |
激活值。 |
ExpertWeight |
[num_experts, hidden_size_in,hidden_size_out] |
float16/bf16 |
ND |
专家权重。如果设置“transposeB”为true,则hidden_size_in和hidden_size_out位置调换。 |
ExpertCount |
[num_experts] |
int32 |
ND |
专家 Token 数量。 |
Expertindex |
[num_tokens*topK] |
int32 |
ND |
专家 Token 索引。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
Result |
[num_tokens, hidden_size_out] |
float16/bf16 |
ND |
输出。 |
量化场景
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
AcTensor |
[num_tokens*topK, hidden_size_in] |
int8 |
ND |
激活值。 |
ExpertWeight |
[num_experts, hidden_size_in,hidden_size_out] |
int8 |
ND/NZ |
专家权重。如果设置“transposeB”为true,则hidden_size_in和hidden_size_out位置调换。 |
ExpertCount |
[num_experts] |
int32 |
ND |
专家 Token 数量。 |
Expertindex |
[num_tokens*topK] |
int32 |
ND |
专家 Token 索引。 |
nscale |
[num_experts, hidden_size_out] |
float |
ND |
ExpertWeight方向反量化系数。 |
mscale |
[num_tokens*topK] |
float |
ND |
AcTensor方向反量化系数。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
Result |
[num_tokens, hidden_size_out] |
float16/bf16 |
ND |
输出。 |