FP8 训练从尝鲜到主流:2026 年的真实成熟度
2022 年那篇 FP8 论文刚出来时,把低精度训练当作一个需要小心翼翼对待的工程风险。到了 2026 年,情况反过来了——不是你在考虑要不要用 FP8,而是你还在用 BF16 全程训练的话,很难解释为什么成本这么高。
三套配方,而不是一个「FP8」
FP8 有两个子格式:E4M3 尾数位多、精度高但动态范围窄,最大有限值 448;E5M2 指数位多、范围宽,最大有限值 57344。Transformer Engine 里的 HYBRID 配方是前向用 E4M3、反向用 E5M2。但这不是唯一正确答案——DeepSeek V3 公开发布的训练配方是全程 E4M3。两种选择都能跑出稳定训练,差别在于梯度的动态范围是否真的需要那么宽。
缩放策略的选择比格式选择影响更大。当前缩放(current scaling)每个张量读两次,适配实时数据;延迟缩放(delayed scaling)只读一次,但依赖历史 amax 统计,遇到离群值容易被历史污染。工程上的普遍建议是:如果稳定性优先,先用当前缩放,不要急着换。
再往上一层是 MXFP8,也就是 OCP 的微缩放格式。张量按 32 个元素切块,每块一个 UE8M0 类型的缩放因子——全是指数位、没有尾数,表示 2 的整数次幂,范围覆盖 2 的负 127 次方到 2 的正 127 次方。这一点在硬件上很关键:缩放因子是 2 的幂,解码时只需要移位,不需要完整的浮点乘法和规格化,直接缩短了处理器的关键路径。块级粒度相比每张量缩放,能把量化误差压低相当可观的比例。
| 维度 | BF16 混合精度 | FP8 保守配方 | FP8 + COAT 类激进配方 |
|---|---|---|---|
| 计算权重 | 2 字节 | 1 字节 | 1 字节 |
| 主权重 | 4 字节 FP32 | 4 字节 FP32 | 2 字节 |
| 梯度 | 4 字节 | 4 字节 | 1 字节 |
| Adam 状态 | 8 字节 | 8 字节 | 1 至 2 字节 |
| 每参数合计 | 约 18 字节 | 约 17 字节 | 约 6 至 8 字节 |
这张表容易被误读。FP8 保守配方看起来只省了 1 字节,这不是 FP8 没价值,而是参数量状态在总训练内存里本来就不占大头——激活值、梯度通信缓冲、框架开销构成了剩下的部分。COAT 这类把优化器状态也量化下去的研究,纸面上有 2 到 3 倍的降幅,但实测端到端内存只降了约 1.5 倍,原因就在这里。
硬件代际决定了配方能走多远
Ampere 及更早的架构没有 FP8 Tensor Core,Transformer Engine 在那一代只提供 FP16 和 BF16 优化。Hopper 是 FP8 的起点。Blackwell 把 MXFP8 和 NVFP4 做成了 Tensor Core 原生数据类型,Transformer Engine 的 README 明确列出对 MXFP8、NVFP4 训练的支持;Transformer Engine 2.19 版本在 2026 年 9 月加入了对 Rubin 的支持。
AMD 那边,MI450 系列在 FP8 下峰值 20 PFlops、FP4 下 40 PFlops,FP8 训练已经是硬件默认能力而非附加特性。
一个容易被忽略的细节:Blackwell 上使用 MXFP8 时,Transformer Engine 会额外维护一份转置的量化权重副本以加速反向传播。这是一份实打实的额外开销,而且是格式特定行为,不是 FP8 训练的普遍属性。
成熟度体现在基准与生产两处
MLPerf 预训练提交里的证据比较直接:Llama 3.1 8B 预训练基准中,对注意力 BMM 的输入(前向和后向都算)使用 FP8,相比对应的 BF16 方案在注意力核上实现了明显更好的性能,同时满足了基准的精度要求,注意力部分约 1.3 倍,端到端约 5% 加速。这份提交走的还是每张量当前缩放。
生产侧的公开案例更多。DeepSeek V3 是 671B 总参数、约 37B 激活的 MoE,原生 FP8 训练并且只发布 FP8 权重;Qwen 3.5 的基础设施博客同样描述了原生 FP8 训练管线。需要注意一个术语陷阱:Hugging Face 上的 FP8 检查点,包括 Qwen 自己发布的那些,绝大多数是训练后量化产物,和原生 FP8 训练是两回事。模型卡上写「FP8 权重」不代表它是 FP8 训练出来的。
硬件侧的收益区间也有公开数据:在 H100 上相比 BF16 混合精度,FP8 训练通常快 35% 到 40%;NVIDIA 的 COAT 框架报告过约 1.43 倍的端到端加速。
剩下的坑
需要警惕三类问题。第一,精度悬崖真实存在——有些架构对 FP8 敏感程度明显更高,换格式前必须跑基线对比。NVIDIA 公布的验证曲线里 MXFP8 和当前缩放 FP8 在 Nemotron 模型上贴合 BF16,但那不保证你的模型也贴合。
第二,loss spike 频率上升。应对手段是更积极的梯度裁剪、更长的学习率预热、更频繁的检查点。FP8 梯度比 BF16 更容易溢出,这不是可以忽略的波动。
第三,激活离群值极端的模型,延迟缩放会被历史统计带偏,此时应当直接上块级缩放,而不是在两种延迟策略之间反复调参。
展望
2026 年剩下的变量主要在两处:一是块级缩放会不会从 Blackwell 的可选路径变成跨厂商默认——MX 系列已经是 OCP 标准,AMD、Intel、NVIDIA、Meta 都在里面;二是 4 位格式从推理侧反攻训练侧的速度有多快。一旦 NVFP4 级配方在前沿规模预训练中稳定下来,FP8 就不会再是讨论的终点,而是所有新项目的起点。真正需要判断的已经不是用不用 FP8,而是你的模型对哪一档精度敏感、敏感在训练的哪个阶段。