
省流啥是MoE就是原本模型有一个大线性层FFN不管来什么token都走一遍这也是推理时主要的计算开销。现在改成多个小FFN层对于每个token选一些最相关的FFN做前向传播因为不是所有token都需要整个FFN的知识。好处是可以降低推理开销并且可以增加专家数量提升模型能力只会导致显存增加但不会增加计算开销。优势在不改变计算量的情况下也就是激活专家数是固定的增加专家数可以优化模型表现左图是训练loss右图是perplexity的负对数都表示了专家越多效果越好上面标的128e,64e就是专家个数左图具体描述了训练速度的加速达到相同的perplexityMoE所需时间减少了7倍并且MoE天然适合多机并行一般的并行需要把FFN层矩阵切开做张量并行而MoE的多个FFN天然就是切开的可以部署到不同机器上只是开始和最后需要两次all-to-all通信举例主流MoE模型主流旗舰模型都采用了MoE包括Deepseek V3.1,Gemini2,GPT4开源小模型也有很多采用了MOE比如Qwen1.5消融实验Deepseek的经典消融实验相同激活参数量的MoE和Dense模型MoE在各个benchmark都明显表现更好缺点当然MoE也有缺点。首先就是MoE参数量大多机并行实现起来需要较高的infra水平。其次训练不稳定如下左图是MoE右图是DenseDense的loss很少出现突然上升但MoE由于专家路由的问题可能出现loss突然上升训炸了常见MoE架构最常见的是左图前面见过了每个token路由到一些FFN层。比较少见的是如右图除了FFN层给注意力层也做MoE每次路由到一部分注意力权重矩阵MoE要点一般的MoE架构主要考虑的点有路由策略专家大小训练方式可能遇到的障碍路由概览主流的路由方式就是选topk。看左侧两个图分别是给每个token选topk的专家以及给每个专家选topk的token。其中给token选topk专家是最主流的。最右侧的图意思是考虑一个全局最优解不是简单的topk后面会细说。消融实验TC,EC分别是给token路由以及给专家路由可以发现给token路由明显更好这也是前面提到的每个token选topk的专家是主流的原因几种路由topk路由一般选哈希路由作为baseline进行对比。哈希路由是通过一个哈希函数把token映射到专家好处是计算量小路由快而且一般好的哈希函数能天然保证负载均衡也就是各个桶的元素是均匀的因为哈希函数要尽量避免哈希碰撞。但缺点是这个路由没有考虑每个token的含义适合分给哪个token是纯随机的但因此正好适合作为baseline检验topk的效果。上面topk右侧标的模型和()意思是这些主流MoE模型的激活专家个数Deepseek是最多的7个还有一些路由方式上方图展示的是基于强化学习的路由训练一个强化学习模型使用交叉熵损失函数。但RL效果不好且训练收敛很慢现在不常用下图的方案是把路由问题建模成一个二分图匹配问题这是经典算法问题每个token和每个专家都有一个匹配得分作为边权现在要给每个token匹配到k个专家使得所有匹配的边权之和最大。可以用网络流解决。这是数学意义上的全局最优解但是一是计算复杂度更高更致命的是网络流这种线性规划算法不适合利用GPU并行化这会导致路由阶段成为推理吞吐的瓶颈。所以综合来看topk计算代价低并且能取得较好的路由效果是综合来看的最优解。topk路由公式topk的具体公式如上s是给每个token匹配上每个专家的打分对这个得分做topk得到gg的映射是如果s在topk里则保持不变否则置零。最后用g来乘上FFN的前向传播结果如果这个专家不在topk里g等于0等价于不选这个专家这样实现可以避免ifelse是适合GPU高吞吐的做法。Deepseek MoEDS对传统MoE的改进有两点一是更细粒度的专家也就是拆成更多更小的FFN这样每个专家更专精。而是设一个共享专家每次都使用消融实验对比可以发现增加共享专家和细粒度划分都是有帮助的也有其他人的实验指出收益来自细粒度专家而不是共享专家这里可以看到共享专家在大多数的情况下都没有更优而增加专家个数明显更优。专家激活比常见的模型激活专家个数/专家总数都在1/4-1/8左右