核心思路:
按照 Token 的输入顺序逐行处理打分矩阵。对于每个 Token,将所有专家按照以下规则排序:
在混合专家大模型中,为了节省算力,并不是所有的神经网络层都会处理所有的Token。
当系统包含E个专家时,对于输入的每一个Token,路由器会给各个专家打分,并只将该Token分配给得分排名前K的专家。同时,为了防止某个专家被分配了过多的Token导致显存溢出,系统为每个专家设置了最大处理容量C。如果某个专家达到了容量上限,后续被路由到该专家的Token将被强制“掩蔽”并丢弃。
给定N个Token对E个专家的原始打分矩阵S(维度N×E),具体流程如下:
Top−K路由掩码生成:对于打分矩阵的每一行i(代表第i个Token),找出得分排名前K的专家索引。生成一个初始的N×E二进制路由掩码矩阵M(1)。
动态容量掩码调度:按顺序(从Token 0到Token N−1)依次处理每个Token。维护一个长度为E的计数器数组load,初始全为0。遍历初始掩码M(1),生成最终的生效掩码M(2):
路由惩罚聚合:根据最终的每个专家的实际负载数组load,计算当前批次的路由不平衡惩罚值P。公式为各专家实际负载的平方和:
P=∑j=0E−1(load[j])2
第1行:N E K C四个整数,以空格分隔,分别为Token数量、专家数量、每个Token激活的专家数、单个专家最大容量。
接下来N行:每行包含E个整数,以空格分隔,代表原始打分矩阵S。
约束条件:
1≤N≤104
1≤E≤100
1≤K≤E
0≤C≤N
0≤Si,j≤104
第1行:一个整数,代表最终的路由惩罚值P。
第2行:E个整数,以空格分隔,代表每个专家最终处理的Token数量。
输入:
4 3 2 2
1 5 4
8 1 2
3 6 5
2 7 9
输出:
9
1 2 2
解释:
Top-K路由:
Token0,选专家1, 2
Token1,选专家0, 2
Token2,选专家1, 2
Token3,选专家1, 2
容量掩码调度:
Token0:专家1, 2容量均充足。load变为[0, 1, 1]
Token1:专家0, 2容量均充足。load变为[1, 1, 2]
Token2:专家1充足,专家2超载。load变为[1, 2, 2]
Token3:专家1, 2均超载。load保持[1, 2, 2]
惩罚聚合:
最终load数组为[1, 2, 2]
惩罚值为load数组中数值的平方和为9
输入:
4 4 2 2
5 5 5 1
2 8 8 9
1 2 9 9
7 7 1 1
输出:
13
2 2 1 2
解释:
Top-K路由:
Token0,前三名得分同为5。根据“优先选择索引较小”规则,因此选专家0, 1
Token1,最高分专家3;第二高分专家1, 2得分同为8,优先选较小的专家1。因此选专家1, 3
Token2,选专家2, 3
Token3,选专家0, 1
容量掩码调度:
Token0:专家0, 1容量均充足。load变为[1, 1, 0, 0]
Token1:专家1, 3容量均充足。load变为[1, 2, 0, 1]
Token2:专家2, 3容量均充足。load变为[1, 2, 1, 2]
Token3:专家0充足,专家1超载。load变为[2, 2, 1, 2]
惩罚聚合:
最终load数组为[2, 2, 1, 2]
惩罚值为load数组中数值的平方和为13
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册