modded-nanogpt 优化记录解析:更快的 Muon step 与学习率校正(FixMuonLR)

发布时间:2026/10/3 2:25:01

modded-nanogpt 优化记录解析:更快的 Muon step 与学习率校正(FixMuonLR) 人工智能大模型预训练分布式训练模型优化深度学习【免费下载链接】modded-nanogptNanoGPT (124M) in 90 seconds项目地址https://gitcode.com/GitHub_Trending/mo/modded-nanogpt点击查看免费下载导读本文剖析 modded-nanogpt track 18×H100 上将 GPT-2 规模模型训练至 3.28 FineWeb 验证损失的优化记录2025-10-27_FixMuonLR该记录通过向量化 Muon 优化器的step、将注意力参数 reshape 提前以改变 NorMuon 的作用方向、并系统校正学习率与两个调度/通信缺陷在相同机器上把单步耗时降低约 1%、并因步数减少 30 步使总训练时间缩短约 3.3 秒。读完本文你将理解 Muon/NorMuon 优化器在分布式训练中的关键调参逻辑有效学习率与矩阵形状的关系、动量缓冲区的正确组织方式以及学习率调度与梯度归约中两类容易被忽视的隐蔽缺陷。本文主体对应仓库记录 records/track_1_short/2025-10-27_FixMuonLR/README.md实现细节与后续演化对照 train_gpt.py、track_1_short/optim/anvil.py、track_1_short/schedule.py 等源码展开。记录背景Muon 在 track 1 训练中的角色track 1 的目标是在 8×H100 节点上把 124M 规模的 GPT-2 训练到 3.28 FineWeb 验证损失见 train_gpt.py 的模块说明。为了逼近这个目标仓库用MuonMomentum Orthogonalized by Newton–Schulz优化器处理所有二维投影矩阵而对嵌入、标量、门控权重等使用Adam类方法——这是 Muon 的标准使用约束不建议把 Muon 用于 embedding、输出层或 0/1 维参数。在本次记录对应的训练脚本 records/track_1_short/2025-10-27_FixMuonLR/14afd380-d3d9-48d7-ad23-4c13cb96754b.txt 中Muon 已演化出NorMuon变体新增类似 Adafactor 的低秩方差估计器second_momentum_buffer正交化步骤由 Newton–Schulz 替换为 Polar Express基于 Gram 矩阵的迭代谱映射见该脚本polar_express与polar_express_coeffs。本记录正是在这一基础上进一步压缩步耗时并修正学习率。整个训练以torchrun --standalone --nproc_per_node8 train_gpt.py启动固定 8 个进程track_1_short/distributed.py 中强制world_size 8因此下述所有分布式语义都以 8 rank 为准。性能验证如何在 speedrun 里证明一个改动有效原记录最值得借鉴的部分是它的统计验证流程在固定机器上对改动前/后的同一训练任务各跑多轮收集每步平均耗时与最终损失用 t 检验判断损失是否显著低于目标 3.28。本记录的验证脚本完整继承自原 READMEimport scipy.stats import torch losses [3.2804, 3.2754, 3.2753, 3.2800, 3.2780, 3.2813, 3.2778, 3.2771, 3.2780, 3.2783] times [139.441, 139.780, 139.889, 139.464, 139.761, 139.411, 139.555, 139.570, 139.804, 139.847] print(p%.4f % scipy.stats.ttest_1samp(losses, 3.28, alternativeless).pvalue) # p0.0083 print(losses:, torch.std_mean(torch.tensor(losses))) # losses: (std0.0020, mean3.2782) print(time:, torch.std_mean(torch.tensor(times))) # time: (std0.1825, mean139.6522)基线改动前 PR同一机器上计时import scipy.stats import torch times [143.018, 142.641, 142.789, 143.072, 143.241] print(time:, torch.std_mean(torch.tensor(times))) # time: (std0.2375, mean142.9522)解读这些数字的方法损失显著低于目标10 次运行的最终损失均值 3.2782std 0.0020单样本 t 检验原假设 3.28备择假设为更小给出 p0.0083即训练结果在统计意义上确实达标改动没有以牺牲最终损失为代价。步耗时下降约 1%每步平均耗时从 142.9522 s 降到 139.6522 s约 2.3% 的降幅记录描述为around 1%与机器和运行次数有关耗时方差也从 0.2375 收窄到 0.1825。总时长缩短约 3.30 s其中约一半来自步数减少30 步另一半来自 Muon 步效率提升。记录作者同时提醒向量化收益会随机器有中等程度的波动验证结论只在相同机器、相同环境变量下成立。在 speedrun 语境下这很关键任何看起来更快的改动都必须同时证明a不损害收敛终点、b耗时下降不是噪声。用scipy.stats.ttest_1samp对损失做显著性检验、用torch.std_mean报告耗时均值与方差是这条记录留下的可复现模板。改动一学习率校正——Muon 的 LR 大约高了一倍记录最核心的发现是Muon 学习率约为应有值的两倍因此将其从约 0.06 下调到0.03。记录作者推测偏高的 LR 部分源于 NorMuon 二阶矩估计second_momentum_buffer的rsqrt缩放带来的二阶影响。这解释了为什么不能把标准 Adam 的直觉直接搬给 MuonMuon 在 SGD 动量之上叠加了正交化Polar Express / Newton–Schulz与 NorMuon 的按 lane 归一化其更新幅度对 LR 的响应是非线性的最优 LR 需要独立标定。配套的两项调整MLP up-projection升维投影的lr_mul提高到 2.0。依据的理论是有效学习率与sqrt(output_dim)成正比up-projection 矩阵形状为[dim, 4*dim]输出维更大因此需要更大的 LR 补偿。在该记录对应的训练脚本中可见self.c_fc.lr_mul 2.c_fc即dim - 4*dim的升维投影注释为corrective factor to account for transpose见 14afd380-d3d9-48d7-ad23-4c13cb96754b.txt。注意这与2.0的取值来自sqrt(4) 2的比例关系4 倍输出维。移除同一参数组内所有参数必须共享同一学习率与权重衰减的约束。这让每个矩阵可以独立拥有自己的lr_mul/wd_mul是后续 per-matrix 精细调度的起点。这一机制在当前的 track_1_short/optim/anvil.py 中得到延续与强化ParamConfig为每个参数而非参数组独立保存lr_mul、wd_mul、lr见 anvil.py并且 MLP bank 实现了per-matrix LR 乘数per_matrix_lr_mul对冻结矩阵给 0、对奇数索引注释标注为 c_proj给 2.0 倍、其余 1.0 倍anvil.py。从当前源码的anvil_defaults看ANVIL 基础 LR 已进一步演进为0.023、Adam 基础 LR 为0.008track_1_short/training.py说明0.03只是该记录时点上的标定值后续记录仍在持续校正。改动二Muon step 更新——向量化、缓冲区归属与 reshape 时机向量化step中的循环原实现见记录脚本NorMuon.step按参数组逐个执行reduce-scatter 梯度 → 等待 → 计算更新 → 启动 all-gather其中包含多层 Python 循环。本记录将这些循环向量化把同一类参数attn / mlp的梯度拼成批量张量一次reduce_scatter_tensor分发、一次批量polar_express计算、一次all_gather_into_tensor回收记录脚本第 514-532 行stacked_grads的拼接与padded_num_params对齐即为此设计从而减少 kernel 启动与 collectives 数量略微降低单步耗时。记录作者同时提出一个前瞻性猜测可以对step的某个子部分应用torch.compile以获得更大收益。这个猜测在后续仓库演化中兑现当前的 anvil.py 中anvil_cascade已被torch.compile(dynamicFalse, fullgraphTrue)编译且注释明确警告必须dynamicFalse否则会明显变慢。动量缓冲区从 state 移到 group并配套reset()标准torch.optim.Optimizer习惯把动量等状态放在state[param]里本记录把momentum buffer 提升为参数组的属性记录脚本第 550-555 行if momentum_buffer not in group: group[momentum_buffer] torch.zeros_like(...)并在step中lerp_原地更新好处是避免按参数反复查 state dict动量张量生命周期与参数组对齐便于批量原地更新。代价是必须新增reset()方法记录脚本第 458-462 行注释 expose a reset for clearing buffers因为训练前的 kernel warmup / CUDA graph 捕获阶段会脏掉这些缓冲区正式计时前必须清零。作者特意类比了Yarn模块的reset()同一脚本中Yarn.reset()重建旋转频率表说明可重置的优化器/模块状态是 speedrun 中 warmup 后恢复初态的标准做法——这一点在 train_gpt.py 的 Resetting Model 阶段得到完整印证模型、优化器、ngram 表、value_embeds、sampled_softmax 全部在 CUDA graph 捕获后复位。注意力参数 reshape 提前让 NorMuon 按列作用注意力合并权重qkvo_w的存储形状是[hdim, 4*dim]使用时要看成 4 个[hdim, dim]矩阵Q、K、V、O。本记录把 reshape 从[dim, 4*dim] - [4, dim, dim]提前到动量/NorMuon 计算之前记录脚本第 558-562 行先updated_grads updated_grads.view(4 * grad_shape[0], grad_shape[1], grad_shape[2] // 4)再做polar_express。这样做的动机是 NorMuon 的归一化方向其second_momentum_buffer沿矩阵的较长维度做均值统计随后对每个 lane 做rsqrt缩放。reshape 后每个子矩阵的行是hdim、列是dim若 reshape 太晚在正交化之后归一化沿4*dim的输入维rowwise进行若 reshape 提前归一化沿dim的输出维columnwise进行即 Normuon 的 lane 统计以输出维为单位。记录明确指出实证测试表明 columnwise沿输出维比 rowwise沿输入维更有效——这与有效学习率与输出维相关的直觉一致。这一reshape 时机决定归一化方向的教训在当前实现中走得更远AnvilBank的reshape属性直接参与 reduce-scatter 之前的grad.view(p_cfg.reshape)anvil.py即梯度一到达就以矩阵形态进入 bank 的持久缓冲区whitening 级联anvil_cascade内部按is_tall分支处理行/列方向anvil.py归一化与谱映射天然按矩阵而不是整块拼接进行。改动三两处隐蔽缺陷的修正get_lr/get_ws在迭代扩展期间不平坦化训练计划包含主阶段 扩展阶段extension iterations。原逻辑的问题在于迭代数扩展后get_lr的冷却cooldown计算没有在扩展期间保持平坦导致 LR 在扩展阶段继续下跌。本记录修正了get_lr以及同类问题get_ws。修正后的行为可以在当前 track_1_short/schedule.py 中直接看到LR 在主阶段的后LR_COOLDOWN_FRAC当前配置0.80见 config.py内线性衰减但被min(1.0, ...)夹住衰减终点是LR_FLOOR 0.30schedule.py扩展阶段的 20 步config.py 的num_extension_iterations全部落在 floor 上LR 不再继续变化。注意这并不代表 LR 停在一个很高的值——LR_FLOOR是绝对乘数实际 LR 为p_cfg.initial_lr * step_lrtrack_1_short/training.pyfloor 阶段约等于主阶段峰值的 30%。梯度在grad_accum_steps内求和、却在 rank 间求平均第二个缺陷属于分布式语义不一致梯度沿grad_accum_steps累加但跨 rank 的 reduce-scatter 用的是ReduceOp.AVG平均。对 8 卡训练来说由于更新对整体梯度幅度的标度不变性magnitude invariance这个不一致在实践中大多无关紧要但当设备数少于 8 时求和/平均混用会造成轻微精度问题平均使每个 rank 的梯度量级变小与累加的幅度预期不符。修正方式是把归约语义统一。从当前实现看这一关注点延续为显式的通信语义设计AnvilAndAdam.step明确区分ReduceOp.AVG的 reduce-scatteranvil.py并以scatter_order/work_order两个独立顺序显式编排通信与计算training.py每个 label 在两个顺序中各出现恰好一次杜绝隐式的累加/平均混用。与当前仓库实现的对照一次改动的后续轨迹把 2025-10-27 这条记录放进 modded-nanogpt 的时间线可以清晰地看到其思想如何在后续版本中固化与放大记录中的改动当前仓库中的延续实现Muon LR 降至 0.03ANVIL 基础 LR 进一步调至 0.023training.pyMLP up-projectionlr_mul2.0mlp_bank的 per-matrix LR部分矩阵 2.0 倍、冻结矩阵 0 倍anvil.py移除参数组内共享 lr/wd 的约束ParamConfig按参数独立配置lr_mul/wd_mul/lr配param_table逐 label 指定training.py向量化 step、建议torch.compileanvil_cascade、_adam_update_step、_sign_aligned_decay_update均以torch.compile(dynamicFalse, fullgraphTrue)编译anvil.pymomentum buffer 移到 group reset()AnvilBank把 velocity/momentum 等作为 bank 属性reset()清零 velocity/lane_energy/mantissaanvil.pyattention reshape 提前columnwise 归一化reshape参与 reduce-scatter 前的梯度视图whitening 级联按矩阵行列分支anvil.pyget_lr/get_ws扩展期平坦化get_lr以LR_FLOOR夹住冷却扩展阶段保持 floorschedule.py需要强调的两点边界其一0.03、2.0等数值是该记录在 8×H100、FineWeb 数据与当时模型结构下的标定结果换机器、换数据、换架构后不应照搬而应复用其显著性检验 均值/方差报告的验证方法其二记录的耗时结论依赖固定机器的软硬件环境作者也明言向量化收益随机器波动。总结可以从这条记录带走的三件事调 LR 要有方向理论Muon 类优化器对 LR 极敏感本记录发现偏高约一倍且可用有效学习率 ∝ sqrt(output_dim)为不同形状的矩阵推导lr_mul但最终数值必须用统计检验确认。重塑数据形状要趁早正交化/归一化算子作用于行还是列取决于 reshape 时机列方向输出维的 NorMuon 更有效——这个教训直接影响了当前 ANVIL 优化器bank 以矩阵形态持梯度的设计。speedrun 的每毫秒都来自纪律动量缓冲区归组要配套reset()、LR 调度在扩展期必须平坦化、归约语义求和 vs 平均必须全局一致——这些看不见的 1%与向量化带来的显式收益同等重要。进一步阅读完整训练循环见 train_gpt.py含 warmup、CUDA graph 捕获与复位流程优化器当前实现见 track_1_short/optim/anvil.py学习率与阶段调度见 track_1_short/schedule.py 与 track_1_short/config.py本记录的训练脚本与数据见 records/track_1_short/2025-10-27_FixMuonLR/。赞分享人工智能大模型预训练分布式训练模型优化深度学习【免费下载链接】modded-nanogptNanoGPT (124M) in 90 seconds项目地址https://gitcode.com/GitHub_Trending/mo/modded-nanogpt点击查看免费下载相关推荐modded-nanogpt 记录复盘BOS 对齐数据加载与学习率冷却再调优2025-07-12 BosAlignmodded nanogpt 记录复盘BOS 对齐数据加载与学习率冷却再调优2025 07 12 BosAlign 本篇以 modded nanogpt人工智能大模型预训练分布式训练模型优化深度学习Modded-NanoGPT 中的 SOAP 优化器实战3.15B Tokens 达成 3.28 验证损失的样本效率记录Modded NanoGPT 中的 SOAP 优化器实战3.15B Tokens 达成 3.28 验证损失的样本效率记录 本文基于 Modded NanoGP人工智能大模型预训练分布式训练模型优化深度学习Modded-NanoGPT版本控制记录每次性能突破的代码变更Modded NanoGPT版本控制记录每次性能突破的代码变更 在人工智能模型训练领域版本控制不仅仅是代码管理的工具更是性能优化的历史档案。Modded人工智能大模型预训练分布式训练模型优化深度学习上一篇免费输入法词库转换工具把搜狗词库搬进 Rime50 多种格式互转一次讲清下一篇10 分钟上手QtScrcpy 的 Android 投屏控制走 USB 与 WiFi 两条线创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/3 2:20:01

