# 为什么训练 MoEs 如此困难 最近,我发现自己想要一个小型、专注于研究的训练库, 可以快速轻松地进行小实验。这些实验范围 从尝试新的注意力架构(MLA、SWA、NSA、KDA - 所有可插拔)到多精度训练, 再到最近的多优化器设置,使用“新”优化器。我尝试了三大 竞争者(Nemo、Megatron 和 Torchtitan),但由于许多原因,它们 都不适合我的目的,设置、使用和稳定运行都相当痛苦。我再次怀念谷歌的工具, 为此重写我的生产训练堆栈(专为大型基础设施监控和稳定性量身定制) 也感觉是浪费时间,并且会使旧库和新库都变得更糟。 然而,这让我思考,为什么训练前沿质量的“小型” MoEs(比如总参数少于 20B)如此困难?我想要的库/库为什么还不存在?经过一段时间的思考,我能想到的大多数 挑战归结为三件事: - flops / flop 效率 - 负载均衡 / 路由器稳定性 - 数据质量和数量 Flops 训练稠密模型现在相当简单。训练 dynamics 大多是耦合的,如果你的架构中有足够的参数, 模型几乎会在你犯下许多错误的情况下学习(这让我吃过亏不止一次)。[DeepSeek 风格的超稀疏]( MoEs 不同,因为你的训练动态 在某种程度上是解耦的。对于给定的 token,只有一部分 MLP 是活跃的, 随着训练的进行,活跃的专家会随着时间的推移而变化和演变。这就是为什么多轮训练和数据重述对 MoEs (尤其是较大的 MoEs)如此有效的原因。你会获得巨大的推理效率提升和小的 训练效率提升,但代价是解耦的训练动态(使得可预测和稳定地训练变得困难), 你必须投入更多的 flops 以确保学习到一个相对最优的路由策略,并且参与各种策略的专家得到了充分的训练。好吧,这就是 flops / flop 效率挑战出现的地方。第一个挑战是, 由于超稀疏 MoEs 的特性,加载专家需要大量的 HBM, 这意味着你需要很多 GPU,因此系统中有很多空闲的 GPU。FSDP(和各种其他分片拓扑)大多是稠密训练的遗物,...