Gram Newton-Schulz:大模型Muon优化提速50%全方案解析

Gram Newton-Schulz 通过重构 Muon 正交化流程,将训练耗时降低 40%~50%,并保持模型效果基本不变。

原文标题:大模型训练避坑:Muon 正交化的 50% 提速全方案

原文作者:数据派THU

冷月清谈:

文章介绍了 Tri Dao 团队提出的 Gram Newton-Schulz 算法,目标是解决 Muon 优化器在大模型训练中“步数更少但单步更慢”的瓶颈。Muon 相比 AdamW 的优势在于收敛效率更高,但其正交化步骤依赖 Newton-Schulz 迭代,涉及大量矩形矩阵乘法,计算和访存开销都很高,尤其在 MoE 等存在大量不规则矩阵的模型中更明显。

新方法的核心思路,是把原本在大矩形矩阵上的迭代,转移到更小且具对称性的 Gram 矩阵上进行。这样不仅减少了浮点运算量,也能利用对称结构避免重复计算,在典型场景下理论上可显著节省算力。

不过,这种重构在半精度环境下容易出现数值不稳定。为此,团队加入了重启策略、代数重排和精度回退等设计,尽量抑制伪负特征值和截断误差带来的崩溃风险。同时,在工程层面配合 Hopper、Blackwell 架构的定制对称矩阵算子与三角调度器,进一步压缩正交化耗时。

实验结果显示,在 Llama-430M、Qwen-600M、Gemma-1B 和 MoE-1B 等模型上,新方案与原版 Muon 的效果几乎一致,验证集困惑度差异控制在很小范围内;而在训练效率上,正交化端到端耗时可降低 40%~50%,特定并行负载下甚至达到 2 倍加速。整体来看,这是一个兼顾数学重构、数值稳定性和硬件适配的训练加速方案。

怜星夜思:

1、问题1:如果 Gram Newton-Schulz 已经把 Muon 的主要瓶颈砍掉一大截,你觉得 Muon 会不会因此更大范围替代 AdamW?
2、问题2:这篇文章反复强调“算法与硬件协同设计”,你觉得这会不会成为以后大模型基础设施优化的常态?
3、问题3:文章里提到数值稳定性修复很关键。你认为在训练系统里,‘更快’和‘更稳’哪一个更难做好?
4、问题4:像这种针对 Muon 正交化的大幅优化,你觉得接下来最值得继续挖的方向会是什么?

原文内容

图片
本文约2000字,建议阅读5分钟
本文介绍了优化 Muon 正交化的 Gram Newton-Schulz 算法及提速方案。


万亿模型训练的免费午餐,一个数学 trick 让 Muon 提速 50%。


在万亿参数大模型的竞逐中,训练效率的细微差距往往关乎巨大的算力成本。近期,Kimi K2 与 GLM-5 等前沿语言模型开始广泛采用 Muon 优化器。


对比 AdamW,Muon 达到特定损失值所需的优化器步数更少,但单步计算开销显著增加。


这种开销主要来自 Newton-Schulz 正交化过程,引入了早期优化器中不存在的三次方时间复杂度矩阵运算。


〓 Muon 与 AdamW 单步实际运行时间的对比


为突破该算力瓶颈,普林斯顿大学 Tri Dao 团队(Mamba 与 FlashAttention 核心作者)联合纽约大学研究人员提出了 Gram Newton-Schulz 算法。


在万亿参数 MoE 模型训练中,该算法将正交化步骤的端到端耗时有效降低了 40% 至 50%。


目前团队已将该算法开源,作为标准 Muon 优化器的即插即用替换模块,无需繁琐配置即可直接获得加速收益。


文章标题:

GREPO: A Benchmark for Graph Neural Networks on Repository-Level Bug Localization

文章链接:

https://dao-lab.ai/blog/2026/gram-newton-schulz/

项目链接:

https://github.com/Dao-AILab/gram-newton-schulz

核心算子链接:

https://github.com/Dao-AILab/quack/blob/main/quack/gemm_symmetric.py