Warp Code Review 中的 CWD 大小写匹配问题与规范化修复方案

桌面应用开发者工具人工智能AI 应用AI Agent代码智能体 【免费下载链接】warp Warp is an agentic development environment, born out of the terminal. 项目地址: https://gitcode.com/GitHub_Trending/wa/warp 点击查看 免费下载 导读 本文基于 specs/APP-4133…

2026/10/3 3:10:04

集群负载均衡实战:从算法选型、健康检查到故障转移全链路解析

我们在生产环境里跑过几十台节点的集群,也折腾过从几百 QPS 到几万 QPS 的流量变化,负载均衡这块我踩过的坑比看过的文档多得多。很多人一开始以为负载均衡就是把请求轮询发到几台机器上,等真正上了集群才发现,连接不均衡、数据倾…

2026/10/3 3:10:04

计算机学习路线怎么选?从组成原理到AI大模型的决策方法

很多初学者都会问我同一个问题:计算机方向这么多,我到底该怎么选,又该怎么学?说实话,这个问题我特别能理解。刚入行那会儿,我也曾在各种技术论坛里翻来覆去地找答案,看到别人晒出的学习路线图就…

2026/10/3 3:10:04

VLT虚拟链路中继实战:从原理到OS10配置与排障

1. 为什么数据中心里需要VLT:从设备冗余聊起先说个场景。你有一台接入交换机,下连几十台服务器,上连两台核心交换机做链路聚合。平时跑着没事,但只要这台接入设备宕机,底下所有业务全断,这就是典型的单点故…

