FP8、MXFP8和NVFP4都是降低Transformer訓練與推論資料精度的方法,但格式和Scaling粒度不同。FP8通常以E4M3或E5M2表示元素,搭配Per-tensor或Block Scaling;MXFP8在Blackwell上讓每32個連續值共享E8M0 Scale;NVFP4則以E2M1四位元元素、每16個值的E4M3 Local Scale,以及整個Tensor的FP32 Global Scale維持動態範圍。
位元下降不代表所有運算都用同一低精度。NVIDIA Transformer Engine目前主要讓Linear/GEMM使用低精度,Attention、Normalization、Softmax和部分Reduction仍保留BF16/FP16或FP32。選型要同時看GPU世代、Scale布局、轉置、Distributed Communication、模型收斂和完整Step Time。
重點快讀
- FP8 E4M3有較多Mantissa,常用於Forward;E5M2動態範圍更大。
- FP8 Delayed Scaling使用歷史Amax決定下一輪Scale。
- FP8 Current Scaling使用目前Tensor統計。
- MXFP8使用E4M3元素,每32值共享E8M0 Scale。
- NVFP4使用E2M1元素,每16值共享E4M3 Scale,另有FP32 Global Scale。
- MXFP8和NVFP4都需要Rowwise與Columnwise Representation及Scale Swizzle。
- FP8支援Hopper、Ada與Blackwell;MXFP8和NVFP4主要需要Blackwell。
- 部分敏感Layer和Operation仍應保留高精度。
FP8的兩種元素格式
| 格式 | 位元 | 特性 | 常見方向 |
|---|---|---|---|
| E4M3 | 1 Sign/4 Exponent/3 Mantissa | 較高精度、較小動態範圍 | Forward與Weight/Activation |
| E5M2 | 1 Sign/5 Exponent/2 Mantissa | 較大動態範圍、較低精度 | Backward Gradient |
Transformer Engine的Hybrid FP8 Recipe通常在Forward使用E4M3、Backward使用E5M2。元素格式只決定有限範圍,實際Tensor還需要Scaling Factor把高精度數值映射到FP8可表示區間。
Delayed Scaling和Current Scaling
| 方法 | Scale來源 | 優勢 | 代價 |
|---|---|---|---|
| Delayed | 過去Amax History | Scale穩定、計算可和當前GEMM分離 | 分布突變時反應較慢 |
| Current | 目前Tensor Amax | 立即適應數值分布 | 統計和同步可能進Critical Path |
| Block Scaling | 每個小Block的Amax | 更貼近Local Distribution | Scale Metadata與Layout更複雜 |
x_low_precision ≈ x_high_precision / scale
x_reconstructed ≈ x_low_precision × scalePer-tensor Scale容易實作,但少數Outlier可能占用整個格式範圍;Block Scaling以更細粒度追蹤局部數值,降低Outlier對其他元素的影響。
MXFP8如何運作?
MXFP8(Microscaling FP8)使用FP8 E4M3元素與E8M0 Block Scale。每32個連續值共享一個Scale:
x = x_E4M3 × s_E8M0_block
block_size = 32- E8M0只有Exponent,Scale是2的冪。
- 較細Block降低單一Outlier影響。
- Forward和Backward通常都可使用E4M3。
- Block Scale不需要跨節點同步Global Amax。
- 支援Quantized All-gather。
- 需要Blackwell SM100/SM103或更新支援。
MXFP8的Scale需要符合GEMM硬體布局。Transformer Engine會在通訊後、GEMM前進行Swizzling;未涉及通訊時可和Quantization融合。
NVFP4如何運作?
NVFP4以E2M1四位元元素表示,數值絕對值最高約6。為維持較大動態範圍,它使用Hierarchical Scaling:
x = x_E2M1
× s_block_E4M3
× s_global_FP32
block_size = 16- 每16個元素共享一個FP8 E4M3 Local Scale。
- 整個Tensor另有FP32 Global Scale。
- 比MXFP8更細的Block與更低位元元素。
- Scale保留Mantissa,可比E8M0更細。
- Training需要Blackwell SM100/SM103。
- Inference支援SM100以上Blackwell路徑。
四位元誤差更敏感,NVIDIA Recipe還搭配Stochastic Rounding、Random Hadamard Transform與部分Layer高精度策略。
FP8、MXFP8、NVFP4比較
| 面向 | FP8 | MXFP8 | NVFP4 |
|---|---|---|---|
| 元素格式 | E4M3/E5M2 | E4M3 | E2M1 |
| Scale粒度 | Per-tensor或Blockwise | 32元素 | 16元素+Global |
| Local Scale | FP32或Recipe定義 | E8M0 | E4M3 |
| 硬體 | Hopper/Ada/Blackwell | Blackwell | Blackwell |
| 精度風險 | 較低 | 中 | 最高,需要更多穩定策略 |
| 資料量 | 8-bit | 8-bit+Block Scale | 4-bit+兩層Scale |
為什麼需要Rowwise和Columnwise?
Forward GEMM和Backward中的轉置GEMM需要不同資料方向。低精度Tensor不能只把量化後資料直接轉置,因為Scale Block也必須沿新的連續方向重新計算。
- Rowwise Representation服務正常GEMM。
- Columnwise Representation服務Transpose方向。
- 兩者應從高精度來源分別量化。
- 直接轉置低精度資料會使用錯誤Scale分組。
- 分散式All-gather後可能需要重新Swizzle。
Stochastic Rounding
NVFP4的可表示值很少,Deterministic Rounding可能累積系統性偏差。Stochastic Rounding依數值和相鄰可表示值距離隨機選擇,讓期望值更接近原值。
- 降低長時間更新的Bias。
- 引入Randomness與重現性考量。
- 需要高品質RNG和分散式一致策略。
- 不保證單次誤差更小。
Random Hadamard Transform
Hadamard Transform可把少數Outlier的能量分散到更多維度,再進行FP4量化,降低單一Block被極端值支配。反向路徑則套用對應逆變換。
- 改善重尾Activation或Gradient分布。
- 增加Transform Kernel與資料流。
- 需要和GEMM、Communication融合。
- 完整收益依模型與硬體。
哪些Operation保留高精度?
| Operation | 常見精度 | 原因 |
|---|---|---|
| Linear/GEMM | FP8/MXFP8/NVFP4 | 主要吞吐收益 |
| Attention Softmax | BF16/FP16/FP32 | Exponent與Normalization敏感 |
| LayerNorm統計 | FP32部分運算 | 避免Mean/Variance誤差 |
| Loss與Reduction | BF16/FP32 | 累加和小Gradient |
| 敏感首尾Layer | 較高精度 | 避免品質退化 |
Distributed Training
- Per-tensor FP8 Scale可能需要同步Global Amax。
- MXFP8 Block Scale局部於32元素,不需全域同步Scale。
- NVFP4 Columnwise Quantized All-gather需共享Global Scale。
- Scale Metadata和Tensor必須使用一致Sharding。
- Communication前後可能需要Swizzle/Unswizzle。
- 量化通訊也要驗證收斂與Bandwidth。
硬體支援
| GPU世代 | FP8 | MXFP8 | NVFP4 |
|---|---|---|---|
| Ampere | 非原生主要路徑 | 否 | 否 |
| Ada | 支援部分FP8 | 否 | 否 |
| Hopper | 原生FP8 | 否 | 否 |
| Blackwell SM100/103 | 支援 | 支援 | 訓練與推論支援 |
| Blackwell SM120 | 依軟體矩陣 | 依軟體矩陣 | 主要推論支援 |
具體能力會隨Transformer Engine、CUDA、cuBLAS和TensorRT-LLM版本更新,導入時應讀當前Support Matrix。
驗收矩陣
- 建立BF16/FP16基線。
- 分別測FP8、MXFP8與NVFP4 Recipe。
- 記錄Loss、Gradient、Amax與Scale。
- 測短、中、長Training Run。
- 測模型能力與下游任務。
- 量測Tokens/s、HBM、Network與Power。
- 測Checkpoint保存與恢復。
- 跨GPU、Driver和Compiler回歸。
推論量化配方另有專文:W4A8和KV Cache量化怎麼選?。
常見問題
NVFP4就是一般FP4嗎?
不是只有E2M1元素。NVFP4還包含16元素Local Scale、Global FP32 Scale與訓練穩定策略。
MXFP8一定比FP8準嗎?
較細Block通常更貼近局部分布,但完整品質和速度依模型、Communication與Kernel,仍需實測。
FP4會讓所有Operation快兩倍嗎?
不會。只有硬體原生支援且瓶頸位於相容GEMM時才可能受益;Scale、Transform、通訊和高精度Operation仍占時間。
官方資料
低精度格式的真正差異,位於元素、Scale粒度、資料布局和硬體路徑。FP8降低位元,MXFP8用32值Microblock提高局部精度,NVFP4則用16值Hierarchical Scaling把四位元推進訓練與推論。

發表迴響