A Practical Guide to Deploying NVFP4 for Efficient Inference on Blackwell GPUs

薛博阳, NVIDIA 加速计算专家团队 高级工程师
2025/11/07

目录

  1. NVFP4 简介 (NVFP4 Introduction

    1. NVFP4 之前的技术状况 (What we have before NVFP4
    2. 从 FP8 到 FP4 (From FP8 to FP4
    3. 量化方案对比 (Quantization comparison
    4. 什么是 NVFP4
    5. NVFP4 量化工作流 (The workflow of NVFP4 quantization
    6. NVFP4 的量化与反量化 (Quantization and Dequantization of NVFP4
    7. 为何选择 NVFP4
  2. 不同的 NVFP4 配置方案 (Different NVFP4 Recipes

    1. 配置方案概览
    2. 模型精度评估
    3. 架构图
  3. 如何将模型量化为 NVFP4 并进行评估 (How to Quantize and Evaluate

    1. DeepSeek 量化步骤
    2. Qwen3-235B 量化步骤
    3. 评估步骤
  4. NVFP4 性能 (NVFP4 Performance

    1. 设置 (Setup
    2. 性能表现:DeepSeek-R1
    3. 性能表现:Qwen3-480B
    4. 性能对比:Blackwell vs. Hopper
    5. 性能与投资回报:Blackwell vs. Hopper
    6. 性能表现:InferenceMax
  5. 参考资料 (Reference


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 的显著性能提升潜力。

Page 5: 不同数据类型在HGX-B200和H200-SXM上的性能对比
*注:技术讨论和参考,性能可能因产品组合而异。

1.3. 量化方案对比 (Quantization comparison)

下表详细对比了 INT8, FP8, MXFP8, INT4, 以及 NVFP4 这几种量化方案在表示方式、权重/激活量化粒度、量化方式和缩放因子数据类型等方面的差异。

Page 6: 各种量化方案的详细对比表格
Page 6: 各种量化方案的详细对比表格

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 倍。

Page 8: 模型层中权重和缩放因子的张量示例
Page 8: 模型层中权重和缩放因子的张量示例

1.5. NVFP4 量化工作流 (The workflow of NVFP4 quantization)

基准:块级 FP8 (Block-wise FP8)

作为对比,传统的块级 FP8 量化流程如下:对一个 FP16 权重张量 W,每 128 x 128 个元素计算一次局部最大值 local_max,然后用这个最大值计算出缩放因子,最后将权重 W 量化为 FP8。

Page 9: 块级FP8量化流程图
Page 9: 块级FP8量化流程图

块级 FP8 vs. NVFP4

与单级缩放的 FP8 不同,NVFP4 采用两级缩放策略以保持精度:

  1. 权重分块与一级量化: 将 FP16 权重张量 W 分成每 16 个元素一组。
  2. 一级缩放 (局部): 对每个 16 元素的块计算局部最大值 local_max,然后除以一个常数 (6) 得到一级缩放因子 S (FP32)。使用这个缩放因子将权重块量化为 W_FP4
  3. 二级缩放 (全局): 计算所有一级缩放因子 S 的全局最大值 global_max
  4. 二级量化: 用全局最大值除以一个常数 (448) 得到二级缩放因子,并用它将一级缩放因子 S 量化为 S_FP8
Page 11: NVFP4量化工作流示意图,展示了两级缩放过程
Page 11: NVFP4量化工作流示意图,展示了两级缩放过程

NVFP4 校准 (NVFP4 calibration)

下图展示了 NVFP4 量化流程与校准代码片段的对应关系,其中 SF1SF2 分别对应二级和一级缩放因子的计算。

Page 12: NVFP4量化工作流与校准代码
Page 12: NVFP4量化工作流与校准代码

如何获取权重缩放因子 (How do get scaling factors - weights)

具体的缩放因子计算逻辑可以在 TensorRT-Model-Optimizer 的代码中找到。下图高亮了计算一级 (SF2) 和二级 (SF1) 缩放因子的核心代码。

Page 13: 获取权重缩放因子的Python代码示例
Page 13: 获取权重缩放因子的Python代码示例

1.6. NVFP4 的量化与反量化 (Quantization and Dequantization of NVFP4)

在推理过程中,输入激活 X 和权重 W 都被量化。

  • 逻辑流程:
    1. 高精度权重 Whp 被量化 (Quantization, Q) 为 Wfp4
    2. 高精度激活 Xhp 被动态量化 (Dynamic Quantization, DynQ) 为 Xfp4,同时生成缩放因子 SFfp8
    3. Wfp4Xfp4 分别被反量化 (Dequantization, DQ) 回高精度。
    4. SFfp8 也被反量化为 SFhp,并应用于反量化后的激活。
    5. 最后,恢复出的高精度权重和激活送入通用矩阵乘法 (GEMM) 单元进行计算。
Page 14: NVFP4量化与反量化的逻辑流程图
Page 14: NVFP4量化与反量化的逻辑流程图
  • 融合操作 (Fusion operation):
    在实际硬件执行中,上述多个分离的步骤(动态量化、反量化、GEMM)会被融合成一个单一的高效操作。GEMM 单元可以直接使用量化后的 Xfp4, Wfp4 和缩放因子 SFfp8,在内部完成计算,从而极大地提升了计算效率和内存带宽利用率。
Page 15: 融合操作后的NVFP4计算流程图
Page 15: 融合操作后的NVFP4计算流程图

1.7. 为何选择 NVFP4

此部分比较了三种不同的4位浮点格式:FP4 (E2M1)、MXFP4 和 NVFP4。

Page 16
Page 16

格式对比:

  • 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 配置方案。

Page 18
Page 18
  • 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) 的精度相当。

Page 19
Page 19

数据来源:

Qwen3-235B 评估精度

下图展示了 Qwen3-235B 的评估精度得分,比较了 FP8 (A22B AA Ref) 和 NVFP4 (NVFP4-full) 的表现。结果显示两者精度非常接近。

Page 20
Page 20

* 注:由 nv-eval 评估。

2.3. 架构图

NVFP4-MoE (DeepSeek) 架构图

下图展示了在 DeepSeek 模型中应用 NVFP4-MoE 配置方案的详细计算流程。

Page 21
Page 21

Full NVFP4 (Qwen3) 架构图

Qwen3 - Attention 模块

下图展示了在 Qwen3 的 Attention 模块中应用 Full NVFP4 配置方案的数据流。输入张量 (Transformer Input) 首先被量化为 NVFP4,用于 QKV GEMM。KV Cache 使用 FP8 格式。最后的 Proj GEMM 也使用 NVFP4 权重和输入。

Page 22
Page 22
Qwen3 - MoE 模块

下图展示了在 Qwen3 的 MoE (Mixture of Experts) 模块中应用 Full NVFP4 配置方案的数据流。输入被量化为 NVFP4 并传递给专家网络中的 FC1 和 FC2 GEMM。

Page 23
Page 23

3. 如何将模型量化为 NVFP4 并进行评估 (How to Quantize and Evaluate)

3.1. DeepSeek 量化步骤

* 仅供技术讨论和参考,性能可能因产品组合不同而异。

具体命令:

克隆仓库并设置环境变量:
Page 26

# 克隆 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 ..

运行校准脚本并量化检查点:
Page 27

# 为基础版运行校准脚本
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 模型的量化步骤和命令:

Page 28
Page 28
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

参考链接: https://github.com/NVIDIA/tensorrt-llm/blob/main/examples/models/core/qwen/README.md#model-quantization

3.3. 评估步骤

3.3.1. 使用 trtllm-eval 进行离线评估

可以使用以下命令进行离线评估:

Page 29
Page 29
# 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 进行在线评估

可以使用以下命令进行在线评估:

Page 30
Page 30
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)

下表总结了 InferenceMAX v1 基准测试中涵盖的模型类型、精度、输入和输出序列长度。

在 InferenceMAX v1 基准测试中涵盖的模型、精度、输入和输出序列长度的表格 (Page 32)
在 InferenceMAX v1 基准测试中涵盖的模型、精度、输入和输出序列长度的表格 (Page 32)

表格内容摘要:
- 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 吞吐量。

注:仅供技术讨论和参考,实际性能可能因产品组合而异。

DeepSeek-R1 在 Blackwell GPU 上的性能图表 (Page 33)
DeepSeek-R1 在 Blackwell GPU 上的性能图表 (Page 33)

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)。

注:仅供技术讨论和参考,实际性能可能因产品组合而异。

Qwen3-480B 在 Blackwell GPU 上的性能图表 (Page 34)
Qwen3-480B 在 Blackwell GPU 上的性能图表 (Page 34)

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

Blackwell 与 Hopper 性能对比图 (Page 35)
Blackwell 与 Hopper 性能对比图 (Page 35)

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

Blackwell 与 Hopper 投资回报对比图 (Page 36)
Blackwell 与 Hopper 投资回报对比图 (Page 36)

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/

InferenceMax 性能基准测试图表 (Page 37)
InferenceMax 性能基准测试图表 (Page 37)

5. 参考资料 (Reference)

Page 38
Page 38

Page 39
Page 39