2026/10/3 3:10:04

Spring Boot+微信小程序商家优惠活动系统源码解析与部署指南

Spring Boot 搭配微信小程序做“商家优惠活动”,这套路在毕业设计里太常见了,但常见不等于容易。很多同学拿到一份源码,打开 IDEA 直接 run,结果不是 Redis 连不上,就是小程序白屏,最后忙着改 bug 的时间比…

2026/10/3 3:10:04

道岔振动与电流双路信号的LSTM特征融合方法

简介:本资源是一套基于LSTM神经网络实现多时间序列特征提取的道岔故障诊断完整Python项目,面向计算机、人工智能、自动化及轨道交通相关专业的学生、教师与工程技术人员,适用于毕设、课程设计、故障诊断算法研究与工业时序建模实践。压缩包共…

2026/10/3 3:05:03

Java Web从环境搭建到部署上线:任务式开发完整指南

一提起“Java Web应用开发”,很多刚学完Java基础的人第一反应是:语法看懂了、集合会用了,可真让自己做一个能在浏览器里访问并操作数据的系统,脑子里还是一片空白。这也是我这些年回答过最多的入门问题之一。市面上的“任务式教程…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 0:04:31

国内大学生必备的AI写作辅助软件是哪款?

国内高校学生在论文写作过程中,越来越依赖AI辅助工具提升效率,主流方案以本土化全流程工具为核心,结合通用大模型与专业插件,覆盖选题构思、框架搭建、初稿撰写、查重降重、格式调整等关键环节,本文将深入解析当前主流…

2026/10/3 0:04:31

Codex接入Jev模型完整指南:配置方法、本地部署与踩坑排查

最近不少人在讨论 Codex 搭配 Jev 这套玩法,我一开始没太当回事,直到自己把 Jev 接进 Codex跑了几轮编码任务之后,才明白那些说“直接起飞”的人是怎么想的。Codex 作为工具本身已经够能打了,但模型固定、上下文策略固定&#xff…

2026/10/3 0:04:31

GitHub 热门: NVIDIA/Model-Optimizer

👋 Hi,我擅长 AI 大模型应用落地、意识解码与 AI 开发工具链 。 💡 创业路上,用技术换时间,一起把 AI 变成生产力 🚀 >GitHub 热门: NVIDIA/Model-Optimizer 凌晨两点,你刚把跑通了的 Qwen3.…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