1、为什么标准算法这么慢?


传统优化器(如AdamW)执行逐元素操作,时间复杂度为 


Muon 等现代优化器需要进行正交化,单步计算需要耗费   的时间假设  )。


Muon 的更新规则基于对动量矩阵   的极分解:



由于极分解   精确计算成本高昂,Muon 采用 Newton-Schulz 多项式迭代进行近似:



现代 Transformer 架构(特别是包含大量细粒度专家的 MoE)的权重矩阵形状大多是不规则的矩形,满足 


标准 Newton-Schulz 需要在庞大的矩形矩阵上执行多次乘法,矩形矩阵乘法完全主导了整体计算成本。


〓 包含大量昂贵矩形矩阵乘法的标准 Newton-Schulz 伪代码


更关键的是,算法执行期间产生的诸多中间矩阵具备对称结构,常规计算路线未能有效利用这一数学特性,导致半数计算工作冗余。


〓 标准 Newton-Schulz 在 Hopper 架构下的纯算子优化收益


2、Gram矩阵的数学重构


算法的核心在于转移迭代空间:不再对庞大的矩形输入矩阵   进行迭代,而是转移至尺寸更小且对称的方形 Gram 矩阵 


极分解可表示为  。通过多项式的代数变换,Newton-Schulz 迭代隐含了计算逆平方根的过程。


核心迭代可转化为以下标量形式:



矩阵操作保留了奇异向量,该标量迭代逻辑可直接推广至矩阵空间。空间转换后,算法主体在   的对称矩阵内运行,极大削减了浮点运算次数。


在典型的   场景下,相较于未优化的标准实现,该方法理论上可节省 68% 的浮点运算次数。


3、解决数值不稳定


上述理论在精确算术下完全等价,但在真实的半精度计算环境下会引发严重的数值不稳定。研究团队通过算法与硬件的协同设计,化解了这一工程隐患。


重启策略


在 bfloat16 精度下计算 Gram 矩阵   会产生由于浮点误差导致的伪负特征值。由于更新规则包含平方项,初始微小的负特征值会随迭代呈指数级放大,最终导致数值崩溃。


研究团队引入了重启策略,在算法执行至中途时,利用当前的近似结果重新构造 Gram 矩阵,消除累积的负特征值并重置状态。


图片

〓 引入重启策略后的特征值演变与稳定收敛


代数重排


在计算矩阵二次型时,常规方法会显式加上单位阵  。底层算子在执行该加法时,会先在 float32 下计算并由于输出限制向 float16 截断,导致后续乘法累积严重的精度损失。


团队重排了代数逻辑,将加法操作隐式融入后续计算,即先算  ,再在后续步骤中分配   的运算,全程在 float32 下保持高精度,消除了隐藏的数值隐患。


精度回退决策


针对 bfloat16 的动态范围大但精度位数不足的问题,算法在初始化阶段默认将输入张量转换为 float16。


由于矩阵范数已被严格控制在 1 附近,float16 在这一小区间内能提供更高的尾数精度,进一步夯实了数值基础。


〓 稳定的 Gram Newton-Schulz 算法伪代码


权重拆分策略


工程实现中,团队特别强调了将 SwiGLU 架构中的   和   拆分后独立进行正交化。


由于这两部分对激活函数的梯度贡献机制不同,拆分处理不仅使 Llama-430M 的验证集困惑度优化了约 0.2,更通过减半矩阵的小维度,使得依赖   复杂度的 Gram Newton-Schulz 获得了更显著的提速比例。



〓 不同形状权重矩阵的单步耗时拆解(极端矩形权重加速最显著)


定制三角形调度器


在底层算子层面,为最大化 Gram 矩阵对称性带来的计算红利,团队基于 CuTeDSL 针对 Hopper 和 Blackwell 架构开发了定制算子。



〓 对称矩阵乘法的三角形调度器示意



其核心是一个三角形调度器,仅将矩阵下三角区域的工作块分配给计算集群,并在底层内存回写时转置复制至上三角位置,确保负载均衡并消除冗余的内存访存。


