37 KiB
数值精度、优化器与训练稳定性研究账本
状态:第一轮证据框架
研究截止:2026-07-29
课程位置:专题 09「数值精度、优化器与训练稳定性」
锚点:Kimi K2 §2.1 / Appendix D–E、Kimi K3 §2.3 / §2.5 / §3.3 / §4.1.4 / §5.2.2、DeepSeek LLM §2.4、DeepSeek-V3 §3.3 / Appendix B、DeepSeek-V4 §2.4 / §3.4.1 / §4.2.3 / §5.2.1
目标:让读者理解“一个数怎样表示、一次乘法怎样累加、一个梯度怎样变成矩阵更新、一次训练为什么突然崩掉”,并能准确阅读 FP8、MXFP4、Muon、QK-Clip 与 QAT 报告。
原则:P0 原论文 / 正式技术报告 / 开放标准优先;P1 作者实现与技术博文用于定义原始 Muon;Grok 只提供 discovery leads;所有性能数字保留作者报告边界。
0. 本章先拆掉五个误区
误区一:模型用 FP8 训练,就是所有东西都变成 FP8
不是。一个训练 step 至少包含:
参数存储
→ 前向输入
→ 乘法
→ 部分和累加
→ 激活输出
→ 反向激活梯度
→ 权重梯度
→ 跨卡通信
→ optimizer moments
→ master weights
→ checkpoint
每个角色可以用不同格式。DeepSeek-V3 的核心 GEMM 输入用 FP8,但 embedding、output head、 attention、normalization、router 等保留 BF16 / FP32;master weights、累计梯度保留 FP32, optimizer moments 可用 BF16。把这套“混合角色”写成“全 FP8”会直接误导。
误区二:位数减半,速度必然翻倍
位数变少可以降低:
- 每个值的存储字节;
- HBM 与互连搬运的字节;
- 某些硬件矩阵单元的面积和能耗;
- 特定芯片上的矩阵乘峰值成本。
但端到端速度还取决于:
- 芯片是否有原生指令;
- shape 是否匹配 Tensor Core;
- quantize / dequantize / scale 的开销;
- 累加是否要频繁 promotion;
- kernel 是否融合;
- 工作负载是 compute-bound 还是 memory / communication-bound;
- 未量化算子占比。
因此页面只展示“理论数据量 / 指定硬件能力”,不把它冒充真实训练 speedup。
误区三:低精度只是“小数不够准”
低精度至少有三种不同失败:
- Overflow:绝对值超过最大可表示范围,变成饱和、Inf 或 NaN;
- Underflow:太小的值变成 subnormal 或 0;
- Rounding noise:仍在范围内,但落到相邻格点,细小更新被吞掉。
Exponent 位主要决定“能装多大 / 多小”,mantissa 位主要决定“同一数量级内能分多细”。 scale 可以移动可表示窗口,却不能凭空增加格点数量。
误区四:优化器稳定,模型就稳定
一次 loss spike 可能来自:
- attention logits;
- residual / layer depth;
- SwiGLU 乘法 outlier;
- Adam 二阶矩滞后;
- Muon update spectrum;
- MoE router 与 expert outlier 的反馈;
- 低精度 scale / accumulator;
- 数据异常;
- kernel / collective / hardware 错误。
优化器只是一层。K3 同时用 Per-Head Muon、weight clipping、RMSNorm、SiTU-GLU; DeepSeek-V4 同时用 hybrid Muon、QK RMSNorm、SwiGLU clamping、Anticipatory Routing 和确定性 kernel。
误区五:PTQ、QAT、低精度微调、低精度预训练是一回事
| 范畴 | 什么时候量化 | 参数是否继续学 | 主要目标 |
|---|---|---|---|
| PTQ | 完成训练后 | 通常不做全模型训练 | 快速压缩部署 |
| QAT | 训练 / 微调时模拟或执行量化 | 是 | 让模型适应量化误差 |
| QLoRA 类 | 基座 4-bit 存储,adapter 训练 | 基座通常冻结 | 降低微调显存 |
| 低精度预训练 | 从头或长程训练中低精度计算 | 是 | 降低训练计算 / 通信 / 激活成本 |
| Fully quantized training | W/A/G 等广泛低精度 | 是 | 把训练本身推进到极低位 |
一句话总纲:
数值工程不是选一个 dtype;它是在一条完整训练与部署数据流里,为每种 tensor 角色分配范围、精度、存储、计算与恢复防线。
1. 十张不能混在一起的账
| 账本 | 核心问题 | 最小字段 | 常见误读 |
|---|---|---|---|
| N1 表示 | 一个 bit pattern 代表什么值 | sign / exponent / mantissa、subnormal、NaN/Inf | 只比较 bit 数 |
| N2 缩放 | 可表示窗口怎样移动 | per-tensor / channel / token / tile / block、scale dtype、axis | 把 block scale 当无成本 |
| N3 计算 | 哪些算子真正用低精度乘法 | operator、input dtype、hardware instruction | “模型 FP8”=所有算子 FP8 |
| N4 累加 | 小乘积在哪里、以多少位求和 | accumulator、promotion interval、reduction tree | 只看输入 dtype |
| N5 存储与通信 | 哪些 tensor 以低精度缓存 / 发送 | activation、gradient、optimizer state、KV、checkpoint | 计算快=显存也同比下降 |
| N6 更新 | 梯度如何变成参数更新 | momentum、preconditioner、update RMS、weight decay | AdamW 与 Muon 只是不同公式名 |
| N7 参数化 | 宽度、深度、head 如何改变更新尺度 | init、μP、logical matrix、head partition | 小模型超参直接复制 |
| N8 稳定性 | 哪个可观测量先异常 | max / percentile / norm / spectrum / saturation | 只看 loss |
| N9 恢复 | 异常时怎样止损和复现 | detect、skip、clip、rollback、determinism、checkpoint | rollback 等于解决根因 |
| N10 证据与经济 | 增益对什么基线、硬件与预算成立 | model、Token、hardware、quality、wall-clock、energy | 作者峰值吞吐外推到所有系统 |
2. 浮点数显微镜
2.1 三个字段
典型二进制浮点数可写成:
(-1)^sign × significand × 2^exponent
- sign:正负;
- exponent:数量级;
- mantissa / fraction:同一数量级中的细分;
- normal 数通常有隐含 leading 1;
- subnormal 用更少有效位换取逐渐下溢;
- 特殊编码可用于 ±0、Inf、NaN。
2.2 常见格式对照
| 格式 | 位布局 | 约最大有限值 | 最小 normal | 单位附近间距 | 直觉 |
|---|---|---|---|---|---|
| FP32 | 1 / 8 / 23 | 3.4e38 | 1.18e-38 | 1.19e-7 | 范围和精度都宽,成本高 |
| FP16 | 1 / 5 / 10 | 65,504 | 6.10e-5 | 9.77e-4 | 尾数较细,范围明显窄 |
| BF16 | 1 / 8 / 7 | 3.4e38 | 1.18e-38 | 7.81e-3 | 保留 FP32 范围,牺牲细度 |
| FP8 E4M3 | 1 / 4 / 3 | 448 | 1.56e-2 | 1.25e-1 | 更精细,范围较窄 |
| FP8 E5M2 | 1 / 5 / 2 | 57,344 | 6.10e-5 | 2.5e-1 | 范围更宽,格点更粗 |
| MXFP4 | block scale + E2M1 element | 取决于共享 scale | 取决于共享 scale | 极粗 | 用局部共享尺度补偿 4-bit 元素 |
注意:
- “单位附近间距”是教学用 machine epsilon 直觉,不等于全数轴统一误差;
- E4M3 / E5M2 数字按 FP8 Formats 论文定义;
- MXFP4 必须连同 block size、scale dtype 与 axis 一起描述。
2.3 为什么 BF16 比 FP16 更适合大模型训练
Kalamkar et al. 2019:
- BF16 与 FP32 都用 8-bit exponent,因此动态范围相近;
- BF16 尾数只有 7 bits,因此细节精度低于 FP16;
- 论文在多种工作负载上报告无需 FP16 那样的 loss-scaling 调参即可匹配 FP32。
不能外推成:
- BF16 永不 overflow;
- BF16 所有算子都足够准确;
- optimizer state / gradient accumulation 可随意降到 BF16。
DeepSeek LLM 的公开做法正体现边界:主训练 BF16,但梯度在 FP32 累加; cross entropy kernel 按需把 BF16 logits 转 FP32。
2.4 Rounding 不是无害格式转换
确定性 round-to-nearest:
- 可重复;
- 很小的同方向更新可能反复变 0。
stochastic rounding:
- 按相邻格点距离随机选择;
- 期望上可以保持无偏;
- 会引入随机性与实现成本;
- 对低精度梯度同步 / update 尤其重要。
Gupta et al. 2015 在 16-bit fixed-point 训练中展示 stochastic rounding 的关键作用; DeepSeek-V4 在把 MoE gradient 通信量化到 BF16 时明确使用 stochastic rounding, 再在本地 FP32 求和,避免低精度 collective 累加误差。
3. 从 FP16 mixed precision 到 FP8 / MXFP4
3.1 2017:mixed precision 三件套
Micikevicius et al. 2017/2018 §3:
-
FP32 master weights
forward / backward 使用 FP16 copy;真正累积小 update 的 master copy 保留 FP32。 -
Loss scaling
放大 loss,使反向小梯度进入 FP16 可表示范围;更新前再 unscale。 -
FP32 accumulation
FP16 乘积在 FP32 输出中累加,再按需要写回较低精度。
关键边界:
- FP16 小于
2^-24的值会变 0; - scale 太大又会 overflow;
- overflow 后更新权重会产生不可逆 NaN,因此动态 loss scaling 会检测并跳过 step;
- “乘法输入低精度、累加高精度”从一开始就是核心,而不是后来补丁。
3.2 2022:FP8 是两个格式,不是一个
FP8 Formats for Deep Learning:
- E4M3:4 exponent + 3 mantissa,推荐 weight / activation;
- E5M2:5 exponent + 2 mantissa,推荐 gradient;
- 输入需通过 scale 移入可表示区间;
- 输出通常以更高精度产生;
- nonlinear、normalization、optimizer update 等可保留高精度;
- 是否使用 per-tensor scale 由网络决定。
论文自己的限制:
- 格式论文不规定 scale heuristic;
- 许多训练实验是模拟格式,而不是同一硬件上的端到端系统结果;
- FP8 并不取消混合精度,只把角色划分做得更细。
3.3 2023:Microscaling 的关键不是 FP4,而是“局部共享范围”
Rouhani et al. 2023 §2:
MX block = one shared scale X + k scalar elements P1…Pk
real value vi = X × Pi
公开 concrete formats:
- block size
k = 32; - scale format
E8M0; - MXFP8 element:E4M3 / E5M2;
- MXFP6 element:E2M3 / E3M2;
- MXFP4 element:E2M1;
- MXINT8 element:INT8。
粒度变小的收益:
- 一个极端 outlier 只压缩同 block 的有效精度;
- sub-8-bit 才有机会覆盖复杂 tensor 分布。
代价:
- 每 32 个值多一个 scale;
- scale axis 是语义的一部分;
- transpose 可能改变 scale axis,量化与 transpose 不可交换;
- conversion recipe 与 clipping 会影响结果;
- vector op 仍常用 BF16 / FP32。
3.4 DeepSeek-V3:FP8 成功靠的是一整套角色分配
DeepSeek-V3 §3.3:
GEMM
- Fprop、Dgrad、Wgrad 的核心 GEMM 输入使用 FP8;
- 输出为 BF16 或 FP32;
- embedding、output head、MoE gate、normalization、attention 保留原精度;
- master weights、weight gradients、optimizer states 保留更高精度。
Fine-grained scale
- activation:
1 × 128tile,即 per token / 128 channels; - weight:
128 × 128block; - 在线按当前 tile / block 计算 scale;
- 全部 tensor 使用 E4M3,依靠细粒度 scale 弥补 E5M2 范围。
Accumulation
- H800 Tensor Core FP8 accumulation 作者测得约 14-bit;
- 每
Nc = 128个元素将 partial result promotion 到 CUDA Core FP32 register; - scale 乘法与 promotion 一起完成;
- 这是精度—吞吐折中,不是免费 FP32 accumulate。
Storage / communication
- AdamW first / second moments 用 BF16;
- master weights 与 gradient accumulation 用 FP32;
- backward cached activations 可用 FP8;
- 对 attention backward 敏感激活使用自定义 E5M6;
- MoE dispatch 可 FP8,combine 保留 BF16。
证据边界
- 两个约 16B / 230B baseline、约 1T / 0.9T Token 对照中,相对 BF16 loss error < 0.25%;
- Appendix B.2 报告:把 Dgrad activation gradient 改成
128 × 128block quantization, 16B MoE 在约 300B Token 发散; - 因此“更规整 block 更好实现”并不等于数值上可接受。
3.5 2024:长程训练暴露短实验看不到的 SwiGLU 问题
Fishman et al. 2024:
- 短程 FP8 实验可能看不见后期 outlier;
- 其 Llama2-7B 实验在约 200B Token 后出现 activation outlier 和 FP8 loss divergence;
- 论文把它连接到 SwiGLU 两支 weight 向量的长期对齐;
- SwiGLU 在大正输入时近似两个线性项相乘,可呈二次增长;
- Smooth-SwiGLU 通过 per-channel scale 抑制进入量化层的 outlier,再在后续权重中吸收逆 scale。
边界:
- 这是指定 Llama2 / FP8 delayed-scaling 配方上的作者结果;
- 不能证明所有 SwiGLU 模型都会在同 Token 发生同样失稳;
- 但它解释了为什么完整训练时长是低精度验证的一部分。
3.6 2025–2026:FP4 的三种完全不同路径
-
FP4 All the Way
研究从头 fully quantized training;W/A/G 广泛 FP4,探索 NVFP4、rounding 和 quantization-noise threshold。 -
DeepSeek-V4 FP4 QAT
post-training 阶段把 MoE expert weights 与 CSA indexer QK path 纳入 MXFP4 QAT; FP32 master → FP4 → lossless dequant to FP8(在其 scale 条件下)→ compute; backward 用 STE 传回 FP32 master。 -
Kimi K3 deployment-aware QAT
从 SFT 开始贯穿 RL;MoE expert weights 用 MXFP4,activation compute 用 MXFP8; attention projection、latent MoE projection、shared expert、router 保留更高精度; rollout 与 training 使用相同量化方案以减少 train–inference mismatch。
不能把三者混成“2026 模型都用 FP4 预训练”。
4. 量化:对象、粒度、时机
4.1 仿射量化的最小模型
常见 uniform affine quantization:
q = clamp(round(x / scale) + zero_point)
x_hat = scale × (q - zero_point)
- symmetric:zero point 通常为 0;
- asymmetric:允许区间中心偏移;
- per-tensor:整 tensor 一个 scale;
- per-channel:每输出 / 输入 channel 一个 scale;
- per-token:每 Token 一个 activation / KV scale;
- group / block:一小组共享 scale。
4.2 PTQ
GPTQ:
- one-shot weight-only PTQ;
- 用 calibration activation 和近似二阶信息补偿量化误差;
- 作者报告可在约 4 GPU-hours 内量化 OPT-175B 到 3/4 bit;
- 不代表 activation、KV、训练梯度都已量化。
SmoothQuant:
- 对数学等价的 channel rescaling,把 activation outlier 难度迁移到 weight;
- 主要服务 W8A8 inference;
- 仍需校准 scale,且低到 4-bit 时问题不同。
4.3 QAT
Jacob et al. 2018 §3:
- 变量与主计算仍以 floating point 保存;
- forward 插入 fake quantization,模拟 inference rounding / clamp;
- backward 继续传梯度;
- fake-quant 节点位置必须匹配真实部署图。
LLM-QAT:
- 用模型自身生成数据做 data-free distillation;
- 同时研究 weight、activation、KV cache;
- 作者在 LLaMA 7B/13B/30B 上报告低于 8 bit 时优于其 PTQ baseline;
- 论文也明确 4-bit activation 在其设置中仍不理想。
4.4 QLoRA 的精确边界
QLoRA:
- frozen pretrained base 用 4-bit NF4 storage;
- 计算时 dequant 到 BF16;
- 训练 LoRA adapter,而不是完整 4-bit base update;
- double quant 减少 scale 元数据;
- paged optimizer 处理长序列显存峰值。
所以 QLoRA 证明“低显存微调可行”,不证明“从头 4-bit 预训练等价”。
5. 优化器:从逐坐标到矩阵几何
5.1 SGD / Momentum
m_t = μ m_(t-1) + g_t
θ_t = θ_(t-1) - η m_t
优点:
- 状态少;
- 更新含义直接;
- 通信 / sharding 容易。
LLM 常见困难:
- 不同参数坐标 / layer 的梯度尺度差异大;
- 高 LR 可用区间窄;
- 要靠参数化、归一化和精细 schedule 补偿。
5.2 Adam
m_t = β1 m_(t-1) + (1-β1) g_t
v_t = β2 v_(t-1) + (1-β2) g_t²
m_hat, v_hat = bias correction
θ_t = θ_(t-1) - η m_hat / (sqrt(v_hat) + ε)
直觉:
- momentum 平滑方向;
- second moment 给每个坐标不同步长;
- 小梯度坐标不必永远被大尺度坐标淹没。
代价:
- 两份状态;
- 逐元素 preconditioning 丢掉矩阵结构;
ε、β2 与长程非平稳梯度会影响实际更新;- optimizer state 常成为显存主项。
5.3 AdamW:weight decay 不是 L2 penalty 的别名
在 SGD 中,L2 gradient 与 weight decay 可在适当缩放下等价;
在 Adam 中,若把 λθ 混入 gradient,它也会被 v_t 的自适应分母改变。
AdamW:
θ_t = (1 - ηλ) θ_(t-1) - AdamUpdate(g_t)
把“根据 loss 更新”与“直接收缩权重”分开。
5.4 Adafactor:省的是 second moment,不是免费 Adam
对矩阵 V ∈ R^(n×m),不保存每元素 second moment,
而保存 row / column statistics,用 O(n+m) 近似 O(nm)。
论文还强调:
- 去掉 momentum 可再省一份状态;
- stale second-moment estimator 可造成过大 update;
- update clipping 应裁真正的 adaptive update,而不仅是原始 gradient;
- relative step size 把参数 RMS 纳入步长。
5.5 Shampoo:保留矩阵 / tensor 结构
Shampoo 为张量每个 mode 维护预条件统计,并对 gradient 做 Kronecker 型变换。
收益:
- 比逐坐标 Adam 更尊重矩阵结构;
- 为后来的矩阵级 optimizer 提供对照。
代价:
- 预条件矩阵与矩阵根昂贵;
- 大模型需要 blocking、低频更新和分布式实现;
- 首版课程只作为“结构化 preconditioner”桥梁,不给出生产优胜排名。
5.6 μP:不是 optimizer,而是让 scale-up 的更新语义一致
Tensor Programs V:
- standard parametrization 下,宽度变化会改变 activation / update 尺度;
- Maximal Update Parametrization 设计不同 parameter group 的 init / LR scaling;
- 在作者实验中,小代理模型调出的超参数可零样本迁移到更宽模型。
边界:
- 主要解决宽度,不自动覆盖深度、数据、batch、optimizer 切换;
- 实现需要正确区分 matrix-like 与 vector-like 参数;
- 它与 optimizer 可以组合,不是 Adam / Muon 的直接替代。
5.7 Muon:对 momentum matrix 做 approximate orthogonalization
原始 Muon / Moonlight 公式:
M_t = μ M_(t-1) + G_t
O_t = NewtonSchulz(M_t) ≈ U V^T
W_t = W_(t-1) - η O_t
若 M = UΣVᵀ,UVᵀ 可视作把非零 singular values 拉近 1,
从而避免 update 只沿少数 dominant direction。
重要澄清:
- 生产实现不做完整 SVD;
- Newton–Schulz 用矩阵乘迭代近似;
- 只适合 logically independent 2D matrix parameter;
- embedding、norm、bias、head 等常由 AdamW 处理;
- 矩阵 shape 与 partition 会改变 update RMS。
5.8 “Muon is Scalable” 的两个关键补丁
Moonlight / Liu et al. 2025:
-
Weight decay
vanilla Muon 长训时 weight / layer output RMS 增长,甚至越过 BF16 高精度范围; 加 AdamW-style decay 改善作者 over-train 实验。 -
Consistent update RMS
full-rankA×Bmatrix 的理论 Muon update RMS 约1/sqrt(max(A,B)); 论文乘sqrt(max(A,B)) × 0.2,让矩阵间尺度一致并复用 AdamW LR。
作者报告:
- compute-optimal scaling 实验约 2× compute efficiency;
- 相同 loss 约需 AdamW 52% FLOPs;
- Moonlight 3B / 16B MoE 训练 5.7T Token。
这些是指定模型族与调参协议的作者结果,不是 Muon 普遍定理。
5.9 Kimi K2:MuonClip
K2 观察:
- Muon 在大尺度更容易出现 attention logit explosion;
- 9B-active / 53B-total 中间实验 vanilla Muon max logits 很快超过 1000;
- attention logit 由
QKᵀ / sqrt(d)决定,Q / K weight spectral norm 增长会被乘积放大。
QK-Clip:
Smax_h = per-head max pre-softmax logit
γ_h = min(1, τ / Smax_h)
rescale head-specific Q / K weights after optimizer step
MLA 细节:
qC、kC各乘sqrt(γ_h);qR乘γ_h;- shared
kR不动,避免影响其他 heads。
K2 设置:
τ = 100;- 前 70k steps 有 12.7% heads 至少触发一次;
- 后期自行降到阈值下,clip 不再触发;
- 报告 15.5T Token 训练未观察 loss spike。
作者假说而非定理:
- Muon update spectrum 更高 rank;
- weight 与 update singular direction 更可能对齐;
Wq Wkᵀ再放大 spectral norm。
5.10 Kimi K3:Per-Head Muon
K3 不对完整 Q / K / V projection momentum 统一正交化,而按 head block 分开:
- 避免大 scale head 主导共享矩阵 update;
- 让不同 head update scale 更均衡;
- tall per-head block 的 Newton–Schulz 更便宜;
- 报告称提升大尺度训练稳定性。
训练 recipe 同时保留 K2 weight clipping,因此:
Per-Head Muon = 更新几何
QK-Clip = 越界保护
不能把两者合成一个算法名,也不能说 Per-Head Muon 已取代 QK-Clip。
5.11 DeepSeek-V4:Hybrid Muon–AdamW
DeepSeek-V4:
- majority modules:Muon;
- embedding、prediction head、mHC static bias / gate、RMSNorm weights:AdamW;
- Muon momentum
0.95、weight decay0.1、update RMS scale0.18; - hybrid Newton–Schulz:前 8 次快速系数,后 2 次稳定到 singular value 1;
- Q / KV 可直接 RMSNorm,因此不使用 K2 QK-Clip。
系统实现:
- dense matrix 通过受限 ZeRO group 与 knapsack 分配;
- MoE expert matrix 保持逻辑独立,不切断单矩阵;
- 相同 shape 合并做 batched Newton–Schulz;
- BF16 matrix multiplication 做 NS;
- MoE gradient stochastic-round 到 BF16 通信,再本地 FP32 sum。
这说明 optimizer 公式、参数分组与分布式拓扑是一个整体。
6. 稳定性不是一个故障,而是五条反馈环
6.1 深度 / residual 反馈
症状:
- model update 随深度累积;
- residual branch 过大;
- gradient vanishing / exploding;
- early training 直接卡进坏状态。
防线:
- warmup;
- scaled initialization;
- Pre-LN / RMSNorm;
- residual scaling;
- DeepNorm;
- K3 Block AttnRes / DeepSeek mHC 等新结构需各自稳定性证明。
DeepNet:
- 把 Post-LN 失稳定位为 early model update 过大;
- 用 residual up-scaling + branch weight down-scaling 让更新随深度有界;
- 作者展示可训练 1000-layer Transformer。
6.2 Attention logit 反馈
weight norm / spectral norm ↑
→ ||Q||, ||K|| ↑
→ max(QKᵀ) ↑
→ softmax 近 one-hot,entropy ↓
→ gradient 与 head dynamics 更尖锐
→ 进一步推动 weight growth
可选防线:
- QK L2 normalization + learned temperature;
- QK LayerNorm / RMSNorm;
- logit soft-cap;
- QK-Clip weight rescaling;
- z-loss 管 output logits,不与 attention logits 混同。
ViT-22B:
- 8B 视觉模型无 QK norm 时 attention logits 超过 50,000;
- QK LayerNorm 让
1e-3LR 在更大 scale 保持稳定。
Small-scale proxies:
- 用小模型 + 高 LR 复现 attention / output logit 不稳定;
- QK LayerNorm + z-loss 使作者设置跨三数量级 LR 可训练;
- 这是一种研究代理,不保证覆盖 data / system / MoE 全部故障。
6.3 Activation / SwiGLU 反馈
SwiGLU:
(xᵀw_up) × Swish(xᵀw_gate)
两支都大时,乘积可远大于单一 GeLU / ReLU。
防线谱系:
- Smooth-SwiGLU:scale 转移,函数等价;
- hard clamp:限制 linear / gate 分支;
- K3 SiTU-GLU:两支分别用 smooth tanh cap;
- PowLU:另一种 bounded / stable activation 研究。
K3 SiTU-GLU:
β1 tanh(Wg x / β1) × sigmoid(Wg x) × β2 tanh(Wu x / β2)
β1 = 4, β2 = 25
|output coordinate| < β1 β2 = 100
它在原点附近一阶匹配 SwiGLU,极大值时有界;不是简单 hard clamp。
DeepSeek-V4:
- linear component clamp 到
[-10, 10]; - gate component upper cap
10; - 报告称两款 V4 训练均使用,未观察性能损失;
- 机制理论仍明确写为 open question。
6.4 Optimizer-statistic 反馈
Wortsman et al. 2023 VLM:
- loss spike 常发生在 squared gradient 被 AdamW second moment 低估后 1–8 steps;
- gradient clipping 发生在 adaptive scaling 前,未必能限制真正 update;
- 其 AdamW–Adafactor hybrid 解决指定 CLIP ViT-H 实验的 spike。
Adafactor 更早已区分:
- gradient clipping:裁
g; - update clipping:裁 preconditioned update。
Muon 的风险不同:
- 不用逐坐标 second moment;
- 但 matrix spectrum、shape-based RMS、Q/K logit 放大成为核心。
6.5 MoE routing / expert outlier 反馈
DeepSeek-V4 公开报告:
expert outlier
→ routing 更偏向某些 expert
→ 被选 expert 接收更多异常输入 / update
→ outlier 与 routing 互相强化
→ loss spike
Anticipatory Routing:
- step
tfeature 用当前θ_t; - routing indices 用历史
θ_(t-Δt)预计算; - spike 时短 rollback 并临时启用;
- 预计算本身作者报告约 20% wall-clock overhead;
- 动态启用后整体额外开销可忽略。
这是一种 break-the-loop 工程策略,不是通用 MoE 理论。
7. 一个稳定性控制室应该监控什么
| 信号 | 统计 | 它能提示什么 | 它不能证明什么 |
|---|---|---|---|
| training / validation loss | raw、EMA、per-domain | 已经影响目标 | 根因 |
| attention logits | max、p99.9、per-head | Q/K growth、softmax saturation | FFN / optimizer state 正常 |
| attention entropy | per-head / layer | 过尖或坍缩 | 一定有错 |
| activation | max、RMS、percentile、outlier channel | overflow / quantization risk | gradient update 原因 |
| gradient | global norm、per-layer、nonfinite | backward 异常 | adaptive update 真正大小 |
| update | RMS、param/update ratio、spectrum | optimizer 施加的实际步长 | forward outlier 根因 |
| weight | RMS、spectral norm、singular entropy | 长期增长与 rank | 即刻 loss spike |
| quantization | saturation、underflow、SNR、scale history | dtype / scale 失败 | 高精度算子正常 |
| optimizer state | moment max/min、scale、staleness | second moment 低估 / overflow | model architecture 正常 |
| MoE | per-expert activation、load、drop、bias | router–outlier feedback | dense layer正常 |
| system | checksum、nonfinite rank、bitwise replay | hardware / kernel / collective 错误 | 数据 / 算法正确 |
控制动作也要分层:
- skip update;
- dynamic loss / tensor scaling;
- gradient / update clip;
- QK normalize / QK-Clip;
- activation clamp;
- lower LR / longer warmup;
- change accumulator;
- rollback + replay;
- quarantine batch;
- temporary routing decoupling。
8. DeepSeek 数值主线
2024 · DeepSeek LLM
- BF16 training;
- FP32 gradient accumulation;
- cross entropy 内按需 BF16 → FP32;
- AdamW;
- gradient norm clip
1.0; - 每 5 分钟异步 checkpoint,硬件失败最坏损失约 5 分钟。
意义:先把“低精度 compute、高精度关键路径、恢复能力”建立为工程基线。
2024 · DeepSeek-V2
- 继续 AdamW / BF16 主线;
- MLA 改变 Q/K 的物化方式;
- 这为 K2 选择 QK-Clip 而非直接 QK-Norm 提供结构背景,但不是 V2 自己的 QK-Clip 结论。
2024 · DeepSeek-V3
- 671B total / 37B active;
- 14.8T Token;
- fine-grained FP8 training;
- 1×128 activation / 128×128 weight scale;
- FP32 promotion interval 128;
- BF16 optimizer moments,FP32 master / accumulated gradients;
- 报告整个主训练无 irrecoverable loss spike / rollback。
注意:
- 这是作者技术报告结果;
- Appendix B.2 同时给出 block Dgrad 导致发散的反例;
- 因而“V3 稳定”来自精确角色分配,不是 FP8 自然稳定。
2026 · DeepSeek-V4
- majority modules 改 Muon;
- 特定向量 / norm / head 保留 AdamW;
- Q / KV RMSNorm 避免 logit explosion,不用 QK-Clip;
- hybrid NS + BF16 compute + FP32 local sum;
- 训练真实遇到 loss spikes;
- Anticipatory Routing + SwiGLU clamping;
- post-training 对 MoE experts + indexer QK 做 FP4 QAT;
- rollout / inference 使用 native FP4。
这条主线最值得学习的地方:
V3 的“成功 FP8”没有让 V4 停止做稳定性工程;模型、优化器、attention、MoE 与 QAT 每次变化都会重新打开新的失稳路径。
9. Kimi 数值主线
2025 · Moonlight / scalable Muon
- 从原始 Muon 补上 weight decay;
- matching update RMS;
- distributed Muon;
- 5.7T Token Moonlight;
- 作者报告相对 AdamW 约 2× compute efficiency。
2025 · Kimi K2
- 1.04T total / 32.6B active;
- 15.5T Token;
- MuonClip;
- QK-Clip threshold 100;
- per-head minimal intervention;
- 报告 zero observable loss spike。
2026 · Kimi K3
- 2.78T total / 104.2B active;
- 总训练 Token 未披露;
- Per-Head Muon;
- 保留 K2 weight clipping;
- Stable LatentMoE 加 RMSNorm;
- SiTU-GLU 两支有界,coordinate bound 100;
- most activation backward storage 用 block-wise FP8 + offload;
- distributed Muon 用 P2P 只取本地参数所需 shards;
- SFT → RL 全程 MXFP4 expert QAT;
- rollout / training 相同 quantization scheme。
不能外推:
- K3
2.5×family-level scaling efficiency 是架构、数据、训练联合变化; - 不是 Per-Head Muon 单项收益;
- 不是 MXFP4 throughput;
- 不是相对 DeepSeek 的公开对照。
10. K2 / K3 / V3 / V4 对照
| 系统 | 主要 optimizer | Attention 防线 | FFN / MoE 防线 | 低精度主线 | 报告边界 |
|---|---|---|---|---|---|
| DeepSeek-V3 | AdamW | attention 高精度 | fine-grained scale | FP8 pretraining | <0.25% loss error on two baselines;主 run 无不可恢复 spike |
| Kimi K2 | MuonClip | QK-Clip τ=100 |
— | 非本章主卖点 | 15.5T;zero observable spike |
| Kimi K3 | Per-Head Muon + K2 clip | per-head update + weight clip | RMSNorm + SiTU-GLU | FP8 activation cache;MXFP4 expert QAT | 总 Token 未公开;Per-Head 单项收益未公开 |
| DeepSeek-V4 | majority Muon + selected AdamW | Q/KV RMSNorm | Anticipatory Routing + SwiGLU clamp | FP4 QAT + FP8 compute/storage | 训练遇到 spikes;经验补丁理论仍开放 |
11. 四个互动实验的合同
Lab A · Format Microscope
输入:
- format:FP32 / FP16 / BF16 / E4M3 / E5M2 / MXFP4;
- real value;
- scale;
- block outlier;
- rounding mode。
输出:
- 最近 representable value;
- absolute / relative error;
- overflow / underflow / rounded;
- block 内有效精度。
教学边界:
- 是格式语义模拟,不是任一 GPU bit-exact implementation;
- MXFP4 强制显示 scale 和 block;
- NaN / subnormal 的厂商实现差异不做伪精确承诺。
Lab B · Mixed Precision Ledger
输入:
- parameter count;
- activation cache;
- compute dtype;
- master weights;
- gradient accumulation;
- optimizer moments;
- activation / gradient communication。
输出:
- 每种状态 GB;
- 总显存 / 通信相对基线;
- 风险列表;
- preset:BF16 baseline / classic FP16 / V3-like FP8 / K3 deployment-aware。
边界:
- 不含 allocator、fragmentation、checkpoint、parallel sharding;
- speed 不从 byte ratio 自动推出;
- V3-like / K3-like 是教学配置,不是完整生产复现。
Lab C · Optimizer Geometry
输入:
- 2×2 gradient / momentum matrix;
- AdamW / Muon / Per-Head Muon;
- momentum、weight decay、RMS matching;
- head scale imbalance。
输出:
- update matrix;
- approximate singular-value balance;
- per-head update RMS;
- state bytes;
- logical matrix partition。
边界:
- Newton–Schulz 可视化使用简化迭代;
- 不承诺等于生产 kernel;
- 2D teaching matrix 不代表真实 loss landscape。
Lab D · Stability Control Room
输入:
- attention logit growth;
- SwiGLU outlier;
- quantization scale granularity;
- optimizer mode;
- MoE routing feedback;
- 防线 toggles。
输出:
- softmax saturation risk;
- activation overflow risk;
- update risk;
- simulated timeline;
- “先看哪个监控量”的解释。
边界:
- 不合成伪“总稳定分”;
- 使用独立 gauges;
- K2 / K3 / V3 / V4 preset 只映射报告公开机制。
12. 关键论文链
| 年份 | 来源 | 本章作用 | 证据边界 |
|---|---|---|---|
| 2014 | Adam | adaptive moment baseline | 非 LLM 专用 |
| 2015 | Limited Numerical Precision | stochastic rounding 前史 | fixed-point / 小模型 |
| 2017 | Mixed Precision Training | FP32 master + loss scale + accumulate | FP16 时代 |
| 2017 | AdamW | decoupled weight decay | 视觉主实验 |
| 2017 | Integer-only QAT | fake quant / QAT 起点 | CNN 部署 |
| 2018 | Shampoo | tensor structured preconditioner | 扩展成本高 |
| 2018 | Adafactor | factored second moment + update clip | MT Transformer |
| 2019 | BFLOAT16 Study | range vs precision | 多领域但非现代万亿 LLM |
| 2020 | GLU Variants | SwiGLU 起点 | 未讨论 outlier |
| 2020 | QK Normalization | cosine Q/K + learned scale | 低资源 MT |
| 2021 | 8-bit Optimizers | block-wise state quantization | 到 1.5B LM |
| 2022 | DeepNet | depth / residual stability | 以 MT / 深度为主 |
| 2022 | Tensor Programs V | μP / μTransfer | 宽度主线 |
| 2022 | LLM.int8 | activation outlier | inference |
| 2022 | FP8 Formats | E4M3 / E5M2 标准语义 | scale heuristic 不在范围 |
| 2022 | GPTQ | weight-only PTQ | 不含 W/A/KV 全量 |
| 2022 | SmoothQuant | W8A8 outlier migration | inference |
| 2023 | ViT-22B | QK LayerNorm 与 50k logits | 视觉模型 |
| 2023 | Stable low-precision VLM | moment underestimation / SwitchBack | CLIP |
| 2023 | QLoRA | 4-bit frozen-base finetuning | 非 4-bit base training |
| 2023 | LLM-QAT | data-free W/A/KV QAT | LLaMA ≤30B |
| 2023 | Small-scale proxies | high-LR stability proxy | 不覆盖全部生产故障 |
| 2023 | MX Formats | E8M0 + 32-block + MXFP4 | 到 1.5B GPT training |
| 2023 | FP8-LM | end-to-end FP8 system | 作者硬件栈 |
| 2023 | Spike No More | small sublayer / large shortcut | 理论假设与中等模型 |
| 2024 | DeepSeek LLM | BF16 + FP32 accumulate | 67B |
| 2024 | Deconstructing Optimizers | Adam / Adafactor / Lion 对照 | ≤1.2B |
| 2024 | Scaling FP8 to trillion Token | late SwiGLU outlier | Llama2 / delayed scale |
| 2024 | DeepSeek-V3 | fine-grained FP8 production recipe | 作者报告 |
| 2024 | Muon blog | 原始 Muon 定义 | 技术博文 |
| 2025 | Muon is Scalable | decay + update RMS | 作者 scaling law |
| 2025 | Kimi K2 | MuonClip / QK-Clip | 作者报告 |
| 2025 | FP4 All the Way | fully quantized training | 7B / 200B Token |
| 2026 | PowLU | bounded activation 对照 | 新论文 |
| 2026 | DeepSeek-V4 | hybrid Muon + FP4 QAT + spike mitigation | 作者报告 |
| 2026 | Kimi K3 | Per-Head Muon + SiTU + MXFP4 QAT | 作者报告 |
13. 正文必须保留的公开未知项
- K3 总预训练 Token 数与完整 dtype placement 未公开;
- K3 Per-Head Muon 的单项 ablation 数字未公开;
- K3 MXFP4 QAT 相对高精度的完整 capability / latency 对照未公开;
- K2 zero spike 不是独立复现;
- DeepSeek-V3
<0.25%来自两组 baseline,不是所有 tensor policy 的保证; - DeepSeek-V4 Anticipatory Routing 的触发阈值、持续步数与全部 spike trace 未公开;
- DeepSeek-V4 FP4 QAT 的完整质量 ablation 与硬件端到端收益未公开;
- Muon 相对 AdamW 的最优性依赖模型族、参数分组、调参预算与 Token regime;
- 新 Muon 分支快速演化,首版不把未经大规模复现的变体写成继任者;
- 所有 teaching lab 都是机制模型,不是 bit-exact kernel 或真实训练预测器。
14. 一手来源定位摘要
Kimi
- Kimi K2 §2.1:MuonClip / QK-Clip 公式与 Figure 2;
- Kimi K2 Appendix D:QK-Clip 无质量损伤与 self-deactivation;
- Kimi K2 Appendix E:Muon logit explosion 假说;
- Kimi K3 §2.3.1:LatentMoE RMSNorm;
- Kimi K3 §2.3.2 / Appendix B:SiTU-GLU 与 bound 100;
- Kimi K3 §2.5:Per-Head Muon;
- Kimi K3 §3.3:Per-Head Muon + K2 weight clipping;
- Kimi K3 §4.1.4:MXFP4 expert QAT;
- Kimi K3 §5.2.2:block-wise FP8 activation cache、P2P Muon。
DeepSeek
- DeepSeek LLM §2.4:BF16、FP32 gradient accumulation、checkpoint;
- DeepSeek-V3 §3.3.1:mixed precision role map;
- DeepSeek-V3 §3.3.2:1×128 / 128×128 scale 与 FP32 promotion;
- DeepSeek-V3 §3.3.3:optimizer state、activation、communication;
- DeepSeek-V3 Appendix B.1:BF16 vs FP8;
- DeepSeek-V3 Appendix B.2:block Dgrad divergence;
- DeepSeek-V4 §2.4:Muon 与 hybrid Newton–Schulz;
- DeepSeek-V4 §3.4.1:distributed Muon / BF16 sync / FP32 sum;
- DeepSeek-V4 §4.2.3:Anticipatory Routing / SwiGLU clamp;
- DeepSeek-V4 §5.2.1:FP4 QAT / STE / native rollout。
通用论文
- Mixed Precision §3.1–3.3;
- BFLOAT16 §1–2 / Table 1;
- FP8 Formats §2–3 / Table 1;
- MX Formats §2 / Table 1 / Figure 1;
- Adam Algorithm 1;
- AdamW §2;
- Adafactor §3 / §5–6;
- μP / TP-V main theorem and transfer experiments;
- Muon Scalable §2.2–2.3 / §3;
- QK Norm §2;
- ViT-22B §2 / Appendix B;
- Small-scale proxies §3;
- Scaling FP8 §3–5;
- QAT Jacob §3;
- LLM-QAT §2–3。
15. 本地证据缓存说明
主干 PDF / text 已缓存到:
research/sources/numerics/
research/sources/training-systems/1710.03740.*
research/sources/scaling-laws/2401.02954.*
research/sources/moe/2412.19437.*
research/sources/reasoning/2507.20534.*
research/sources/long-context/2606.19348.*
research/sources/kimi-k3/k3_tech_report.*
缓存受 .gitignore 排除;公开仓库只提交 canonical URL、原创研究笔记与课程内容,
不重新分发论文全文。