Distributed Implementation of Muon and Emerging Optimizers in Megatron-Core
傅德禹, NVIDIA GPU 加速计算专家团队 | Al Open Day | Nov 07, 2025
议程
Page 2
- Muon 与新兴优化器
- 实现与 Mcore 集成
- 逐层分布式优化器
- 部署与结果
- 结论与未来路线图
新兴优化器的涌现
为何是现在?
基于预处理(Pre-Condition)的优化器
近似二阶方法
- 二阶方法: 利用二阶偏导数(Hessian 矩阵 H)和牛顿方向
p = -H⁻¹∇f(xₜ)。
Page 4
- 预处理方法: 使用多种预处理器来“模拟”Hessian矩阵的信息,以加速一阶(基于梯度)方法,即找到一个“更好”的方向。
- 以 Shampoo 为例,对于给定的权重层
W 和梯度 G:
- 更新预处理器:
Lₜ = Lₜ₋₁ + GₜGₜᵀ
Rₜ = Rₜ₋₁ + GₜᵀGₜ
- 更新权重:
Wₜ₊₁ = Wₜ - ηLₜ⁻¹ᐟ⁴ Gₜ Rₜ⁻¹ᐟ⁴
对 Shampoo 的推广
Page 5
-
SOAP:
- Kronecker 因子的特征向量作为预处理器,接近但不完全精确,其中
m = n = -1/2 且 β 是一个参数。
- 选择使用特征分解或 QR 分解来更新特征基。
-
Muon:
- 实际上等同于设置
β = 0, m = -1/2, n = 0。
- 使用 Newton-Schulz 方法来近似矩阵的逆。
对 Muon 的浓厚兴趣
为何选择 Muon?
- 始终表现出优于 AdamW 的结果。
-
已被开源基础模型验证。
- 实现更快的收敛,减少所需的训练步数。
- 通过更好的优化环境条件来提高最终模型的质量。
- 由于对学习率的敏感性降低,使得超参数调整更加高效。
-
所有操作都映射为矩阵乘法,易于实现。
实现与 Mcore 集成
Page 7
独立的 GitHub 代码库
地址: https://github.com/NVIDIA-NeMo/Emerging-Optimizers
Muon 算法
Page 9
- 在应用更新前,使用 Newton-Schulz 方法进行正交化 SGD 更新。
- 作用于 2D 权重,而非逐点操作。
- Newton-Schulz 是一个迭代且计算密集的过程。
Muon 优化
优化 NS (Newton-Schulz) 步骤
Page 10
Megatron-Core 集成
易用性
逐层分布式优化器
Page 12
Mcore 分布式优化器 (ZeRO-1)
Page 13
-
与 ZeRO-1 相似,但不完全相同。
- 优化器和其状态在数据并行(DP)的 ranks 之间分片。
- Reduce-scatter 梯度和 all-gather 参数。
- 主要使用 fp32 参数和混合梯度。
-
结果是,优化器更新是分布式的。
- 更重要的是,这减少了优化器的状态并节省了内存。
- reduce-scatter 和 all-gather 作为性能优化可以重叠。
- 内存消耗对比: 假设我们使用混合精度训练和 Adam 优化器。比较使用和不使用 ZeRO-1 的总内存使用量。
ψ 表示模型大小(参数数量),Nd 表示 DP 的度。
- 不使用 ZeRO-1 的内存消耗是
(2 + 2 + 3 * 4) * ψ = 16ψ。
- 使用 ZeRO-1 的内存消耗是
2ψ + 2ψ + 12ψ/Nd。
规模化挑战
Muon 无法与 Mcore 分布式优化器协同工作
- 在规模化场景下,分布式优化器(或 FSDP)是必需的。
- 预处理器(preconditioner)的计算需要整个层的梯度。传统的 uniform RS -> update -> AG 流程无法工作。
下图展示了梯度缓冲区分片(全局、本地、参数)的情况,其中每个 DP rank 只持有部分参数的梯度。
Page 14
我们的解决方案
逐层分解 (Layer wise decomposition)
- 将不同的层分发到不同的 GPU,而不是将扁平化的完整模型均匀地分发。
- 这种方法需要解决一些问题:
- 通信将变为非均匀的,需要可变大小的 reduce-scatter 和 all-gather。
- 工作量和内存消耗可能不均衡。
- 随着 DP ranks 数量的增加,需要扩展到更多的层。
下图展示了两种不同的分发策略。
Page 15
替代算法
由 Kimi 使用
- 各个 rank 在层权重边界与邻居交换梯度,然后执行常规更新并丢弃“多余”部分。
- 一个 rank 最多与2个邻居通信并收集2个层的数据。
- 大层跨越多个 rank 可能会导致问题(下图黄色参数部分)。
- 更大的问题:新版本的 Distopt 和 FSDP 使用更细粒度的权重分片,例如,所有权重均匀地分片到所有 rank。这会导致大量的通信和重复更新,从而导致性能不佳。
Page 16
实现与优化
再次强调,优先考虑易用性
部署与结果
通过 MLM 参数更改进行简单部署
DS-v2 代理模型,GPU == DP SIZE == 64
内存使用单位为 GB,时间单位为 ms
Page 20
* 仅供技术讨论和参考。性能可能因不同产品组合而异。
性能结果
- 端到端(E2E)性能由于重叠更能代表优化器性能,但方差较大。此处的数字是第10步到第100步的90个步骤的平均值。注意,通常优化器时间不到端到端时间的5%。
- 当使用 AdamW 作为内部优化器时,Layerwise 的性能介于有/无 all gather 重叠的 distopt 之间。
- Muon 的计算密集度更高,但在分片到 DP ranks 后,其相较于 AdamW 的额外成本是可以接受的。
- Layerwise + Muon 在内存消耗和速度上与 Mcore dist-opt 相匹配,尽管 Muon 的成本更高。
- 我们将在未来几周内分享在更大模型和规模上的更多结果。
收敛性
超参数(HP)建议
- 拆分 QKV 能产生更好的结果。拆分头(heads)则不能。
- 不使用 Nesterov 能产生更好的结果。
- 需要额外的 0.2 缩放因子来使 Muon 的更新 RMS 与 AdamW 相似。
- 复用其他 AdamW 的超参数。
Qwen-30B 收敛结果
与 AdamW 相比,Muon 最终获得了更好的损失,并且尖峰更少。
Page 23
结论与未来路线图
结论
- 新兴优化器为 LLM 训练提供了简便的成本节约方案,值得进一步探索。
- Muon 技术成熟,并被证明比 AdamW 收敛更快、更稳定。
- Mcore Muon 集成在速度和准确性方面均达到生产标准,同时易于使用和维护。
未来路线图
-
近期(数周内)
- 首先登陆 Mcore Dev 分支!
- 实现
MuonClip,无需重新计算 logits。
- 拆分通用的融合权重(包括 MLA)。
- 在各种开源模型上进行更多基准测试。
- 使用 Muon 训练更大的模型(进行中)。
-
长期
- 更好的核函数和分布式 NS 实现。
- 为 Layerwise 分布式优化器提供更快的通信和重叠。
- 低精度训练支持(目前仅 bf16 经过良好测试)。
- FSDP 和更多的检查点格式。
-
欢迎贡献和反馈!