十月七日前后挂出的 arXiv 2610.09372,标题就很直白:Expert Coupling in MoE Pretraining,讲的是怎么靠「相关专家放置」和「token 洗牌」两招,把 MoE 预训练里最贵的 all-to-all 通信砍掉一大截。作者发现,专家之间并不是随机被选中的——有那么几对专家经常被同一个 token 一起激活。他们利用这个相关性,把常被同时选中的专家放在同一张 GPU 上,再配一个让每个 token 只给每张 GPU 发一次的调度器,最多能砍掉 58% 的派遣行。

MoE 的 all-to-all 为什么这么贵?

MoE 前向里,每个 token 经路由器挑出几个专家,然后要靠一次 all-to-all 通信,把 token 数据送到持有对应专家的那张 GPU 上,算完再 all-to-all 收回来。模型一大、专家一多,这个「把 token 派到各张卡」的通信就成了瓶颈,在端到端时间里占掉相当大的比例。过去优化的重点是通信原语本身(更快的 all-to-all、更薄的调度),这篇论文换了个角度:能不能从一开始就让「该通信的 token」变少。

「相关专家放置」是怎么省通信的?

关键观察是:如果专家 A 和专家 B 总是被同一个 token 同时选中,那把它们放在同一张 GPU 上,这个 token 就根本不需要跨卡——它本地就把两个专家都算完了。作者先用统计方法从训练轨迹里找出这种「专家耦合」对,再据此重新摆放专家,让耦合专家尽量同卡。配合一个「每个 token 到每张 GPU 只发一次」的调度器,本来要派往多张卡的行被合并,报告里最多减少 58% 的派遣行。token 洗牌则是在序列并行把 token 切到各卡时,提前把 token 搬到它下一层预测要去的那张卡上,藏在 reduce-scatter 的间隙里,省掉显式搬运。

这种「按相关性重新摆放」,训练时不会乱吗?

一个天然的担心是:专家和 token 的对应关系是动态的,摆放固定下来,会不会反而造成新的负载不均?作者的回答是,他们统计的是训练中稳定存在的耦合模式,不是逐 batch 抖动的噪声——这种长期相关性足以支撑一个相对静态的放置。而且这套方法不需要改模型权重、不需要重新训练,只是在部署调度层做重排,因此可以叠加在已有 MoE 上。对那些已经被 all-to-all 卡脖子的大规模 MoE 训练集群,这是一条「不改模型、只改摆放」就能换吞吐的实在优化。

去论坛讨论

前往 silicon-agi.com 论坛 参与讨论