Files
llm-atlas/research/NUMERICS_RESEARCH.md

1098 lines
37 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数值精度、优化器与训练稳定性研究账本
> 状态:第一轮证据框架
> 研究截止:2026-07-29
> 课程位置:专题 09「数值精度、优化器与训练稳定性」
> 锚点:Kimi K2 §2.1 / Appendix DE、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 至少包含:
```text
参数存储
→ 前向输入
→ 乘法
→ 部分和累加
→ 激活输出
→ 反向激活梯度
→ 权重梯度
→ 跨卡通信
→ optimizer moments
→ master weights
→ checkpoint
```
每个角色可以用不同格式。DeepSeek-V3 的核心 GEMM 输入用 FP8,但 embedding、output head、
attention、normalization、router 等保留 BF16 / FP32master weights、累计梯度保留 FP32
optimizer moments 可用 BF16。把这套“混合角色”写成“全 FP8”会直接误导。
### 误区二:位数减半,速度必然翻倍
位数变少可以降低:
- 每个值的存储字节;
- HBM 与互连搬运的字节;
- 某些硬件矩阵单元的面积和能耗;
- 特定芯片上的矩阵乘峰值成本。
但端到端速度还取决于:
- 芯片是否有原生指令;
- shape 是否匹配 Tensor Core
- quantize / dequantize / scale 的开销;
- 累加是否要频繁 promotion
- kernel 是否融合;
- 工作负载是 compute-bound 还是 memory / communication-bound
- 未量化算子占比。
因此页面只展示“理论数据量 / 指定硬件能力”,不把它冒充真实训练 speedup。
### 误区三:低精度只是“小数不够准”
低精度至少有三种不同失败:
1. **Overflow**:绝对值超过最大可表示范围,变成饱和、Inf 或 NaN;
2. **Underflow**:太小的值变成 subnormal 或 0
3. **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 三个字段
典型二进制浮点数可写成:
```text
(-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 2017mixed precision 三件套
Micikevicius et al. 2017/2018 §3
1. **FP32 master weights**
forward / backward 使用 FP16 copy;真正累积小 update 的 master copy 保留 FP32。
2. **Loss scaling**
放大 loss,使反向小梯度进入 FP16 可表示范围;更新前再 unscale。
3. **FP32 accumulation**
FP16 乘积在 FP32 输出中累加,再按需要写回较低精度。
关键边界:
- FP16 小于 `2^-24` 的值会变 0
- scale 太大又会 overflow
- overflow 后更新权重会产生不可逆 NaN,因此动态 loss scaling 会检测并跳过 step
- “乘法输入低精度、累加高精度”从一开始就是核心,而不是后来补丁。
### 3.2 2022FP8 是两个格式,不是一个
FP8 Formats for Deep Learning
- E4M34 exponent + 3 mantissa,推荐 weight / activation
- E5M25 exponent + 2 mantissa,推荐 gradient
- 输入需通过 scale 移入可表示区间;
- 输出通常以更高精度产生;
- nonlinear、normalization、optimizer update 等可保留高精度;
- 是否使用 per-tensor scale 由网络决定。
论文自己的限制:
- 格式论文不规定 scale heuristic
- 许多训练实验是模拟格式,而不是同一硬件上的端到端系统结果;
- FP8 并不取消混合精度,只把角色划分做得更细。
### 3.3 2023Microscaling 的关键不是 FP4,而是“局部共享范围”
Rouhani et al. 2023 §2
```text
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 elementE4M3 / E5M2
- MXFP6 elementE2M3 / E3M2
- MXFP4 elementE2M1
- MXINT8 elementINT8。
粒度变小的收益:
- 一个极端 outlier 只压缩同 block 的有效精度;
- sub-8-bit 才有机会覆盖复杂 tensor 分布。
代价:
- 每 32 个值多一个 scale
- scale axis 是语义的一部分;
- transpose 可能改变 scale axis,量化与 transpose 不可交换;
- conversion recipe 与 clipping 会影响结果;
- vector op 仍常用 BF16 / FP32。
### 3.4 DeepSeek-V3FP8 成功靠的是一整套角色分配
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 × 128` tile,即 per token / 128 channels
- weight`128 × 128` block
- 在线按当前 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 可 FP8combine 保留 BF16。
#### 证据边界
- 两个约 16B / 230B baseline、约 1T / 0.9T Token 对照中,相对 BF16 loss error < 0.25%
- Appendix B.2 报告:把 Dgrad activation gradient 改成 `128 × 128` block 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 20252026FP4 的三种完全不同路径
1. **FP4 All the Way**
研究从头 fully quantized trainingW/A/G 广泛 FP4,探索 NVFP4、rounding 和 quantization-noise threshold。
2. **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。
3. **Kimi K3 deployment-aware QAT**
从 SFT 开始贯穿 RLMoE expert weights 用 MXFP4activation compute 用 MXFP8
attention projection、latent MoE projection、shared expert、router 保留更高精度;
rollout 与 training 使用相同量化方案以减少 traininference mismatch。
不能把三者混成“2026 模型都用 FP4 预训练”。
---
## 4. 量化:对象、粒度、时机
### 4.1 仿射量化的最小模型
常见 uniform affine quantization
```text
q = clamp(round(x / scale) + zero_point)
x_hat = scale × (q - zero_point)
```
- symmetriczero 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
```text
m_t = μ m_(t-1) + g_t
θ_t = θ_(t-1) - η m_t
```
优点:
- 状态少;
- 更新含义直接;
- 通信 / sharding 容易。
LLM 常见困难:
- 不同参数坐标 / layer 的梯度尺度差异大;
- 高 LR 可用区间窄;
- 要靠参数化、归一化和精细 schedule 补偿。
### 5.2 Adam
```text
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 AdamWweight decay 不是 L2 penalty 的别名
在 SGD 中,L2 gradient 与 weight decay 可在适当缩放下等价;
在 Adam 中,若把 `λθ` 混入 gradient,它也会被 `v_t` 的自适应分母改变。
AdamW
```text
θ_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 公式:
```text
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
- NewtonSchulz 用矩阵乘迭代近似;
- 只适合 logically independent 2D matrix parameter
- embedding、norm、bias、head 等常由 AdamW 处理;
- 矩阵 shape 与 partition 会改变 update RMS。
### 5.8 “Muon is Scalable” 的两个关键补丁
Moonlight / Liu et al. 2025
1. **Weight decay**
vanilla Muon 长训时 weight / layer output RMS 增长,甚至越过 BF16 高精度范围;
加 AdamW-style decay 改善作者 over-train 实验。
2. **Consistent update RMS**
full-rank `A×B` matrix 的理论 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 K2MuonClip
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
```text
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 K3Per-Head Muon
K3 不对完整 Q / K / V projection momentum 统一正交化,而按 head block 分开:
- 避免大 scale head 主导共享矩阵 update
- 让不同 head update scale 更均衡;
- tall per-head block 的 NewtonSchulz 更便宜;
- 报告称提升大尺度训练稳定性。
训练 recipe 同时保留 K2 weight clipping,因此:
```text
Per-Head Muon = 更新几何
QK-Clip = 越界保护
```
不能把两者合成一个算法名,也不能说 Per-Head Muon 已取代 QK-Clip。
### 5.11 DeepSeek-V4Hybrid MuonAdamW
DeepSeek-V4
- majority modulesMuon
- embedding、prediction head、mHC static bias / gate、RMSNorm weightsAdamW
- Muon momentum `0.95`、weight decay `0.1`、update RMS scale `0.18`
- hybrid NewtonSchulz:前 8 次快速系数,后 2 次稳定到 singular value 1
- Q / KV 可直接 RMSNorm,因此不使用 K2 QK-Clip。
系统实现:
- dense matrix 通过受限 ZeRO group 与 knapsack 分配;
- MoE expert matrix 保持逻辑独立,不切断单矩阵;
- 相同 shape 合并做 batched NewtonSchulz
- 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 反馈
```text
weight norm / spectral norm ↑
→ ||Q||, ||K|| ↑
→ max(QKᵀ) ↑
→ softmax 近 one-hotentropy ↓
→ 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-3` LR 在更大 scale 保持稳定。
Small-scale proxies
- 用小模型 + 高 LR 复现 attention / output logit 不稳定;
- QK LayerNorm + z-loss 使作者设置跨三数量级 LR 可训练;
- 这是一种研究代理,不保证覆盖 data / system / MoE 全部故障。
### 6.3 Activation / SwiGLU 反馈
SwiGLU
```text
(xᵀw_up) × Swish(xᵀw_gate)
```
两支都大时,乘积可远大于单一 GeLU / ReLU。
防线谱系:
- Smooth-SwiGLUscale 转移,函数等价;
- hard clamp:限制 linear / gate 分支;
- K3 SiTU-GLU:两支分别用 smooth tanh cap
- PowLU:另一种 bounded / stable activation 研究。
K3 SiTU-GLU
```text
β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 低估后 18 steps
- gradient clipping 发生在 adaptive scaling 前,未必能限制真正 update;
- 其 AdamWAdafactor 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 公开报告:
```text
expert outlier
→ routing 更偏向某些 expert
→ 被选 expert 接收更多异常输入 / update
→ outlier 与 routing 互相强化
→ loss spike
```
Anticipatory Routing
- step `t` feature 用当前 `θ_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 | routeroutlier 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 momentsFP32 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.5Tzero observable spike |
| Kimi K3 | Per-Head Muon + K2 clip | per-head update + weight clip | RMSNorm + SiTU-GLU | FP8 activation cacheMXFP4 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
输入:
- formatFP32 / 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
- 总显存 / 通信相对基线;
- 风险列表;
- presetBF16 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。
边界:
- NewtonSchulz 可视化使用简化迭代;
- 不承诺等于生产 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. 正文必须保留的公开未知项
1. K3 总预训练 Token 数与完整 dtype placement 未公开;
2. K3 Per-Head Muon 的单项 ablation 数字未公开;
3. K3 MXFP4 QAT 相对高精度的完整 capability / latency 对照未公开;
4. K2 zero spike 不是独立复现;
5. DeepSeek-V3 `<0.25%` 来自两组 baseline,不是所有 tensor policy 的保证;
6. DeepSeek-V4 Anticipatory Routing 的触发阈值、持续步数与全部 spike trace 未公开;
7. DeepSeek-V4 FP4 QAT 的完整质量 ablation 与硬件端到端收益未公开;
8. Muon 相对 AdamW 的最优性依赖模型族、参数分组、调参预算与 Token regime
9. 新 Muon 分支快速演化,首版不把未经大规模复现的变体写成继任者;
10. 所有 teaching lab 都是机制模型,不是 bit-exact kernel 或真实训练预测器。
---
## 14. 一手来源定位摘要
### Kimi
- Kimi K2 §2.1MuonClip / QK-Clip 公式与 Figure 2
- Kimi K2 Appendix DQK-Clip 无质量损伤与 self-deactivation
- Kimi K2 Appendix EMuon logit explosion 假说;
- Kimi K3 §2.3.1LatentMoE RMSNorm
- Kimi K3 §2.3.2 / Appendix BSiTU-GLU 与 bound 100
- Kimi K3 §2.5Per-Head Muon
- Kimi K3 §3.3Per-Head Muon + K2 weight clipping
- Kimi K3 §4.1.4MXFP4 expert QAT
- Kimi K3 §5.2.2block-wise FP8 activation cache、P2P Muon。
### DeepSeek
- DeepSeek LLM §2.4BF16、FP32 gradient accumulation、checkpoint
- DeepSeek-V3 §3.3.1mixed precision role map
- DeepSeek-V3 §3.3.21×128 / 128×128 scale 与 FP32 promotion
- DeepSeek-V3 §3.3.3optimizer state、activation、communication
- DeepSeek-V3 Appendix B.1BF16 vs FP8
- DeepSeek-V3 Appendix B.2block Dgrad divergence
- DeepSeek-V4 §2.4Muon 与 hybrid NewtonSchulz
- DeepSeek-V4 §3.4.1distributed Muon / BF16 sync / FP32 sum
- DeepSeek-V4 §4.2.3Anticipatory Routing / SwiGLU clamp
- DeepSeek-V4 §5.2.1FP4 QAT / STE / native rollout。
### 通用论文
- Mixed Precision §3.13.3
- BFLOAT16 §12 / Table 1
- FP8 Formats §23 / Table 1
- MX Formats §2 / Table 1 / Figure 1
- Adam Algorithm 1
- AdamW §2
- Adafactor §3 / §56
- μP / TP-V main theorem and transfer experiments
- Muon Scalable §2.22.3 / §3
- QK Norm §2
- ViT-22B §2 / Appendix B
- Small-scale proxies §3
- Scaling FP8 §35
- QAT Jacob §3
- LLM-QAT §23。
---
## 15. 本地证据缓存说明
主干 PDF / text 已缓存到:
```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、原创研究笔记与课程内容,
不重新分发论文全文。