〓 定制对称算子与 cuBLAS 在不同架构下的 TFLOPS 吞吐量对比


4、实验验证与工程收益


在 Llama-430M、Qwen-600M、Gemma-1B 以及 10 亿参数规模的 MoE-1B 模型上进行的对比实验表明,使用 Gram Newton-Schulz 与原版 Muon 的验证集困惑度差异严格控制在 0.01 以内。


〓 不同模型上的验证集困惑度对比(Hopper 架构)


在实际训练耗时方面,新算法配合定制算子切实缩短了正交化的端到端耗时。


在模拟 Kimi K2 模型特定流水线阶段的真实并行负载测试中,Gram Newton-Schulz 实现了 2 倍的端到端正交化加速。



〓 Kimi K2 流水线切片下的端到端耗时对比


5、结语


Gram Newton-Schulz 通过底层的数学逻辑重构与针对性的数值稳定性修复,以及 GPU 架构级别的定制算子优化,打通了现代优化器在大规模并行训练中的效率瓶颈。


这为极度消耗算力的矩阵正交化问题提供了一条可行路径,也再次印证了算法与硬件协同设计的实用价值。


目前,研究团队已将 Gram Newton-Schulz 完整开源。在实际工程应用中,唯一需要微调的超参数仅为重启迭代的节点。


为此,开源库中提供了一个自动化调参脚本,只需输入一组多项式系数,即可自动分析并建议最优的重启节点。


这套兼具理论深度与工程可用性的工具,为受限于算力瓶颈的大模型训练提供了一份切实可用的优化方案。


编辑:于腾凯

校对:林亦霖



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。




新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

我觉得定制化优化肯定是有必要的,因为不同的 GPU 架构有不同的特点。但对于普通开发者来说,确实门槛比较高。不过,我们可以关注一些底层的优化库,比如 CUDA、cuDNN 等,这些库通常会针对不同的 GPU 架构进行优化。另外,也可以借鉴一些开源的优化方案,比如文章中提到的 Gram Newton-Schulz 算法,看看能否应用到自己的项目中。

针对特定硬件架构进行定制化优化是提升性能的有效手段,但确实存在一定的门槛。不同的 GPU 架构在计算能力、内存结构、指令集等方面存在差异,因此针对特定架构进行优化可以充分发挥其潜力。例如,文章中提到的三角形调度器,就是针对 Hopper 和 Blackwell 架构的对称矩阵乘法进行了优化,从而提高了计算效率。

那么,对于其他架构的 GPU,是否也需要进行类似的定制化优化呢?

答案是:取决于你的需求和资源。如果你的目标是达到极致的性能,并且拥有足够的资源和专业知识,那么针对特定架构进行定制化优化是值得考虑的。但如果你的目标是实现一个通用的、可移植的解决方案,或者你的资源有限,那么使用通用的优化方法可能更合适。

对于普通开发者来说,定制化优化可能确实门槛较高。不过,可以关注以下几个方面:

1. 学习 GPU 架构: 了解不同 GPU 架构的特点,例如 NVIDIA 的 CUDA 架构、AMD 的 ROCm 架构等。
2. 使用性能分析工具: 使用性能分析工具(例如 NVIDIA Nsight、AMD CodeXL 等)来分析代码的性能瓶颈。
3. 利用底层优化库: 利用底层优化库(例如 cuBLAS、cuDNN 等)来加速计算。
4. 参考开源项目: 参考开源项目中的优化技巧,例如 PyTorch、TensorFlow 等。

总而言之,定制化优化是一项高级技能,需要深入理解硬件架构和软件优化。对于普通开发者来说,可以从小处着手,逐步学习和掌握相关的知识和技能。

