目录
Dense FFN 对所有 Token 使用同一组参数。Mixture of Experts 准备多个 FFN 专家,再由 Router 为每个 Token 选择少数专家。
MoE 增加的是总参数容量;稀疏路由控制的是每个 Token 实际使用的计算量。
1、专家通常是什么
在多数 Transformer MoE 中,每个专家就是一套独立 FFN。Attention 往往仍是共享的,MoE 主要替换 Block 中的 Dense FFN。
专家不一定对应人类可命名的领域,它们是训练中自动形成的参数分工。
2、Router 怎样选择
Router 接收 Token 隐藏状态,为每个专家产生分数,再选择 Top-1 或 Top-2 专家。Token 被发送给选中的专家,输出按路由权重合并。
路由是逐 Token 的,同一句话里的不同 Token 可能进入不同专家。
3、为什么只激活少数专家
如果 E 个专家全部执行,计算会随专家数一起增长。稀疏激活让模型拥有更大的总参数量,同时每个 Token 只支付 K 个专家的计算,其中 K 远小于 E。
4、负载均衡为什么困难
Router 可能把大量 Token 都送给少数热门专家,造成拥堵,其他专家却闲置。训练通常加入负载均衡损失、容量限制或其他路由策略。
超过专家容量的 Token 可能被丢弃、改投其他专家或等待,具体行为取决于实现。
5、MoE 的通信代价
专家分布在不同 GPU 上时,Token 需要通过 All-to-All 发往对应设备,再把结果送回。MoE 节省了算术计算,却可能增加通信、调度和内存访问压力。
6、总参数不等于激活参数
描述 MoE 模型时要同时看总参数和每 Token 激活参数。总参数反映整体容量,激活参数更接近一次 Forward 实际经过的权重规模,但速度还受通信和内核效率影响。
容易混淆的三件事
- 专家不是人工预先命名的职业。
- 稀疏激活不代表权重不占显存。
- 激活参数少不保证端到端一定更快。
记住这 5 件事
- 专家通常是独立 FFN
- Router 逐 Token 选 Top-K
- 总参数大于激活参数
- 需要负载均衡
- 跨卡路由带来通信
参考资料
第十五课复习总图
下一课转向 GPU 执行:FlashAttention 为什么数学结果不变,却能更快、更省显存?