A Practical Guide to Deploying NVFP4 for Efficient Inference on Blackwell GPUs
A Practical Guide to Deploying NVFP4 for Efficient Inference on Blackwell GPUs
薛博阳, NVIDIA 加速计算专家团队 高级工程师
2025/11/07
目录
1. NVFP4 简介 (NVFP4 Introduction)
1.1. NVFP4 之前的技术状况 (What we have before NVFP4)
在提出 NVFP4 之前,我们通常将模型量化到 FP8 以加速推理。这其中涉及多种 FP8 的布局和粒度:
* 布局格式: E4M3 (通常用于推理) vs. E5M2 (通常用于训练)。
* 粒度: 按张量 (Per tensor) vs. 按通道 (per channel) vs. 按词元 (per token) vs. 按块 (per block)。
* 量化方式: 静态量化 (Static quantization) vs. 动态量化 (dynamic quantization)。
1.2. 从 FP8 到 FP4 (From FP8 to FP4)
为了进一步减少内存使用并加速推理,业界进行了大量工作来研究如何从 8-bit 降至 4-bit 同时保持准确率。
- 然而,简单的 FP4 实现方案通常会导致显著的准确率下降。
- 对于 FP8,细粒度的缩放因子是可选的;但对于 FP4,这成为必需。
- 从 FP8 迁移到 FP4 需要进行以下调整:
- 数据格式从 FP8 变为 FP4。
- 浮点数布局从 E4M3/E5M2 变为 E2M1。
- 缩放粒度从“按张量”(per tensor) 变为更细的粒度,“按张量”已不再适用。
- 量化方式从静态 (Static) 变为动态 (dynamic)。
下表比较了不同数据类型在 HGX-B200 和 H200-SXM* 上的性能差异,显示了 FP4 相对于 FP8 的显著性能提升潜力。
*注:技术讨论和参考,性能可能因产品组合而异。
1.3. 量化方案对比 (Quantization comparison)
下表详细对比了 INT8, FP8, MXFP8, INT4, 以及 NVFP4 这几种量化方案在表示方式、权重/激活量化粒度、量化方式和缩放因子数据类型等方面的差异。
1.4. 什么是 NVFP4?
- NVFP4 是 NVIDIA Blackwell GPU 架构引入的一种创新的 4-bit 浮点格式。
-
NVFP4 的结构类似于大多数 4-bit 浮点格式 (E2M1),包含:
- 1 个符号位 (sign bit)
- 2 个指数位 (exponent bits)
- 1 个尾数位 (mantissa bit)
-
该格式的数值范围大约在 -6 到 6 之间。例如,范围内的值可以包括 0.0, 0.5, 1.0, 1.5, 2, 3, 4, 6 (以及对应的负值)。
- 为了解决精度问题,NVFP4 引入了两项架构创新:
- 高精度缩放编码 (High-precision scale encoding)
- 两级微块缩放策略 (A two-level micro-block scaling strategy)
NVFP4 的两级缩放机制
-
两级缩放 (Two level scaling):
- 第一级: 对每个包含 16 个值的微块 (micro-block) 使用一个细粒度的 E4M3 缩放因子 (可以是动态或静态的)。
- 第二级: 对整个张量 (per tensor) 应用一个 FP32 标量 (静态的)。
-
NVFP4 存储一个 4-bit 值,外加每个张量一个 FP32 的二级缩放因子和每16个值一个 FP8 的一级缩放因子的开销。与 FP8 相比,这大约能将模型内存占用减少 1.8 倍。
1.5. NVFP4 量化工作流 (The workflow of NVFP4 quantization)
基准:块级 FP8 (Block-wise FP8)
作为对比,传统的块级 FP8 量化流程如下:对一个 FP16 权重张量 W,每 128 x 128 个元素计算一次局部最大值 local_max,然后用这个最大值计算出缩放因子,最后将权重 W 量化为 FP8。
块级 FP8 vs. NVFP4
与单级缩放的 FP8 不同,NVFP4 采用两级缩放策略以保持精度:
- 权重分块与一级量化: 将 FP16 权重张量
W分成每 16 个元素一组。 - 一级缩放 (局部): 对每个 16 元素的块计算局部最大值
local_max,然后除以一个常数 (6) 得到一级缩放因子S(FP32)。使用这个缩放因子将权重块量化为W_FP4。 - 二级缩放 (全局): 计算所有一级缩放因子
S的全局最大值global_max。 - 二级量化: 用全局最大值除以一个常数 (448) 得到二级缩放因子,并用它将一级缩放因子
S量化为S_FP8。
NVFP4 校准 (NVFP4 calibration)
下图展示了 NVFP4 量化流程与校准代码片段的对应关系,其中 SF1 和 SF2 分别对应二级和一级缩放因子的计算。
如何获取权重缩放因子 (How do get scaling factors - weights)
具体的缩放因子计算逻辑可以在 TensorRT-Model-Optimizer 的代码中找到。下图高亮了计算一级 (SF2) 和二级 (SF1) 缩放因子的核心代码。
1.6. NVFP4 的量化与反量化 (Quantization and Dequantization of NVFP4)
在推理过程中,输入激活 X 和权重 W 都被量化。
- 逻辑流程:
- 高精度权重
Whp被量化 (Quantization, Q) 为Wfp4。 - 高精度激活
Xhp被动态量化 (Dynamic Quantization, DynQ) 为Xfp4,同时生成缩放因子SFfp8。 Wfp4和Xfp4分别被反量化 (Dequantization, DQ) 回高精度。SFfp8也被反量化为SFhp,并应用于反量化后的激活。- 最后,恢复出的高精度权重和激活送入通用矩阵乘法 (GEMM) 单元进行计算。
- 高精度权重
- 融合操作 (Fusion operation):
在实际硬件执行中,上述多个分离的步骤(动态量化、反量化、GEMM)会被融合成一个单一的高效操作。GEMM 单元可以直接使用量化后的Xfp4,Wfp4和缩放因子SFfp8,在内部完成计算,从而极大地提升了计算效率和内存带宽利用率。
1.7. 为何选择 NVFP4
此部分比较了三种不同的4位浮点格式:FP4 (E2M1)、MXFP4 和 NVFP4。
格式对比:
-
FP4 (E2M1):
- 格式结构: 4位(1位符号位,2位指数位,1位尾数位)外加一个软件缩放因子。
- 硬件加速扩展: 不支持。
- 精度: 与FP8相比,存在明显的精度下降风险。
-
MXFP4:
- 格式结构: 4位(1位符号位,2位指数位,1位尾数位)外加一个共享的、2的幂次的缩放因子,作用于32个值的块。
- 硬件加速扩展: 支持。
- 内存: 约占FP16的25%。
- 精度: 与FP8相比,存在明显的精度下降风险。
-
NVFP4:
- 格式结构: 4位(1位符号位,2位指数位,1位尾数位)外加一个共享的FP8缩放因子,作用于16个值的块。
- 硬件加速扩展: 支持。
- 精度: 与FP8相比,精度下降的风险更低,尤其对于大型模型。
2. 不同的 NVFP4 配置方案 (Different NVFP4 Recipes)
2.1. 配置方案概览
下表展示了针对不同模型和模块的 NVFP4 配置方案。
-
NVFP4-full (用于 DeepSpeed):
- QKV GEMM: NVFP4
- Attention 和 KV Cache: FP8
- Proj GEMM: NVFP4
- MoE: NVFP4
- 应用于: Qwen3
-
NVFP4-MoE:
- QKV GEMM: BF16
- Attention 和 KV Cache: FP8
- Proj GEMM: BF16
- MoE: NVFP4
- 应用于: DeepSeek-R1
-
NVFP4-MoE+Proj (用于 DeepSpeed):
- QKV GEMM: BF16
- Attention 和 KV Cache: FP8
- Proj GEMM: NVFP4
- MoE: NVFP4
- 应用于: DeepSeek-R1, DeepSeek-R1-0528
2.2. 模型精度评估
DeepSeek-R1-0528 评估精度
下图展示了 DeepSeek-R1-0528 在不同配置下的评估精度得分。结果表明,FP4 (NVFP4-MoE 和 NVFP4-MoE+Proj) 与 FP8 (AA Ref) 的精度相当。
数据来源:
- https://huggingface.co/nvidia/DeepSeek-R1-0528-FP4
- https://huggingface.co/nvidia/DeepSeek-R1-0528-FP4-v2
Qwen3-235B 评估精度
下图展示了 Qwen3-235B 的评估精度得分,比较了 FP8 (A22B AA Ref) 和 NVFP4 (NVFP4-full) 的表现。结果显示两者精度非常接近。
* 注:由 nv-eval 评估。
2.3. 架构图
NVFP4-MoE (DeepSeek) 架构图
下图展示了在 DeepSeek 模型中应用 NVFP4-MoE 配置方案的详细计算流程。
Full NVFP4 (Qwen3) 架构图
Qwen3 - Attention 模块
下图展示了在 Qwen3 的 Attention 模块中应用 Full NVFP4 配置方案的数据流。输入张量 (Transformer Input) 首先被量化为 NVFP4,用于 QKV GEMM。KV Cache 使用 FP8 格式。最后的 Proj GEMM 也使用 NVFP4 权重和输入。
Qwen3 - MoE 模块
下图展示了在 Qwen3 的 MoE (Mixture of Experts) 模块中应用 Full NVFP4 配置方案的数据流。输入被量化为 NVFP4 并传递给专家网络中的 FC1 和 FC2 GEMM。
3. 如何将模型量化为 NVFP4 并进行评估 (How to Quantize and Evaluate)
3.1. DeepSeek 量化步骤
- 我们可以使用 TensorRT-Model-Optimizer 将模型量化到 NVFP4。
-
对于 DeepSeek,由于模型规模较大,目前量化模型需要约 1200 GBs 的显存。
- 例如,需要 8xH200 或 12xH20。
- 其他 GPU 也可以工作,但需要不同数量的 GPU,具体取决于显存大小。
-
此文档 https://github.com/NVIDIA/TensorRT-Model-Optimizer/tree/main/examples/deepseek 展示了将 DeepSeek 模型从 FP8 量化到 NVFP4 的步骤。
- 基于 http://nvcr.io/nvidia/tensorrt-llm/release:1.0.0rc6。
* 仅供技术讨论和参考,性能可能因产品组合不同而异。
具体命令:
克隆仓库并设置环境变量:
# 克隆 TensorRT-Model-Optimizer 仓库
git clone https://github.com/NVIDIA/TensorRT-Model-Optimizer.git
cd TensorRT-Model-Optimizer/examples/deepseek/
# 设置运行示例所需的变量
export HF_FP8_CKPT={path_to_downloaded_hf_checkpoint}
export DS_CKPT={path_to_save_converted_checkpoint}
export FP4_QUANT_PATH={path_to_save_quantization_results}
export HF_FP4_PATH={path_to_save_the_final_FP4_checkpoint}
# 从 Huggingface 下载 FP8 检查点
huggingface-cli download deepseek-ai/DeepSeek-R1 --local-dir $HF_FP8_CKPT
# 克隆 DeepSeek-V3 (R1 的基础模型) 仓库用于 FP8 推理
git clone https://github.com/deepseek-ai/DeepSeek-V3.git && cd DeepSeek-V3 && git checkout 1398880
# 将 HF 检查点转换为 DeepSeek 的特定格式
python inference/convert.py --hf-ckpt-path $HF_FP8_CKPT --save-path $DS_CKPT --n-experts 256 --model-parallel 8
cd ..
运行校准脚本并量化检查点:
# 为基础版运行校准脚本 torchrun --nproc-per-node 8 --master_port=12346 ptq.py --model_path $DS_CKPT --config DeepSeek-V3/inference/configs/config_671B.json --quant_cfg NVFP4_DEFAULT_CFG --output_path $FP4_QUANT_PATH # 为 V2 版运行校准脚本 torchrun --nproc-per-node 8 --master_port=12346 ptq.py --model_path $DS_CKPT --config DeepSeek-V3/inference/configs/config_671B.json --quant_cfg NVFP4_DEFAULT_CFG --output_path $FP4_QUANT_PATH --enable_wo_quant # 将 FP8 hf 检查点量化为 FP4 ./quantize_fp8_to_nvfp4.sh --amax_path $FP4_QUANT_PATH --fp4_output_path $HF_FP4_PATH --fp8_hf_path $HF_FP8_CKPT --world_size 8
3.2. Qwen3-235B 量化步骤
以下是针对 Qwen3-235B 模型的量化步骤和命令:
git clone https://github.com/NVIDIA/TensorRT-Model-Optimizer.git -b 0.33.1
pushd TensorRT-Model-Optimizer
pip install -e .
pip install -r examples/llm_ptq/requirements.txt
pip install accelerate datasets
python examples/llm_ptq/hf_ptq.py --pyt_ckpt_path=./Qwen3/Qwen3-235B-A22B --export_path=./Qwen3/Qwen3-235B-A22B_nvfp4_hf --sparsity_fmt=dense --qformat=nvfp4 --calib_size=512 --batch_size=0 --inference_tensor_parallel=1 --inference_pipeline_parallel=1 --export_fmt=hf
3.3. 评估步骤
3.3.1. 使用 trtllm-eval 进行离线评估
可以使用以下命令进行离线评估:
# MMLU evaluation
trtllm-eval --model=Qwen3/saved_models_Qwen3-235B-A22B_nvfp4_hf --tokenizer=Qwen3/saved_models_Qwen3-235B-A22B_nvfp4_hf --backend=pytorch --tp_size 4 --kv_cache_free_gpu_memory_fraction 0.4 mmlu --dataset_path=mmlu/
# GSM8K evaluation
trtllm-eval --model=Qwen3/saved_models_Qwen3-235B-A22B_nvfp4_hf --tokenizer=Qwen3/saved_models_Qwen3-235B-A22B_nvfp4_hf --backend=pytorch --tp_size 4 --kv_cache_free_gpu_memory_fraction 0.4 gsm8k --dataset_path=gsm8k/
# GPQA evaluation
trtllm-eval --model=Qwen3/saved_models_Qwen3-235B-A22B_nvfp4_hf --tokenizer=Qwen3/saved_models_Qwen3-235B-A22B_nvfp4_hf --backend=pytorch --tp_size 4 --kv_cache_free_gpu_memory_fraction 0.4 gpqa_diamond --dataset_path=gpqa/
3.3.2. 使用 trtllm-serve 进行在线评估
可以使用以下命令进行在线评估:
mpirun -n 1 --allow-run-as-root --oversubscribe trtllm-serve ./Qwen3/saved_models_Qwen3-235B-A22B_nvfp4_hf --backend pytorch --max_batch_size 32 --max_num_tokens 8192 --tp_size 8 --host 0.0.0.0 --port 30000 --kv_cache_free_gpu_memory_fraction 0.8
pip install lm-eval[api]
lm_eval --model local-completions --tasks gsm8k --model_args model=./Qwen3/saved_models_Qwen3-235B-A22B_nvfp4_hf,base_url=http://0.0.0.0:30000/v1/completions,max_retries=3,tokenized_requests=False,timeout=1200,max_gen_toks=2048,max_length=8192 --batch_size 32 --trust_remote_code
注意:MMLU, GPQA 目前不受支持。
4. NVFP4 性能 (NVFP4 Performance)
4.1. 设置 (Setup)
- 基准测试由报告人自行执行。
- 相关结果已发布在 NVIDIA 官方网站:https://developer.nvidia.com/blog/nvidia-blackwell-leads-on-new-semianalysis-inferencemax-benchmarks
- 包含由 SemiAnalysis 发布的第三方测试结果 - InferenceMax。
下表总结了 InferenceMAX v1 基准测试中涵盖的模型类型、精度、输入和输出序列长度。
表格内容摘要:
- DeepSeek-R1: MoE 模型,671B 总参数(37B 激活参数),采用 FP8 和 NVFP4 精度,测试场景包括 1K/1K、8K/1K、1K/8K 的输入/输出序列长度(ISL/OSL)。
- gpt-oss-120b: MoE 模型,117B 总参数(5.1B 激活参数),采用 FP8 和 MXFP4 精度,测试场景包括 1K/1K、1K/8K 的输入/输出序列长度。
- Llama 3.3 70B: Dense 模型,70B 参数,采用 FP8 和 NVFP4 精度,测试场景包括 1K/1K、8K/1K、1K/8K 的输入/输出序列长度。
4.2. 性能表现:DeepSeek-R1
下图展示了 DeepSeek-R1 模型在 Blackwell GPU 上的性能表现,比较了 DPAE7B-NVFP4、DPE67B-NVFP4 和 DPE67B-FP8 三种配置在 1k 输入 8k 输出(1k-8k)场景下的性能。图中横轴表示每用户的吞吐率(TPS/User),纵轴表示每 GPU 的吞吐率(TPS/GPU)。
结果表明,在相同的用户交互性(TPS/User)水平下,采用 NVFP4 格式的配置(DPAE7B-NVFP4 和 DPE67B-NVFP4)相比 FP8 格式(DPE67B-FP8)能够实现更高的 GPU 吞吐量。
注:仅供技术讨论和参考,实际性能可能因产品组合而异。
4.3. 性能表现:Qwen3-480B
下图展示了 Qwen3-480B 模型在 Blackwell GPU 上的性能,配置为 2k 输入 1k 输出(2k-1k)。图中比较了 DPAE4N-NVFP4 和 DPAE4N-FP8 两种精度配置。
结果显示,在不同的用户交互性(TPS/User)水平下,使用 NVFP4 精度的 DPAE4N-NVFP4 始终比使用 FP8 精度的 DPAE4N-FP8 具有更高的 GPU 吞吐量(TPS/GPU)。
注:仅供技术讨论和参考,实际性能可能因产品组合而异。
4.4. 性能对比:Blackwell vs. Hopper
在 Llama 3.3 70B 模型(1k 输入/1k 输出)的基准测试中,NVIDIA Blackwell 架构展现出显著的性能优势。
- NVIDIA Blackwell 可实现 10K TPS/GPU 的吞吐量,是 Hopper 架构的 4 倍。
- 下图比较了 GB200 (Blackwell) 和 H200 (Hopper) 的性能。绿色曲线代表的 GB200 在所有交互性(TPS per User)水平上均远高于 H200。
- 结论是 Blackwell GB200 在 Llama 3.3 70B 1K/1K 基准测试中实现了高达 4 倍于 Hopper H200 的吞吐量。
注:仅供技术讨论和参考,实际性能可能因产品组合而异。
参考链接:https://developer.nvidia.com/blog/nvidia-blackwell-leads-on-new-semianalysis-inferencemax-benchmarks
4.5. 性能与投资回报:Blackwell vs. Hopper
本页分析了 Blackwell 架构在性能提升之外带来的巨大商业价值。
- 一项 500 万美元的 GB200 NVL72 投资可产生 7500 万美元的 Token 收入。
-
InferenceMAX v1 性能测试 (DeepSeek R1, 8K/1K):
- 左图显示,GB200 的吞吐量达到 10,000 TPS/GPU,是 H200 的 15 倍。
-
AI 工厂投资回报 (AI Factory ROI):
- 右图显示,对于 500 万美元的硬件投资,GB200 NVL72 产生的利润(7500 万美元收入)远超 H200。
-
结论:在 DeepSeek-R1 8K/1K 的测试结果中,NVIDIA Blackwell GB200 NVL72 相比 Hopper H200 展现了 15 倍的性能优势和巨大的收入机会。
注:收入估算基于 32 个 GPU 以每 GPU 每小时 2 美元的价格运行 3 年,使用 DeepSeek-R1 模型和 8->1/8M token 定价,集群利用率为 84k。数据来源为 InferenceMAX v1 2024年5月10日结果和 SemiAnalysis TCO 模型。仅供技术讨论和参考,实际性能可能因产品组合而异。
参考链接:https://developer.nvidia.com/blog/nvidia-blackwell-leads-on-new-semianalysis-inferencemax-benchmarks
4.6. 性能表现:InferenceMax
以下图表展示了更多来自 SemiAnalysis InferenceMax™ 的基准测试结果,详细对比了不同 GPU(包括 Blackwell B200, GB200 和 Hopper H200)在不同配置下的性能。
-
左图 (DeepSeek R1 0528 - FP4+ - 8K / 1K):
- 该图比较了每 GPU 的 Token 吞吐量与交互性(tok/s/user)。
- 结果清晰地显示了 Blackwell 架构(B200, GB200 系列)相对于 Hopper 架构(H200 系列)的巨大性能飞跃。
- 使用 TensorRT (TRT) 优化的版本性能进一步提升。
-
右图 (DeepSeek R1 0528 - FP8 - 8K / 1K):
- 该图在 FP8 精度下也展示了类似的性能趋势。
注:仅供技术讨论和参考,实际性能可能因产品组合而异。
数据来源:https://inferencemax.semianalysis.com/
5. 参考资料 (Reference)
-
Working with Quantized Types
https://docs.nvidia.com/deeplearning/tensorrt/latest/inference-library/work-quantized-types.html -
NVFP4 Introduction
https://developer.nvidia.com/blog/introducing-nvfp4-for-efficient-and-accurate-low-precision-inference/ -
NVIDIA Blackwell Leads on SemiAnalysis InferenceMAX v1 Benchmarks
https://developer.nvidia.com/blog/nvidia-blackwell-leads-on-new-semianalysis-inferencemax-benchmarks -
InferenceMax
https://inferencemax.semianalysis.com/