这个问题很有意思,Muon和AdamW就像两种不同策略的赛车。Muon起步慢但后劲足,AdamW起步快但可能后续乏力。选择哪一个,取决于你的赛道(模型和数据集)有多长。如果你的计算资源充足,模型训练时间不敏感,或者你特别看重模型最终的精度,Muon可能更适合你。但如果你的资源有限,需要在短时间内看到效果,AdamW可能更实用。所以,没有绝对的优劣,只有更适合你的场景。我个人倾向于先用AdamW快速迭代,确定模型大致方向后,再尝试Muon来进一步提升性能。当然,最好的方法是在你的具体任务上进行A/B测试,看看哪个优化器效果更好。

除了重启策略和代数重排,还可以考虑使用混合精度训练。例如,在关键步骤使用float32进行计算,保证一定的精度,在其他步骤使用bfloat16加速计算。这是一种trade-off,需要在精度和速度之间找到平衡。

我觉得可以考虑使用正则化方法。在Gram矩阵上添加一个小的扰动项,例如对角线上加上一个很小的正数,可以保证矩阵的正定性,避免出现负特征值。当然,这个扰动项的大小需要仔细调整,不能对结果产生太大影响。

我寻思着,用了开源的算法,第一件事肯定是先读文档啊!看看作者有没有提到什么坑,或者有什么最佳实践。

然后,我觉得要注意以下几点:

* 硬件兼容性:虽然文章说在 Hopper 和 Blackwell 架构上优化过,但不代表其他硬件就不能用。可以先在自己的硬件上跑跑看,如果性能不佳,可以考虑自己做一些优化。
* 依赖项管理:开源项目通常会依赖一些其他的库,一定要按照文档说明安装好这些依赖,避免出现奇奇怪怪的问题。
* 参数调优:文章说重启迭代节点是唯一需要调整的参数,但我觉得可以尝试调整一下其他的参数,看看能不能进一步提升性能。当然,调参要有依据,不能瞎调。
* 性能评估:用了新算法,一定要评估一下性能提升了多少。可以对比一下训练时间和验证集困惑度,看看是否真的有收益。

总之,使用开源算法要保持谨慎,多看文档,多做实验,才能发挥出算法的最大威力。

个人觉得,矩阵范数的控制范围也可能会影响算法的性能。虽然文章中提到矩阵范数已被严格控制在 1 附近,但具体的控制范围仍然可能需要根据不同的模型和数据集进行调整。如果矩阵范数过大,可能会导致数值不稳定;如果矩阵范数过小,可能会导致收敛速度过慢。调整原则可以是,在保证数值稳定的前提下,尽可能地扩大矩阵范数的控制范围,以提高模型的表达能力。

有点意思!这种拆分策略本质上就是将一个大的矩阵运算拆分成两个小的矩阵运算,从而降低计算复杂度。理论上,只要是满足一定条件的矩阵运算都有可能通过这种方式进行优化。但具体是否适用,需要根据实际情况进行分析,并进行实验验证。感觉这里的思想和模型剪枝有点类似,都是为了减少计算量。

其实感觉这个有点像’分而治之’的思想。把一个复杂的问题分解成几个简单的问题,然后分别解决。虽然可能增加了一些额外的开销(比如拆分和合并的成本),但是如果分解后的问题能够更容易地优化,那么总体上还是划算的。具体到模型架构,就是要找到那些可以独立优化,并且能够显著提升性能的关键模块。

这个拆分我觉得有点像把一个大任务分解成小任务,每个小任务单独优化。W_gate和W_proj梯度贡献不同,分开搞,就像因材施教,效果自然更好。其他架构我觉得也可以试试,说不定有惊喜!

这个拆分策略本质上是利用了模型结构的稀疏性或者某种解耦的特性。SwiGLU中的W_gate和W_proj虽然共同作用于激活函数,但它们的梯度来源和更新方向可能存在差异。通过独立正交化,可以避免彼此之间的干扰,更有效地优化各自的参数。这种思想可以推广到其他类似的架构中,关键在于找到那些可以解耦或者独立优化的子模块。

