艾伦人工智能研究所在 Hugging Face 发布 Olmo-core 3,重做了开放的混合专家训练系统。混合专家模型可以有很多参数,但每个输入只用其中一部分。整个模型仍然要放进 GPU 内存并在训练中更新。把输入送到集群里正确的专家,本身就有通信和协调成本。模型变大以后,这笔成本会吃掉「只用一部分参数」省下来的计算。

[1]
坦培拉:整面浅褐方格里只有四格填成锈红色。
整面方格铺满画面,只有四格填成锈红色,而且并不挨在一起。对应专家池很大,每个 token 仍然只用少数专家。这是插画,不是训练监控画面。, AI 生成插画,不是新闻照片

一组基准里,专家池从 8 个增加到 128 个,每个 token 仍然只选 4 个专家,每个 token 的活跃参数大约保持在 32 亿。总参数从 46 亿增到 470 亿,训练吞吐下降不到 5%。同一套基础设施测过超过一万亿总参数。

早先的 Olmo-core 混合专家实现用全分片数据并行,每个小批次都要把权重聚拢再拆开。Olmo-core 3 改成基于分布式数据并行:专家留在 GPU 上,把相关数据送过去,不再反复搬运权重。在 8 张 NVIDIA B300 上的初步测试里,一个 470 亿参数的混合专家模型用新栈达到每 GPU 每秒 52000 个 token,早先实现是 19400,大约 2.7 倍。这是他们自己的初步测试,对照的是自己的旧实现,不是 Megatron-Core。

[1]

拆分方式有三种。专家并行让每张 GPU 只存一部分专家。流水线并行把层分到不同 GPU 组。分布式优化器把优化器状态摊开,而不是每张卡都留一份完整副本。路由侧则把数据直接放进专家的输入缓冲,路由元数据留在 GPU 上,并用分组矩阵乘法把许多小计算并起来。

MXFP8 用更少的比特表示一部分数值。在 4 张 B300 上、工作均匀分到各专家的对照里,在帮助最大的部分打开 MXFP8 之后,端到端训练吞吐比 BF16 高大约 21%,峰值活跃显存从 103 GiB 降到 95 GiB。增益主要来自前馈计算和专家之间搬数据,不是只来自注意力。博客写,加快一处可能在别处加成本,格式转换如果太慢,少搬比特也没有用。

[1]

他们在 B300 上测过一个 1.2 万亿参数的模型,每个 token 活跃 583.6 亿参数,用 512 张 GPU。观察到的最高吞吐是每 GPU 每秒 858 万亿次浮点运算。这些测试用随机路由量系统性能,不是量训出来的模型质量。用 DeepEP v2 做过一次 2.38 万亿总参数的短容量测试,不是完整训练,只说明栈能到这个规模。

博客还记下几件不能直接当成收益的结果。一个本来用来鼓励均衡路由的分数,可以在实际负载更不均衡时反而变好,他们把这叫 token gerrymandering。因为专家处理的 token 更少就降低学习率,在他们测的那一族模型里没有更好。同样的矩阵形状,输入数值不同,GPU 计算时间也会不同。把通信和计算叠在不同的 GPU 流上,有的测试里端到端反而更慢。

博客指向技术报告和 GitHub。上面的数字都来自这篇发布说明,没有另核报告里的原始表。文中说,他们接着做的 Olmo 将采用混合专家,并希望它是迄今能力最强的 Olmo,用上最大的数据集和最长的上下文。那是目标,不是这次发布已经训练完的模型。

[1]

要点

  • 专家池从 8 增到 128,每个 token 仍选 4 个专家,活跃参数约 32 亿;总参数从 46 亿到 470 亿,吞吐下降不到 5%。
  • 8 张 B300 上,新栈每 GPU 每秒 52000 token,旧实现 19400,约 2.7 倍。对照的是他们自己的旧栈。
  • 4 张 B300 上,MXFP8 相对 BF16 吞吐高约 21%,峰值活跃显存从 103 GiB 降到 95 GiB。
  • 1.2 万亿参数、512 张 GPU 的最高观察吞吐是每 GPU 858 TFLOP/s,用的是随机路由,不代表模型质量。2.38 万亿是短容量测试。