如果你关注过最近一两年大语言模型的训练技术,可能听说过一个叫 Muon 的优化器。它很火,Kimi K2、GLM-5 这些前沿模型都在用它。它比传统的 AdamW 优化器更聪明,同样的训练步数能让模型损失下降得更快。
但它有一个问题,一个大到让很多团队望而却步的问题:它太贵了。
贵到什么程度?贵到在某些配置下,仅仅是优化器这一步操作,就要花掉比 AdamW 多 26 倍的时间。你没看错,是 26 倍。想象一下你请了一个特别聪明的顾问,他给出的建议质量确实比别人高,但每次咨询他要收取比同行贵 26 倍的费用,你会不会犹豫要不要继续用他?
这就是 Dion3 这篇论文要解决的问题。它不是发明了一个全新的优化器,而是把 Muon 从头到脚做了一次彻底的"减脂增肌"手术,最终把这个 26 倍的溢价压缩到了只有 4 倍,同时训练效果不降反升。
这篇论文来自纽约大学、普林斯顿大学、NVIDIA、微软研究院等机构的联合团队,发表于 2026 年 8 月。接下来我们就一层一层拆开,看看他们到底做了什么。
先搞清楚,Muon 到底贵在哪
要理解 Dion3 做了什么,得先搞清楚 Muon 为什么这么贵。
传统的优化器比如 SGD、AdamW,它们的核心运算都是逐元素的加减乘除,计算量跟参数数量成正比,增加多少参数,计算量就线性增加多少。这类操作在 GPU 上跑得飞快,几乎不构成瓶颈。
Muon 的核心创新叫做正交化。
> 正交化:把一个矩阵的"方向"信息和"大小"信息分离开,只保留方向信息,让更新在各个维度上更均衡地发力,而不是被某几个主导方向"垄断"。数学上,这对应于矩阵的极分解,即把矩阵分解成一个正交矩阵和一个半正定矩阵的乘积。
这个操作听起来挺玄乎,但效果是实打实的。神经网络训练中经常会出现某几个方向的梯度特别大,其他方向几乎不动的情况,这会导致学习不均衡,有些"神经元"过度活跃,有些则几乎"躺平"。正交化相当于把这种不均衡"拉平",让每个方向都有机会被更新到。
问题是,精确计算正交化(也就是矩阵的奇异值分解)代价极高,所以 Muon 用了一种叫 Newton-Schulz 迭代的近似算法来完成这件事。
> Newton-Schulz 迭代:一种通过反复对矩阵做多项式变换,逐步逼近正交化结果的算法。它不需要精确求解奇异值分解,用五次左右的迭代就能得到足够好的近似。
问题就出在这里。Newton-Schulz 迭代里每一步都要做矩阵乘法,而矩阵乘法的计算量是立方级的。如果矩阵边长是 n,正交化一次的开销大约是 n 的三次方乘以一个常数。模型越大,这个立方项增长得越可怕。
再加上分布式训练的因素。现代大模型动辄几百上千亿参数,权重必须切分到很多张 GPU 上分别存储,这叫分片。
> 分片:把一个巨大的矩阵切成若干块,分别存放在不同的 GPU 上,每张卡只保存整个矩阵的一部分。
像 AdamW 这种逐元素优化器,每张卡各自更新自己那一份就行,互不干扰。但 Muon 不行,因为正交化必须在完整的矩阵上进行,你不能把矩阵切成几块分别做正交化再拼起来,那样得到的结果是错的。这意味着每次更新前,所有分片必须先汇聚到一张卡上,算完了再分发回去。这个汇聚和分发的过程需要大量的跨卡通信,这又是一层额外的开销。
于是 Muon 就陷入了一个双重困境:单卡计算是立方级增长,多卡协同又要承受通信的代价。论文作者们把这个困境概括得很直接:Muon 已经被 Kimi K2 证明可以成功训练出万亿参数级别的模型,但这个成功依赖于一整套特殊的架构设计和并行策略的巧合组合,一旦换个场景,这套经验未必好使。
这就是 Dion3 出发的地方:能不能设计一套通用方案,让 Muon 在任意架构、任意集群规模下都能跑得又快又好?
第一招:只算小矩阵,不算大矩阵——Gram Newton-Schulz
标准的 Newton-Schulz 迭代,每一步都要对一个大矩阵做好几次矩阵乘法。如果这个矩阵是 n 行 m 列(n 比 m 小),标准算法每一轮迭代都要做涉及 m 和 n 两个维度的"大矩阵×大矩阵"运算,跑五轮下来,开销相当可观。
Dion3 团队想出的第一招叫 Gram Newton-Schulz,思路挺巧妙:与其直接在这个大矩阵上反复折腾,不如先算出一个小得多的对称矩阵(叫做 Gram 矩阵),然后所有的迭代都在这个小矩阵上进行,最后再用一次乘法把结果映射回原始尺寸。
> Gram 矩阵:对于一个 n×m 的矩阵 X,Gram 矩阵指的是 X 乘以它自己的转置,得到的是一个 n×n 的对称方阵。它比原矩阵小得多(当 m 远大于 n 时),而且对称结构本身还能进一步省算力。
打个比方。假设你要把一个长方形木板打磨到完全平整,标准做法是每一遍打磨都要覆盖整块木板的全部面积。而 Gram Newton-Schulz 的思路相当于说:先把这块长方形木板的"轮廓特征"提取出来,压缩成一个小得多的正方形样本,反复在这个小样本上打磨调整参数,最后再把调好的参数一次性应用回整块大木板。如果你不这么做,每一遍打磨都要处理整个大木板的表面,時間成本会随着木板面积的增大而急剧上升;而只处理小样本,无论大木板有多大,打磨阶段的成本都被摊薄了。
具体到数字上,这个技巧的收益跟矩阵的长宽比密切相关。论文里定义了一个叫做纵横比的概念,用希腊字母 α 表示,表示矩阵长边和短边的比值。当 α 等于 1,也就是矩阵是正方形的时候,Gram Newton-Schulz 和标准算法差不多快。但当 α 变大,矩阵越来越"细长"的时候,Gram Newton-Schulz 的优势就越发明显。论文给出一个典型的例子:当 α 等于 4(这是 Transformer 里 MLP 层常见的比例,因为中间层维度通常是隐藏层的 4 倍),迭代 5 轮的话,Gram Newton-Schulz 相比标准算法(哪怕标准算法也用了对称乘法优化)能省下 55% 的计算量。
而且现在的大模型架构趋势正好是往这个方向走的。越来越多的 MoE(混合专家)架构采用细粒度、更稀疏的专家设计,这意味着专家网络内部权重矩阵的纵横比会变得更极端。换句话说,Gram Newton-Schulz 这一招不是碰巧管用,而是恰好踩在了行业发展的趋势线上。
不过这个方法在实现过程中出了个大麻烦:数值不稳定。
论文作者们发现,如果老老实实按照数学推导把 Gram Newton-Schulz 从头跑到尾,训练会直接崩掉,损失曲线里冒出一根根尖刺,最后矩阵里全是无穷大。
问题出在半精度浮点运算的舍入误差上。理论上 Gram 矩阵(也就是 X 乘以自己的转置)应该是半正定的,特征值都不小于零。但在半精度(比如 bfloat16)下,由于舍入误差,这个矩阵会冒出微小的负特征值,这些负值原本应该是零,是纯粹的计算误差产物,论文里管它叫"伪负特征值"。
而 Newton-Schulz 的迭代公式对正数收敛得很好,但对负数是发散的,一旦有负值混进来,它会指数级放大,最终炸掉整个计算。作者们做了详细的实验验证,甚至故意在 float64 的精确计算里人为引入一个极小的负误差,结果同样导致了发散,这证明了哪怕是极其微小的误差,也足以摧毁整个迭代过程。
他们的解决方案叫重启策略:不要一口气把所有迭代跑完,而是每跑两三轮就停下来,把当前的中间结果当作全新的起点,重新构造 Gram 矩阵,把负特征值清零重置,再继续后面的迭代。这就像开长途车不能一口气不休息地开到底,每隔一段路程就要停下来检查一下轮胎和刹车,把可能出现的小问题及时排除,而不是任由它们累积到失控。经过这样处理之后,损失曲线终于变得平滑稳定,最终的模型质量和标准 Newton-Schulz 几乎一模一样,误差在 0.01 这个数量级上。
第二招:写一套专门的 GPU 内核,把对称性用到极致
Gram Newton-Schulz 之所以能省算力,一部分原因是它引入了更多的对称矩阵运算。但如果底层的矩阵乘法程序不懂得利用对称性,这个优势就白白浪费了。
对称矩阵有个天然的性质:它左下角和右上角的内容是镜像对称的,理论上你只需要算出一半(比如下三角部分加对角线),另一半直接复制粘贴过去就行,不用重新计算。
> 对称 GEMM 内核:一种定制的矩阵乘法程序,专门针对"结果是对称矩阵"这种情况做优化,只计算下三角区域,再把结果转置复制到上三角区域,省下大约一半的浮点运算量。GEMM 是矩阵乘法(General Matrix Multiply)的缩写,是几乎所有深度学习框架底层最核心的计算操作。
这个道理听起来很直白,但真正落地到 GPU 硬件层面并不容易。Dion3 团队用 CuteDSL(NVIDIA 提供的一种底层 GPU 编程工具)从零手写了这套对称乘法内核,专门针对 Hopper 和 Blackwell 两代 GPU 架构做了适配。
设计上有两个关键改动。第一是调度策略的改动,标准矩阵乘法会把整个输出矩阵切成很多小块,平均分给各组计算单元处理;而对称版本只给下三角部分(包括对角线)分配计算任务,上三角的部分根本不安排计算,直接空出来等着被复制填充。第二是在计算的收尾阶段,也就是所谓的"epilogue"步骤,每算完一块下三角的数据,就顺手把它转置一份写到对称位置的上三角区域去,一步到位,不需要额外再跑一趟。
论文里给出的实测数据相当亮眼,在足够大的矩阵尺寸下,这套自定义内核相比 NVIDIA 官方的 cuBLAS 库能做到接近 2 倍的加速,无论是不是带了额外的加法操作(比如 αAB+βC 这种融合运算)。
如果类比一下,这就好比你有一份需要复印一百份的双面文件,但其实这份文件左右两面内容完全一样。笨办法是把两百面都单独扫描打印一遍;聪明的做法是只扫描一百面,剩下一百面直接用复印机的镜像功能瞬间生成。如果不做这个优化,你就是在为一份根本不需要重新计算的信息,白白支付一遍计算的时间成本。
而且这套内核和第一招 Gram Newton-Schulz 是天作之合,因为 Gram Newton-Schulz 本身就用了更多的对称矩阵运算,这意味着这套加速内核在这里能发挥出比在标准算法里更大的威力,两个改进叠加在一起产生了协同效应,而不只是简单的相加。
第三招:干脆别把整个矩阵都拿去正交化
前两招都是在"怎么把正交化算得更快"上做文章,第三招则换了个思路:能不能干脆少算一点?
Dion3 的答案是:每一步只挑出动量矩阵里一部分的行(或列)出来做正交化,剩下的行就当它们不存在,完全跳过。
> 动量矩阵:优化器在训练过程中维护的一个累积历史梯度信息的矩阵,用来让参数更新更平滑,避免每一步都剧烈震荡。Muon 的更新规则里,这个矩阵就是被拿去做正交化处理的对象。
具体的选择策略很简单粗暴:每一步都挑出 l1 范数(也就是绝对值之和)最大的那部分行,这些行往往代表着"信息量更大"或者说梯度变化更剧烈的部分。论文里引入了一个压缩比例参数 f,f 等于 1 就是挑出全部的行,也就等价于原版 Muon;f 越小,挑的行越少,正交化的开销也就越小。作者推荐的默认值是四分之一或者八分之一。
这个思路直接命中了 Newton-Schulz 计算开销的核心,因为矩阵乘法的开销是跟矩阵维度的平方甚至立方相关的。如果只挑四分之一的行出来算,那计算量至少能降到原来的十六分之一(也就是 1/f 的平方)。更妙的是,选出来的这部分矩阵天然就是"细长"的,纵横比进一步拉大,这又反过来放大了 Gram Newton-Schulz 的优势,两个改进在这里再次形成了合力。
但这里必然会出现一个疑问:那些没被选中的行怎么办?它们的梯度信息不就白白浪费了吗?
Dion3 用了一个叫误差反馈的机制来解决这个问题。
> 误差反馈:一种补偿机制,被选中参与更新的那部分动量按正常规则衰减,而没被选中的部分保持原样不动,让它们的信息在动量矩阵里持续累积,直到某一步终于因为累积够大而被选中,参与到更新中来。
这个设计思路其实很好理解。想象一个团队每周开会只能听三个人汇报进展,其他人这周先不发言。但没发言的人手头的工作并没有停止,他们的进展会一直累积记录着,等到某一周他们的进展积累到足够重要的程度,自然就会被排上议程,轮到他们发言。如果没有这个"进展持续累积"的机制,那些暂时没被选中发言的人,他们的贡献可能就永远被忽视掉了,团队整体的决策质量也会因此打折扣。误差反馈保证了即便某一行梯度信息一直不大,但只要它持续存在,迟早会积累到被选中的那一天,不会被永久遗忘。
这里有个特别值得说的地方: 当 f 等于 1 的时候,也就是每次都选全部的行,理论上 Dion3 应该完全等价于原版 Muon。作者们专门做了对照实验来验证这一点,结果两条损失曲线几乎完全重合,最终损失只相差 0.0005,这个细微差异完全来自实现层面的一些技术细节(比如浮点数精度处理的顺序不同),不影响结论。
然后是这篇论文里最出乎意料的一个发现。
按理说,砍掉一部分行不参与计算,应该会损失一些训练质量才对,作者们自己在论文里也坦白说"这不是我们设计这个方法的初衷"。但实验结果显示,当 f 小于 1 的时候,Dion3 的最终损失反而比完整版的 NorMuon(Muon 的一个改进变体)还要更低。
论文里给出了详细的调参实验。他们训练了一批 10 亿参数的模型,扫描了不同的压缩比例 f 和学习率的组合,发现了一个清晰的规律:最优学习率会随着 f 的减小而按照根号反比的规律增长,具体来说,最优学习率乘以根号 f 大致等于一个常数(大约 0.01)。而在 f 等于八分之一、学习率经过对应调整之后,最终验证损失达到了 2.181,比完整版 NorMuon 的 2.194 还要低了 0.013。
为了确认这不是偶然,团队又把模型规模扩大到 3B 到 14B 参数区间,训练更多 token,结果同样的模式再次出现:在四种不同规模下,Dion3(f 取四分之一)在验证损失上全部战胜了 NorMuon,规模最大的 14B 模型上差距达到了 0.027,是所有规模里差距最大的一次。下游任务准确率上,Dion3 在四个规模里赢了三个,14B 规模上领先了 0.7 个百分点。
论文作者对这个反直觉的现象给出了一个可能的解释,他们提到最近另一篇研究(Joo 等人)发现,随机遮蔽 SGD 优化器更新中的部分区块,反而能改善训练轨迹。这似乎暗示着,适度的"随机性"或者"稀疏化"未必是纯粹的信息损失,它可能也起到了某种类似正则化的作用,防止模型对某些特定方向的更新过度依赖。这个解释目前还只是猜测,论文也坦诚地说需要更多研究去验证这个现象能推广到多大范围。
第四招:通信也要"打包",别一份一份寄快递
前三招解决的是计算层面的问题,第四招瞄准的是分布式训练里的通信开销。
在全分片数据并行(FSDP)这种主流分布式训练模式下,每个动量矩阵会被切成好几块,分别存在不同的 GPU 上。前面说过,正交化必须在完整矩阵上进行,所以每次更新之前,各个分片得先汇聚到一张卡上,算完了再分发回去,这个过程需要用到一种叫 all-to-all 的跨卡通信操作。
一个朴素的实现方式是:每次凑够跟 GPU 数量相同的一批矩阵,同时在不同卡上并行做汇聚和正交化,处理完了再换下一批。这个策略对于有 N 个需要正交化的矩阵、GPU 数量是 world_size 的情况,需要大约 N 除以 world_size 轮的通信。
问题是,每一轮通信的开销并不是只跟传输的数据量有关,还有一个固定的"启动成本",跟你传的数据多不多没关系,只要你发起了这次通信,这个固定成本就要付一次。而且如果每次传输的数据量太小,还没办法充分利用网络带宽,好比高速公路上跑车流量太小,路修得再宽也是浪费。
作者们做了专门的微基准测试来验证这个现象。他们在四张 H100 上测试 NCCL(NVIDIA 的通信库)的 all-to-all 操作,发现存在一个大约 25 微秒的固定延迟下限,不管你传多小的数据,这个时间都省不掉。而带宽利用率则要等到每条链路传输的数据量达到 16 到 32 兆字节的量级,才能爬升到峰值带宽的 80% 到 90%。如果每次只传 256 KB,实际带宽利用率甚至不到峰值的 10%。
这就好比你要给同事寄很多份文件,如果你每写完一页就单独打包发一次快递,那你光是填快递单、跑快递柜台的时间成本,会远远超过实际运送这几页纸所需要的时间。而如果你把一整天要发的所有文件攒到一起,打包成一个大包裹一次性寄出去,虽然包裹变大了,但你只需要跑一次快递柜台,整体效率反而更高。
Dion3 的解决办法叫做"megabatching"(大批量打包):把所有形状相同的矩阵归拢到一起,打包成单独一个大批次,一次性汇聚、一次性正交化、一次性分发回去。Transformer 架构里权重矩阵的形状种类其实非常有限(就是 QKV 投影、MLP 上下投影这几种),所以这个策略能把通信轮数压缩到一个跟模型层数无关的常数级别。
论文给出的实测数据显示,这个效果在特定场景下相当显著。对于一个 10 亿参数模型、分成 8 个分片的配置,因为模型比较小(正交化本身很便宜),而且每张卡上要处理的矩阵数量比较多,通信开销占了大头,megabatching 直接把每步的优化器耗时从 80.7 毫秒降到了 52.1 毫秒,降幅达到 35%。而对于 140 亿参数的大模型,因为这时候计算本身的开销已经占了主导地位,通信优化带来的收益就没那么明显了,降幅只有 2% 左右。这提醒我们,同一个优化技巧在不同的场景下收益可能天差地别,工程优化从来不是一劳永逸的银弹。
四招叠加,到底能省多少
单独看每一招都挺有说服力,但真正的问题是:这些招式叠加起来,效果是简单相加,还是会互相抵消?
论文给出的答案让人挺惊喜的:这些改进不但没有互相拖累,反而形成了正向的协同效应。
论文里做了一个循序渐进的对比实验,在一个 70 亿参数的语言模型上,用四张 GH200 训练,逐一叠加各项改进,测量优化器单步耗时相对于 AdamW 的倍数。
标准版 Muon 的耗时是 AdamW 的 26 倍。
加上对称 GPU 内核之后,降到了 19 倍。
再加上 Gram Newton-Schulz,降到了 15 倍。
最后加上四分之一压缩比的分数更新规则,直接降到了 4 倍。
这个下降轨迹意味着,四项改进叠加,把原本 26 倍的溢价压缩到了不到六分之一。论文里另外还测试了更大范围的模型尺寸和并行配置组合(从 1 到 4 张 GPU、模型维度从 1536 到 4096 不等),趋势保持一致:模型越大,正交化的立方级开销占比越高,Dion3 带来的相对收益就越明显。在最大的测试规模上,四分之一压缩比给出了 6.5 倍的总体加速。
有意思的是,这个加速效果对不同类型的架构也不完全一样。论文还专门测试了包括开源模型 Gemma 以及混合专家(MoE)架构在内的更多架构类型。对于纵横比更极端的架构(比如 α 等于 8 而不是常见的 4),仅仅 Gram Newton-Schulz 和对称内核这两招组合起来,就能实现 2 倍的加速,这进一步印证了前面提到的规律:架构的权重矩阵越"细长",Gram Newton-Schulz 这一招的价值就越大。
论文里还做了一个相当有意思的案例分析,试图估算:在真实的大规模训练场景里,Newton-Schulz 到底占了多大比例的总训练时间?答案居然可以从 2% 到 17% 剧烈波动。在 Kimi K2 这种拥有精细流水线并行、优化器计算能被反向传播完全"藏起来"的极端理想场景下,Newton-Schulz 只占了大约 1.9% 的总训练时间;但在小批次的监督微调场景(用 Llama3-70B 举例),因为总的计算量本来就小,优化器的固定开销占比会飙升到 17%。这提醒我们,谈论"优化器开销大不大"这个问题,脱离具体场景是没有意义的,必须结合模型规模、并行策略、批次大小综合来看。
写在后面
读完这篇论文,最让我意外的不是那些扎实的工程加速数字,而是那个"少算反而更好"的实验结果。这几乎有点反常识:一个专门为了省算力而设计的近似方法,最后在训练质量上还赢了完整版本。
作者们自己也很坦诚,说这不是设计初衷,只是个"意外之喜"。他们没有过度解读,只是引用了另一篇关于随机遮蔽更新的论文做了个旁证,然后老老实实地说需要更多研究才能确定这个现象能推广多远。这种克制挺难得的,很多论文遇到这种意外的好结果,恨不得马上包装成一个新理论。
还有一个细节值得单独说一说:论文里提到他们在把 MLP 的上投影权重和门控权重分开正交化之后,模型效果居然明显提升了,光是这一个改动就带来了大约 0.2 的困惑度改善。这两个权重通常被实现者图省事拼在一起处理,但它们在网络里承担的功能其实完全不同。这种"看起来无关紧要的工程细节,实际上暗藏着显著影响"的例子,在大模型训练里其实并不罕见,只是很少有人愿意花时间去逐一验证。
如果这个"稀疏更新反而更好"的现象真的能在更大规模、更多样的场景下被反复验证,会不会意味着我们过去对"精确计算"这件事的执念,本身就存在某种可以被打破的假设?
Q&A
Q1:Dion3 是什么,它和 Muon 优化器有什么关系?
A:Dion3 是对 Muon 优化器的一次全面改造,目标是大幅降低 Muon 的计算和通信开销。它通过 Gram Newton-Schulz 算法、对称 GPU 内核、行选择的更新规则以及通信打包策略四项改进,把 Muon 优化器单步耗时相对 AdamW 的倍数从 26 倍压缩到了 4 倍左右,同时训练效果保持不变甚至略有提升。
Q2:Dion3 的分数更新规则会不会损害模型训练质量?
A:不会,反而可能有提升。论文实验显示,当压缩比例 f 小于 1(比如四分之一或八分之一)并配合正确的学习率调整时,Dion3 在多个模型规模(3B 到 14B 参数)上的验证损失都低于完整版 NorMuon,在 14B 规模上损失差距达到 0.027,这是论文中一个出乎意料的发现。
Q3:Gram Newton-Schulz 算法为什么能加速正交化计算?
A:因为它把迭代运算从大矩阵转移到一个小得多的对称 Gram 矩阵上进行,只在最开始和最后各做一次映射回原尺寸的乘法。这个方法对纵横比越极端(矩阵越细长)的权重收益越大,在典型的 Transformer MLP 权重上能节省 55% 左右的计算量。
热门跟贴