先这样答
MoE 和 Dense 的核心差异,在于训练时的通信和数据分配不同,推理时的计算量和显存需求也不同。选型时,算力受限可以选 Dense,要规模上限可以选 MoE。
训练 MoE 时,模型需要用负载均衡损失,避免路由把大量 token 分给少数专家,导致专家扎堆。MoE 还依赖专家并行,专家之间会产生较大的通信开销。数据效率上,每个专家实际见到的样本更少。Dense 模型不需要在专家之间做路由,也不需要处理专家扎堆的问题,结构更简单。
推理时,MoE 每个 token 只激活部分专家。相同总参数量下,MoE 的单 token 计算量小于 Dense。但 MoE 仍要把全部参数装进显存,所以它用显存换计算力。批处理时,路由分散可以提高专家利用率。需要简单稳定时选 Dense,需要更大的规模上限时选 MoE。
面试官会怎么追问
-
「为什么 MoE 训练时需要负载均衡损失?」
如果路由集中到少数专家,就会出现专家扎堆。部分专家负载过高,其他专家利用不足。负载均衡损失用于避免这种分配失衡。 -
「MoE 推理的计算量更小,为什么还要较大的显存?」
MoE 对每个 token 只激活部分专家,所以单 token 的计算量小于同总参数量的 Dense。模型推理时仍要把全部参数装进显存,不能只按当前 token 激活的专家计算显存。 -
「实际选型时,你会怎么选择 MoE 和 Dense?」
如果算力受限,我会优先选 Dense,因为它更简单、更稳定。如果目标是规模上限,我会考虑 MoE,同时评估训练中的负载均衡和专家通信开销。
回答的坑
- 不要把 MoE 说成显存需求更低,它只减少单 token 的计算量,全部参数仍要装进显存。
- 不要只讲推理阶段的计算量,还要说明训练中的负载均衡、专家通信和每个专家见到的样本更少。
同系列的题
—— 本题完 ——