我觉得可以从梯度流动的角度来考虑。如果某个权重矩阵的梯度在反向传播过程中衰减得比较厉害,或者梯度方差很大,那么可能就需要对它进行拆分处理,以便更好地优化。 另外,如果某个权重矩阵的形状非常不规则,比如极细长的矩形,那么也可能需要拆分,因为这种形状的矩阵计算效率比较低。 拆分的方式可以考虑按照行或者列进行拆分,也可以根据某种特定的规则进行拆分,比如按照专家组进行拆分。

这个问题问得好!我感觉这个思路有点像信号处理里面的时频分析,把一个信号从时域变换到频域,在频域里面更容易分析和处理。 类似地,Gram矩阵相当于把原始矩阵的“相关性”提取了出来,在相关性空间里操作可能更高效。 另外,PCA(主成分分析)也用到了相似的技巧,通过计算协方差矩阵(也是一种Gram矩阵)的特征向量,来找到数据的主要成分,从而实现降维和加速计算。

我来从工程实践的角度分享一些看法。在实际的深度学习工程中,我们经常需要尝试各种不同的优化策略,以提高模型的性能。这种对W1和W2进行拆分后独立进行正交化的策略,可以看作是一种“炼丹技巧”。

炼丹的思路:

* 观察: 首先需要仔细观察模型的结构和训练过程,找出可能存在问题的环节。
* 假设: 然后提出一些假设,例如,W1和W2的梯度贡献机制不同,可能会影响模型的性能。
* 实验: 接着进行实验,验证这些假设是否成立。
* 迭代: 如果实验结果表明这些假设是正确的,那么就可以将这些策略应用到实际的模型中,并不断进行迭代和优化。

工程实践的注意事项:

* A/B测试: 在应用这种策略之前,最好进行A/B测试,以确保它确实可以提高模型的性能。
* 监控: 在应用这种策略之后,需要密切监控模型的训练过程,以防止出现意外的问题。
* 记录: 需要详细记录所有的实验结果,以便日后进行分析和总结。

总之,这种对W1和W2进行拆分后独立进行正交化的策略,是一种值得尝试的“炼丹技巧”,但需要谨慎使用,并进行充分的实验和验证。

这个选择其实挺tricky的。我觉得应该先小规模实验一下,看看哪个优化器在你的特定任务上表现更好。可以先跑几个epoch,比较一下验证集上的loss曲线。如果Muon一开始就明显优于AdamW,那就all in Muon。如果差不多,或者AdamW还略胜一筹,那就继续用AdamW,毕竟省时省力。

这问题问得好!选择优化器确实不能只看一方面。虽然 Muon 步数少,但单步慢,AdamW 反过来。我的理解是,如果算力资源充足,不在乎单步时间,更看重收敛速度,那就选 Muon。但如果算力紧张,单步时间卡的很死,那就老老实实 AdamW 吧。另外,模型结构也很重要,MoE 模型用 Muon 收益可能更大,因为那个矩阵更不规则。

别忘了量化!现在有很多量化技术,比如 INT8 量化,可以大大降低显存占用和计算量,从而提高训练效率。当然,量化可能会带来一些精度损失,需要在精度和效率之间进行权衡。另外,还可以尝试使用一些专门为深度学习设计的硬件加速器,例如 TPU,这些硬件加速器通常具有更高的计算效率和更低的功耗。

除了优化算子,还可以考虑数据并行和模型并行。如果你的模型太大,单卡跑不动,那就用模型并行。如果你的数据量太大,那就用数据并行。当然,这两种并行方式都需要考虑通信开销,需要根据具体的硬件环境和模型结构进行调整。另外,还可以尝试使用一些自动并行化的工具,例如 PyTorch 的 DistributedDataParallel,这些工具可以帮助你更轻松地实现并行训练。

从理论上讲,可以根据模型的具体情况和数据集的特点进行一些先验分析。例如,可以考察模型的损失函数曲面的形态,如果曲面比较复杂,存在较多的局部极小值,那么可能 Muon 这种能够更快收敛的优化器会更合适。此外,也可以通过一些实验来比较不同优化器的性能,例如,可以分别使用 AdamW 和 Muon 在相同的硬件条件下训练同一个模型,并比较它们的收敛速度和最终的性能。