4.5 FP8 与 NVFP4/MXFP4:低比特浮点量化
从 Hopper 原生 FP8(E4M3/E5M2)到 Blackwell 的 NVFP4 与 MXFP4:浮点量化的格式设计、硬件加速与 vLLM 支持现状
前面几节讲的都是整数量化(INT8/INT4)。但从 Hopper(H100)开始,工业界的重心明显转移到了低比特浮点格式:FP8 是 Hopper 的原生语言,NVFP4/MXFP4 是 Blackwell 的原生语言。为什么要从整数转向浮点?因为浮点格式的动态范围天然更大,不需要像 INT 量化那样精心设计 per-group 粒度也能保住精度——量化变简单了,精度还更稳了。
这一节讲清楚三件事:FP8 的两种格式(E4M3/E5M2)和 W8A8 使用方式;NVFP4 的两级缩放设计(它为什么比 MXFP4 更准);以及它们在 vLLM 里的工程现状——截至 v0.26.0,NVFP4/MXFP4 在 Blackwell 上已经是第一方支持。
📑 目录
- 1. 为什么从 INT 转向浮点
- 2. FP8 格式:E4M3 与 E5M2
- 3. W8A8 FP8 的使用方式:静态与动态 scale
- 4. 硬件视角:FP8 的算力账本
- 5. Blackwell 与 4-bit 浮点:FP4/MXFP4/NVFP4
- 6. NVFP4 深度:两级缩放设计
- 7. vLLM 支持现状:从 FP8 到 NVFP4/MXFP4
- 总结
- 自我检验清单
- 参考资料
1. 为什么从 INT 转向浮点
INT8 有 256 个格子,均匀分布在 ;FP8 同样 8 位,但它是浮点——指数位带来的是不均匀的格子分布:数值大时格子粗,数值小时格子细,自动贴合”数值小、需要更精细表示”的常见分布。
这带来两个直接收益:
- 动态范围大:FP8(E4M3)最大可表示约 448,最小非零约 ,覆盖 4 个数量级以上;INT8 要表示同样范围必须牺牲格子密度
- 量化变简单:很多模型直接 RTN(四舍五入)到 FP8 就足够准,不需要 SmoothQuant 的平滑变换、不需要 GPTQ 的逐层重建——scale 和格式本身就在做”自适应”
📌 关键点:INT 量化是”把连续值硬塞进均匀格子”,浮点量化是”用更科学的数字格式表示”——所以 FP8 时代量化的重心从”算法”转向了”格式与硬件”。这也是 NVIDIA 从 Hopper 起在硬件层全面拥抱 FP8 的根本原因。
2. FP8 格式:E4M3 与 E5M2
FP8 是 IEEE 754 的 8 位变体(2022 年 OCP 8-bit Floating Point 规范定义),两种子格式:
| 格式 | 结构(符号/指数/尾数) | 最大表示 | 精度特点 |
|---|---|---|---|
| E4M3 | 1 + 4 + 3 | 448 | 精度高(3 位尾数),范围小 |
| E5M2 | 1 + 5 + 2 | 57344 | 范围大(5 位指数),精度低 |
设计意图非常明确:
- E4M3 用于权重和激活(W8A8 GEMM 的主格式):权重/激活的数值范围通常不大,但精度重要
- E5M2 用于梯度(训练场景):梯度变化范围大、可能冲出 E4M3 的范围,牺牲一点精度换范围
- 推理场景基本只用 E4M3;E5M2 在 KV Cache(
fp8_e5m2)和训练中见到
⚠️ 注意:E4M3 的最大值只有 448——如果激活里有值超过 448,会被 clamp(截断)到 448。所以 FP8 依然需要 scale:把一个张量整体除以合适的 scale,让数值落进 E4M3 的舒适区。FP8 不是”免校准”,而是”校准变得简单”。
3. W8A8 FP8 的使用方式:静态与动态 scale
FP8 W8A8 的 scale 策略(与 INT8 W8A8 同构,但重要性不同):
3.1 权重:静态 per-channel(或 per-tensor)
权重是静态的,量化时(离线)统计一次 range 就固定 scale,存进模型。默认 per-channel(每输出通道一个 scale),张量核计算时 scale 融入累加器,零额外开销。也可以在 128×128 块内做更细的 block-wise scale(FP8 block 方案),进一步压低误差。
3.2 激活:per-token 动态(主流)或静态
激活是动态的,两种做法:
- 动态 per-token:每个 Token 单独算 scale(运行时统计该 token 的最大值),一行代码、无需校准集,精度通常已足够——这是 llm-compressor FP8 默认、也最常见的配置
- 静态 per-tensor:离线用校准集统计一个固定 scale,运行时快一点但精度略低,且依赖校准集质量
3.3 一句话总结
FP8 W8A8 的默认配方 = per-channel 静态权重 scale + per-token 动态激活 scale,不需要校准集(用 RTN 即可),精度在绝大多数模型上接近 FP16。这比 SmoothQuant 时代的 INT8 方案(需要校准、需要平滑)简单得多——格式的进步直接简化了算法。
4. 硬件视角:FP8 的算力账本
FP8 在 Hopper 上是原生张量核指令,吞吐是 FP16 的两倍:
| 硬件 | FP16 稠密吞吐 | FP8 稠密吞吐 | 比值 |
|---|---|---|---|
| H100 SXM | 约 990 TFLOPS | 约 1980 TFLOPS | 2x |
| B200 | 约 2.25 PFLOPS | 约 4.5 PFLOPS | 2x |
| GB300(Blackwell Ultra) | - | FP8 约 5 PFLOPS | - |
- GEMM 直接翻倍:Prefill(Compute Bound)的收益最直接——同一个 GEMM,FP8 张量核一半时间跑完
- Decode 同时受益:权重字节数减半 → 带宽压力减半 → Memory Bound 的 Decode 吞吐接近翻倍
- FP8 是”算力 + 带宽”双收益,这也是为什么 vLLM 上 FP8 是”无脑可开”的第一档优化(
--quantization fp8)
💡 提示:FP8 在 Hopper 上还有一个隐藏福利——它是 NVIDIA Transformer Engine 的默认路径,训练与推理共用同一套格式与内核优化,生态深度远超 INT8。
5. Blackwell 与 4-bit 浮点:FP4/MXFP4/NVFP4
Blackwell(SM100/SM110,B200/B300)张量核原生支持 FP4 运算(吞吐是 FP8 的 2 倍)。但”4 位浮点”有几种不同形态:
| 格式 | 结构 | scale 方案 | 硬件加速 |
|---|---|---|---|
| FP4(E2M1) | 1+2+1 | 软件逐张量 scale | Blackwell 有,无硬件 scale 融合 |
| MXFP4 | 1+2+1 | 每 32 元素共享 1 个 E8M0(2 的幂)scale | 有(block scale 硬件融合) |
| NVFP4 | 1+2+1 | 每 16 元素共享 1 个 E4M3(FP8)scale + 逐张量 FP32 二级 scale | 有(微块 scale 硬件融合) |
三者底层数据都是 E2M1(1 符号 + 2 指数 + 1 尾数),差别全在 scale 的设计上:
- FP4 裸用:无共享 scale,精度最差,基本只有实验价值
- MXFP4:来自 OCP(Open Compute Project)的 Microscaling Formats 规范(E8M0 scale,2 的幂),块大小 32,是跨厂商的开放标准(AMD、Intel 同样支持)
- NVFP4:NVIDIA 自家的 Blackwell 原生格式,块大小减到 16,scale 用 E4M3 而非 E8M0——更精细
6. NVFP4 深度:两级缩放设计
6.1 两级 scale 为什么更好
NVFP4 的官方定位是”在 4-bit 下保住 FP8 水平的精度”。它靠两个设计:
-
更小的块(16 元素):MXFP4 的块是 32 个元素共享一个 scale,遇到块内数值跨度大时(部分值大、部分值小),32 个值被一个 scale 约束,量化误差大。NVFP4 把块减半到 16,更贴合局部的动态范围——数值的”局部性”更强,误差显著下降。
-
E4M3 scale(非 2 的幂):E8M0 的 scale 只能是 2 的幂( 到 共 32 档),是一种”阶梯”;E4M3 有 3 位尾数,scale 可以有小数部分——对数据分布贴合得更精细。代价是 scale 本身需要 1 字节/16 元素,存储略增。
-
逐张量 FP32 二级 scale:E4M3 scale 的可表示范围有限(最大 448 附近),如果整个张量的数值整体偏移,一级 scale 可能越界——用一个逐张量的 FP32 乘子先做整体归一化,保证所有微块的 E4M3 scale 都落在舒适区。
6.2 效果数据
- 显存:模型权重内存约为 FP16 的 1/3.5(每个值 4-bit + 每 16 值 1 字节 scale ≈ 4.5 bit/值),约为 FP8 的 1/1.8
- 精度:NVIDIA 官方在 DeepSeek-R1-0528(原 FP8 模型)上验证,PTQ 到 NVFP4 后主要任务退化 ≤1%,AIME 2024 甚至反升 2%
- 算力:GB300 的 NVFP4 稠密吞吐最高约 15 PFLOPS,是 FP8 的 3 倍;MLPerf 训练上 GB300 用 NVFP4 跑 Llama-3.1-405B 预训练比 GB200 用 FP8 快 1.9x
- 生产形态:Blackwell 上 NVFP4 的 W4A16/W4A8 推理已是主流部署形态,各家(vLLM、TensorRT-LLM)第一方支持
📌 关键点:NVFP4 与 MXFP4 的竞争本质是”封闭 vs 开放”与”精细 vs 通用”之争。NVIDIA 在自家生态推 NVFP4(块更小、更准),MXFP4 是跨厂商开放标准(兼容性更好)。对 vLLM 用户来说两者都能用,Blackwell 上 NVFP4 精度上限更高,MXFP4 生态更广。
7. vLLM 支持现状:从 FP8 到 NVFP4/MXFP4
截至 vLLM v0.26.0(2026-07),量化方法的支持矩阵:
| 量化方法 | 启动参数 | 硬件要求 | 说明 |
|---|---|---|---|
| FP8(W8A8) | --quantization fp8 | Ada / Hopper / Blackwell / AMD MI300+ | llm-compressor 产出,生态最成熟 |
| NVFP4 | --quantization modelopt_fp4 | Blackwell(SM100) | NVIDIA Model Optimizer 产出 |
| MXFP4 | --quantization mxfp4 | Blackwell | OCP 开放标准,CuTe-DSL 内核 |
| MXFP8 | --quantization mxfp8 | Blackwell | 32 元素 block scale 的 FP8 |
| FP8 KV Cache | --kv-cache-dtype fp8 | Ada / Hopper / Blackwell | 见 4.4 节 |
v0.26.0 与量化直接相关的更新:
- NVFP4 生态补全:
nvfp4_per_token在线 MoE 量化(专家权重运行时量化,减少显存搬运);FP4 MoE 权重重打包的峰值内存受限优化 - MXFP4 内核:CuTe-DSL 版 FlashInfer MXFP4 GEMM,效率对齐 NVFP4
- Humming 系列:compressed-tensors 新增 w[2-7]a[4,8] 的 weight-only 支持(灵活位宽的 INT 量化,覆盖 LLM Compressor 生态)
- Inkling 模型族(新模型)出厂即带 ModelOpt NVFP4 量化支持
工程要点:
- NVFP4/MXFP4 都要 Blackwell GPU,老卡上加载会报 capability 错误
- 模型产出工具链:NVFP4 用 NVIDIA Model Optimizer(
modelopt_fp4),MXFP4 用 llm-compressor(compressed-tensors 格式),两者产出后 vLLM 自动识别 - 没有 Blackwell 又想省显存:FP8 或 INT4(GPTQ/AWQ)依然是通用选择
📝 总结
- 浮点量化的优势:动态范围大、格子分布贴合自然分布,RTN 直出即可用,算法复杂度远低于 INT 量化
- FP8 两种格式:E4M3(权重/激活,精度优先)、E5M2(梯度/范围优先);推理默认 E4M3
- FP8 默认配方:per-channel 静态权重 scale + per-token 动态激活 scale,无需校准集
- 硬件账本:FP8 = FP16 的 2 倍吞吐 + 权重带宽减半,Hopper 起的原生能力
- 4-bit 浮点三兄弟:FP4(裸用不行)、MXFP4(OCP 开放标准,32 块 + E8M0 scale)、NVFP4(NVIDIA 原生,16 块 + E4M3 scale + FP32 二级 scale)
- NVFP4 效果:显存约为 FP16 的 1/3.5,精度退化 ≤1%,GB300 吞吐为 FP8 的 3 倍
- vLLM 现状:FP8 全硬件通用;NVFP4(modelopt_fp4)/MXFP4 需 Blackwell,已是一等公民
🎯 自我检验清单
- E4M3 和 E5M2 各自的适用场景?为什么推理用 E4M3?
- FP8 为什么还需要 scale?E4M3 的最大值是多少?
- “动态 per-token 激活 scale”为什么不需要校准集?
- FP8 相比 INT8 量化为什么”算法变简单”?
- NVFP4 相对 MXFP4 的两个改进是什么?各自解决什么问题?
- NVFP4 的二级 scale 解决什么问题?
- vLLM 里启用 NVFP4 需要什么硬件?
📚 参考资料
- NVIDIA Blog:Introducing NVFP4 for Efficient and Accurate Low-Precision Inference(https://developer.nvidia.com/blog/introducing-nvfp4-for-efficient-and-accurate-low-precision-inference/)
- NVIDIA Blog:3 Ways NVFP4 Accelerates AI Training and Inference(https://developer.nvidia.com/blog/3-ways-nvfp4-accelerates-ai-training-and-inference/)
- OCP Microscaling Formats Specification(https://www.opencompute.org/documents/ocp-microscaling-formats-mx-v1-0-spec-final-pdf)
- vLLM 文档:LLM Compressor FP8 W8A8(https://docs.vllm.ai/en/latest/features/quantization/llm_compressor/fp8/)
- vLLM 文档:NVIDIA Model Optimizer(https://docs.vllm.ai/en/latest/features/quantization/modelopt/)