状态传导图
橙色节点表示当前异常;原始 batch 标识与同一步系统遥测是后续重放的证据。
观察点 01
先确认它是单批噪声、持续漂移还是数值爆炸
把 loss 与裁剪前后梯度范数、学习率、有限值、激活范围、QK logits、MoE 路由、吞吐、rank 日志和数据批次 ID 对齐。单看一条平滑 loss 曲线无法区分原因。
Spike 是报警信号,不是根因名称。
Loss 突然抬头可能来自数据与参数状态的交互、数值溢出、梯度异常、调度器错位、注意力/路由或通信状态。优化器只是链路中间一环;可靠训练要先留证,再从完整恢复状态做受控重放。
状态传导图
橙色节点表示当前异常;原始 batch 标识与同一步系统遥测是后续重放的证据。
观察点 01
把 loss 与裁剪前后梯度范数、学习率、有限值、激活范围、QK logits、MoE 路由、吞吐、rank 日志和数据批次 ID 对齐。单看一条平滑 loss 曲线无法区分原因。
Spike 是报警信号,不是根因名称。
状态传导图
NaN/Inf 不能靠有限比例裁剪修复;应跳过或拒绝该步并保存现场。
观察点 02
若 FP16 使用 loss scaling,先反缩放梯度,再计算跨分片一致的 global norm 并裁剪;不同参数组交给 AdamW、Muon 等优化器。代表性 Muon 实现把 Nesterov 风格动量送入 Newton–Schulz;Kimi K2 的 QK-Clip 位于更新后,是特定注意力分量的约束。
稳定措施的目标是限制坏更新扩散,不等于修复产生坏梯度的源头。
状态传导图
同一步复现会提高数据×状态假设的优先级,但仍需对照实验;分布式非确定性也可能造成偏离。
观察点 03
恢复包应包含模型、optimizer、scheduler、AMP(Automatic Mixed Precision)scaler、step、RNG(Random Number Generator)、sampler/data cursor、并行/路由配置与完整性信息。随后分别重放同 batch、替换 batch 或换较早状态,每次只改一个变量。
Checkpoint 是受控实验的起点,不是“逐 bit 确定重放”的保证。
你现在应该能解释:Checkpoint 是受控实验的起点,不是“逐 bit 确定重放”的保证。
优化器决定“这一步怎么走”,学习率决定“走多远”,裁剪与数值检查限制“坏步破坏多大”,监控和恢复状态则回答“为什么出事、能否复现”。预训练中的 loss spike(损失突增)可能来自数据、数值、注意力、MoE(Mixture of Experts,混合专家)路由或分布式状态;仅凭一条 loss 曲线不能定位根因。
| 层次 | 它真正回答的问题 | 不能单独证明什么 |
|---|---|---|
| 更新算法 | AdamW / Muon 怎样把梯度变成参数更新? | 不能保证任意模型、数据和精度配方都稳定。 |
| 保护机制 | warmup、全局梯度裁剪、有限值检查怎样限制危险更新? | 限制症状不等于修复根因。 |
| 证据与恢复 | 出事时保存了什么,能否隔离变量、恢复短跑并验证? | 有 checkpoint 也不自动等于逐 bit 确定性重放。 |
SGD(Stochastic Gradient Descent,随机梯度下降)的基础示意让各坐标共享一个全局学习率;AdamW 是带 decoupled weight decay(解耦权重衰减)的 Adam,用梯度的一阶矩和未中心化二阶矩做逐元素预条件。原论文的关键结论是:L2 正则与 weight decay 在标准 SGD 中可等价重参数化,却不再与 Adam 里的自适应缩放等价;它报告的是更清楚的超参数解耦与实验泛化,不是“AdamW 必然比 Adam 更稳”的普遍定律。
m_t = β1 · m_(t-1) + (1-β1) · g_t
v_t = β2 · v_(t-1) + (1-β2) · g_t²
θ_t = θ_(t-1) - η_t · m_hat_t / (sqrt(v_hat_t) + ε)
- η_t · λ · θ_(t-1) m_hat、v_hat 是偏差校正后的矩估计;v 是梯度平方的指数移动平均,不是中心化方差。最后一项直接按当前参数收缩,所以不会先混进 loss 梯度再被 Adam 的预条件器逐元素缩放。公式省略了实现中的参数分组、AMSGrad 等变体与精度细节。
设 θ₀=2、g₁=0.5、m₀=v₀=0、β₁=0.9、β₂=0.999、η=0.01、λ=0.1,忽略极小的 ε。则 m₁=0.05、v₁=0.00025;偏差校正后 m̂₁=0.5、v̂₁=0.25。自适应更新量为 0.01×0.5/√0.25=0.01,解耦衰减量为 0.01×0.1×2=0.002,所以 θ₁=2-0.01-0.002=1.988。
LR(Learning Rate,学习率)与优化器是两个维度。warmup(预热)常把学习率从较小值逐步升到峰值,让早期参数、激活和矩估计还在快速变化时不要立刻迈大步;但 2024 年的实证研究把主要收益联系到可用峰值学习率,以及 loss Hessian 的 sharpness(损失曲率最大特征值;对 Adam 还看预条件后的 sharpness),而不是证明 warmup 在数学上永远必需。
η_t = η_peak · t / T_warmup (0 ≤ t ≤ T_warmup)
η_peak = 3e-4, T_warmup = 2000
step 500: η_500 = 3e-4 × 500/2000 = 7.5e-5 这是教学计算,不是推荐参数。warmup 之后可以保持常数、cosine decay(余弦衰减)或采用稳定段再衰减;调度器状态与当前 step 必须跟 checkpoint 一起恢复,否则“同一模型权重”会走出不同的下一步。
| 公开配方 | 论文中的做法 | 正确读法 |
|---|---|---|
| 原始 Transformer(2017) | 前 4,000 steps 线性升高,之后按 step 的逆平方根衰减。 | 这是该模型、batch 与 Adam 配方的一部分,不是所有 Transformer 的固定常数。 |
| Moonlight(2025) | 2,000 steps 线性升到 4.2e-4;约 33B–5.2T tokens 走余弦衰减,5.2T–5.7T cooldown 先在 100 steps 升到 1e-4,再线性降到 0。 | 它与 Muon 的 update-RMS 校准、模型规模和数据配方共同生效;末段 cooldown 不是前一段余弦的简单延续。 |
| Kimi K2(2025) | 500 steps warmup,之后经历恒定 LR、余弦衰减和末段 annealing。 | 不能只复制 500 这个数字;token/batch 规模、峰值 LR 与架构均不同。 |
Muon 为二维隐藏层矩阵维护 momentum buffer(动量缓冲);代表性实现先算 Bₜ=μBₜ₋₁+gₜ,再把 Nesterov-style(Nesterov 风格)的 gₜ+μBₜ 送入 Newton–Schulz 迭代,近似其 orthogonal polar factor(正交极因子)。若用 SVD(Singular Value Decomposition,奇异值分解)写送入正交化的矩阵 M=UΣVᵀ,精确极因子是 UVᵀ。它不会把权重 W 强制变成正交矩阵,也不是把权重整体“旋转一下”。
| 名称 | 公开机制 | 不要混在一起的边界 |
|---|---|---|
| 基础 Muon(早期配方) | 为二维隐藏层矩阵维护 momentum buffer;代表性实现把 Nesterov 风格缓冲送入有限次 Newton–Schulz 正交化。 | 早期基础配方不等于后来用于大模型的 weight decay、形状缩放与分布式完整方案。 |
| Scalable Muon(Moonlight 采用) | 加入 weight decay,并按矩阵形状校准 update RMS(Root Mean Square,均方根);论文实现用 Muon 管二维隐藏层矩阵,用 AdamW 管 embedding、LM head(Language Model head,语言模型输出头)、RMSNorm(Root Mean Square Layer Normalization,均方根层归一化)等参数组。 | embedding 与 LM head 张量也可能是二维;分流是该配方的参数组策略,不是仅看 tensor rank 的数学定律。 |
PyTorch 2.13 torch.optim.Muon | 当前官方实现包含 Nesterov、weight decay 与矩阵形状相关的学习率缩放;adjust_lr_fn="match_rms_adamw" 才选择 Moonshot 的 RMS matching。 | 默认 adjust_lr_fn 走 original,不是 Moonlight 模式;API 也不会替用户自动把 embedding、bias、Norm 等参数路由给 AdamW。 |
| MuonClip(Kimi K2 采用) | 在 scalable Muon 上再加入 QK-Clip,按每个 attention head 的最大 softmax 前 logit 约束特定 Query–Key(查询—键)投影分量。 | 这是 Kimi K2 针对其注意力结构的做法,不是“Muon 自带 QK-Clip”。 |
设满秩动量矩阵 M=diag(3,1)。其 SVD 为 U=I、Σ=diag(3,1)、V=I,所以精确正交极因子 UVᵀ=I:原更新两个奇异方向的强度从 3:1 变成 1:1。实际 Muon 用有限次 Newton–Schulz 迭代得到近似值;论文中的 weight decay 与 update-RMS matching 是可扩展配方再加上的工程层。
C=6ND 约计模型训练 FLOPs,没有把 Newton–Schulz、优化器通信、kernel 效率或故障恢复折成端到端墙钟,因此 52% 不等于训练时间固定缩到 52%。Moonlight 则是另一项 MoE 训练:不含 embedding 时约 2.24B activated / 15.29B total,含 embedding 时常概括为 3B / 16B,以 5.7T tokens 训练;两种实验不能拼成“16B 模型已证明普遍快 2×”。global norm clipping(全局梯度范数裁剪)把所有待更新梯度视作拼接后的一个向量:只有总范数超过阈值 C 时才整体等比例缩小,因此保留方向、限制幅度。它能降低单个坏步的破坏半径,却不会解释坏梯度从哪里来。
||g||₂ = sqrt(Σ_i g_i²)
scale = min(1, C / (||g||₂ + ε))
g_clipped = scale · g
g = [3,4], ||g||₂ = 5, C = 2
scale = 2/5 = 0.4 → g_clipped = [1.2,1.6] 手算忽略极小的 ε。若梯度已经含 NaN/Inf,乘一个有限系数不能把它修好;应拒绝或跳过该 step,并追查上游数值与数据。阈值过小还会让大量正常 step 都被压缩,所以要同时记录“裁剪前 norm、裁剪比例和触发频率”。
| 工程位置 | 正确顺序 | 常见误区 |
|---|---|---|
| FP16(16-bit Floating Point,16 位浮点)+ loss scaling | scaled backward → unscale gradients → 计算/裁剪 norm → scaler step 检查有限值并决定是否跳步。 | 直接裁剪仍被放大的梯度,会让阈值失去原有单位;BF16(Brain Floating Point 16,脑浮点 16)因指数范围更大,也不代表所有实现都必须或都不必用 scaler。 |
| 分片 / 多卡训练 | 范数必须覆盖该更新所代表的全局梯度;通常由 FSDP/ZeRO 或训练框架执行必要的归约。 | 只在每张卡上独立算本地 norm,可能让各 rank 使用不一致的缩放因子。 |
| QK-Clip | Kimi K2 在参数更新后,复用当前 forward 已得到的每头最大 attention logit 来缩放特定 Q/K 分量。 | 它不改当前 step 已完成的 forward/backward,也不等同于优化器前的全局梯度裁剪;MLA(Multi-head Latent Attention,多头潜在注意力)的共享 rotary 分量不在其裁剪范围。 |
“loss spike”没有跨论文统一阈值:可以是一个 batch 的尖峰,也可以是再也回不来的发散。候选原因应写成待验证假设,而不是看到曲线后直接下结论。最有价值的不是一张平滑图,而是同一 step 的数据标识、学习率、梯度、激活、注意力、路由、吞吐、通信与有限值状态。
峰值 LR、warmup、调度器 step 或恢复后的 optimizer moments 是否一致?不要用“先降 LR”覆盖恢复错位。
看裁剪前后 global norm、逐层 norm、NaN/Inf、FP16 loss scale 或 FP8(8-bit Floating Point,8 位浮点)amax;先确认异常在哪一步首次出现。
看每层/每头 softmax 前 logit、Q/K norm 与 attention entropy。谱增长可能是线索,但需结合参数更新与架构定位。
MoE(Mixture of Experts,混合专家)需查专家负载、容量丢弃、router 概率和 all-to-all 尾延迟;负载不均与 spike 之间仍需时间对齐证据。
保留样本 ID、长度、token 分布、来源混合、目标难度和 loss mask。乱码或重复并不自动等于根因。
查 rank 日志、collective 超时、梯度分片、数据 cursor、随机状态、checkpoint 完整性与并行拓扑是否一致。
| 案例 | 论文 / 团队披露 | 可迁移的结论边界 |
|---|---|---|
| PaLM 540B(2022/2023) | 论文称最大模型尽管用了梯度裁剪,仍大约出现 20 次 loss spike;团队从 spike 前约 100 steps 的 checkpoint 重启,并跳过覆盖异常附近的约 200–500 个 data batches。同一批附近数据从更早 checkpoint 重放时不一定复现。 | 裁剪不是零事故保证;证据更支持“batch 与参数状态交互”,不能把每次 spike 都叫作坏数据。 |
| Muon dense scaling law(2025) | 不含 embedding 的 399M–1.5B dense 模型在团队专有数据上做 compute-optimal 拟合,报告匹配 AdamW loss 约需其 52%、按 C=6ND 估算的 FLOPs。 | 这是特定模型族与代理口径,不含优化器和系统墙钟开销,不是跨模型固定快 2×。 |
| Moonlight MoE(2025) | 团队以 scalable Muon 配方训练含 embedding 时常概括为 3B activated / 16B total 的 MoE,共 5.7T tokens。 | 这是单次 MoE 训练,与 dense scaling-law 是两类证据,不能拼成 16B 模型已证明快 2×。 |
| Kimi K2(2025) | 团队定义 MuonClip = Muon + weight decay + RMS matching + QK-Clip,并报告 15.5T tokens 预训练零可观察 loss spike;公开曲线逐 step、无平滑/抽样,但为清晰省略了训练最开头。 | 这是 1.04T total / 32B activated 模型的一次团队报告,不是 QK-Clip 对其他架构的零 spike 保证。 |
| DeepSeek-V3(2024/2025) | 技术报告披露 671B total / 37B activated、14.8T tokens、FP8 mixed precision,以及以动态 bias 为主的 auxiliary-loss-free batch-wise 负载均衡;它仍保留系数 0.0001 的 complementary sequence-wise balance loss。团队称训练没有不可恢复的 loss spike 或 rollback。 | “没有不可恢复 spike”不等于从无波动;组件并列出现也不能证明每个组件分别防住了哪类故障。 |
| 阶段 | 必须保留 / 核对 | 通过标准 |
|---|---|---|
| 1 · 冻结证据 | step、样本/数据 cursor、loss mask、LR、裁剪前后 norm、逐层有限值、QK logits、MoE 路由、rank 与通信日志。 | 异常前后窗口可按同一时间轴关联,原始数据没有被平滑曲线覆盖。 |
| 2 · 恢复状态 | 模型权重、optimizer、scheduler、AMP(Automatic Mixed Precision,自动混合精度)scaler、训练 step、RNG(Random Number Generator,随机数生成器)、sampler/data cursor、路由/并行配置与 checkpoint 完整性。优先在 optimizer-step 边界保存;若允许 gradient-accumulation micro-step 中途保存,还要带累积梯度、micro-step 计数和流水线阶段状态。 | 关键状态齐全且版本兼容;“只有 model weights”不能声称是完整续训。 |
| 3 · 隔离变量 | 同 batch + 同状态、替换 batch + 同状态、同 batch + 较早状态;必要时缩小到单卡或更小拓扑。 | 每次只改一个可解释变量;“同一步复现”提高某条假设优先级,但仍不是单独的因果证明。 |
| 4 · 保护性短跑 | 先验证有限值、loss 回落、裁剪触发率、路由与吞吐,再扩大步数和集群。 | 连续短跑通过回归阈值,且根因修复与临时护栏分开记录。 |
| 资料来源 | 原论文 / 官方文档 |
|---|---|
| AdamW | Decoupled Weight Decay Regularization |
| 学习率 warmup | Attention Is All You Need · Why Warmup the Learning Rate? |
| 梯度裁剪 / 混合精度 | On the difficulty of training RNNs · Mixed Precision Training |
| PyTorch 工程顺序 | clip_grad_norm_ · AMP examples · Saving & Loading · Reproducibility |
| Muon / Moonlight | Muon is Scalable for LLM Training · PyTorch 2.13 Muon |
| Kimi K2 | Kimi K2: Open Agentic Intelligence |
| DeepSeek-V3 | DeepSeek-V3 Technical Report |
| PaLM | PaLM: Scaling Language Modeling with Pathways |
页面于 2026-07-15 逐项复核。Muon 的 52% FLOPs 来自特定 dense 模型族、专有数据与 C=6ND 代理下的 compute-optimal scaling-law 拟合;PyTorch 当前实现按 2.13 文档核对。Moonlight、Kimi K2 与 DeepSeek-V3 数字来自各自团队报告;PaLM 的 spike 恢复细节来自 JMLR 论文。诊断表是候选原因树,实际事故必须用保存的数据、优化器/随机状态与逐层遥测验证。