数据中心/云端

通过训练后量化优化 LLM 的性能和准确性

量化是开发者的核心工具,旨在以最小的开销来提高推理性能。通过以可控的方式降低模型精度,无需重新训练,该技术可显著降低延迟、提高吞吐量和内存效率。

如今,大多数模型都使用 FP16 或 BF16 进行训练,而 DeepSeek-R 等一些模型则使用 FP8 进行原生训练。进一步量化到 FP4 等格式可大幅提高效率和性能,并得到日益增长的开源技术生态系统的支持。

NVIDIA TensorRT 模型优化器后训练量化 (PTQ) 框架提供了一种灵活的模块化方法来应用这些优化。它支持多种格式,包括针对 NVIDIA Blackwell GPU 优化的 NVFP4,并集成了 SmoothQuant、激活感知权重量化 (AWQ) 和 AutoQuantize 等校准技术,以改善量化结果。

Model Optimizer PTQ 还支持原生 PyTorch、Hugging Face、NeMo 和 Megatron-LM 检查点,并可轻松集成到 NVIDIA TensorRT-LLM、vLLM 和 SGLang 等推理框架中,因此对生态系统非常友好。

本文将详细介绍 PTQ 技术,并介绍如何使用 Model Optimizer PTQ 压缩 AI 模型,同时保持高精度,从而增强用户体验和 AI 应用性能。

量化简介

神经网络由包含值的层组成,这些值可以通过模型预训练和后训练过程进行调整,并学习执行不同的任务。这些学习内容以权重、激活和偏差的形式存储在不同类型的层中。在实践中,模型通常以全精度(TF32/FP32)、半精度(BF16/FP16)、混合精度以及最近的 FP8 进行训练。训练精度决定了模型的原生精度,这直接影响到使用该模型执行推理的计算复杂性和内存要求。

量化使我们能够以牺牲训练期间通常需要的额外精度为代价,来换取更快的推理速度和更小的内存占用。性能提升取决于我们量化的网络大小、原生精度和量化精度之间的差异以及我们使用的算法。图 1 显示了一组高精度权重如何进行重新采样和量化。

Illustration of the quantization process: The top row shows evenly spaced original weights at baseline precision. An arrow points to a lower section where these weights are mapped onto a bell‑curve‑like distribution, aligning each original value to the nearest available level in a lower‑precision quantized format, represented by discrete boxes.
图 1。量化本质上是将值从高精度格式重新采样为低精度格式,下面是一个简单的说明图

通常用于模型训练的 32 位和 16 位数据类型可以量化为 8 位、4 位甚至更低。此过程涉及压缩原始值,以适应低精度数据类型较小的可表示范围。

在量化过程中,必须将值调整为目标数据类型的可表示范围。在调整过程中,值范围从更细粒度到更粗粒度。例如,从 FP16 转换为 FP8,量化后的值 A 和 B 分别表示为 QA 和 QB,但距离更远,从而导致分辨率降低(图 2)。

Comparison of representable ranges and data precision for FP16, FP8, and FP4 formats.
图 2。将 FP16 量化到 FP8 或 FP4 时,范围和细节会发生什么变化?

以下表 1 总结了最常用数据类型的可表示范围。

数据类型 总位数 (Total Bits) 可表示范围 (Representable Range)
FP32 浮点精度单精度浮点运算,用于训练和推理。 32 位浮点精度,可提供更准确的图像和视频。 ±3.4 × 10³⁸
FP16(半精度浮点) 16 ±65,504
BF16(半精度浮点) 16 ±3.4 × 10³⁸
FP8(浮点精度为 8 位) 8 个 GPU 核心,可提供 16 个 CUDA 核心。 8 GPU cores, which provide 16 CUDA cores. ±448
FP4(浮点精度为 4 位) 4 项专利申请 -6 至 +6
INT8 8 个 GPU 核心,可提供 16 个 CUDA 核心。 8 GPU cores, which provide 16 CUDA cores. -128 到 +127
INT4(4 位整数) 4 项专利申请 -8 至 +7
表 1。数据类型摘要,包括位宽、可表示范围和格式描述(浮点与整数)

生成的量化格式将具有原始值的一个版本,该版本以量化格式的范围表示。这种转换是使用量化缩放因子实现的,该因子是使用以下公式计算的。

\boldsymbol{S} = \frac{\boldsymbol{2}^{\boldsymbol{b} - \boldsymbol{1}} - \boldsymbol{1}}{\boldsymbol{\alpha}}

其中 b 是目标字节数,\alpha 是原始数据类型中存在的最高绝对值。量化值是使用以下公式计算的。

\boldsymbol{X}_{\text{quantized}} = \mathit{round}(\boldsymbol{S} \cdot \boldsymbol{X})

其中 X 是原始数据类型,S 是缩放因子。图 3 显示了将 FP16 转换为 FP4 的量化过程的结果。FP16 值 {4.75, 2.01, -3.44, -7.11, 0, 13.43, -4.91, -6.43} 在 FP4 中被量化为 {2, 1, -2, -4, 0, 7, -3, -3}。

Illustration of symmetric static quantization. The mapping shows how higher‑precision floating‑point values are compressed into lower‑precision representations while preserving relative relationships.
图 3。使用对称静态量化和标准缩放因子将 FP16 值缩放到 FP4 的示例

有许多量化调整技术,但本文重点介绍使用 Model Optimizer 进行有效的 PTQ。虽然有许多高级方法,如剪裁、范围映射和校准,但 Model Optimizer 提供了一个简单的 API,可以轻松应用正确的配置。

使用 TensorRT 模型优化器进行 PTQ 测试

TensorRT Model Optimizer 是一个高级模型优化技术库,专门用于优化模型的推理性能。优化模型后,可以使用 Dynamo、SGLang、TensorRT-LLM 和 vLLM 等推理框架将其部署到下游。

表 2 提供了 Model Optimizer 支持的不同量化格式的摘要和简要说明。

量化(Quantization)格式 描述
每个 Tensor FP8 位精度计算单元 使用默认缩放编码的标准全模型 FP8 量化
FP8 块级权重仅限于此模式 2D 块级权重量化。小块之间的共享缩放。
FP8 每通道和每 Token 性能 每个通道权重、每个 token 动态激活量化。
nvfp4:用于在 NVIDIA GPU 上运行的深度学习模型的 FP4 算力。 nvfp4: FP4 performance for deep learning models running on NVIDIA GPUs. 权重和激活的默认 FP4 量化。
INT8 SmoothQuant:用于将 INT8 训练模型转换为 INT8 推理模型。 使用 SmoothQuant 校准的 8 位量化。每个通道的权重,每个张量的激活。
WA416 (仅支持 INT4 权重) 仅使用 4 位权重量化并进行 AWQ 校准。组级/块级权重,FP16 激活。
W4A8 (INT4 权重,FP8 激活) 4 位权重,FP8 激活量化与 AWQ。块级权重,每个张量 FP8 激活。
fp8 (KV) 支持注意力层中的键值缓存的 FP8 量化
nvfp4 (KV) FP4 缓存量化,用于 Transformer 注意力层的键值缓存。
Nvfp4_affine (KV) 使用仿射缩放进行键值缓存量化。
表 2。表总结了 Model Optimizer 支持的量化格式,按类型(浮点、整数、KV 缓存)组织,并附有描述

选择合适的量化格式、KV 缓存精度和校准方法取决于您的特定模型和工作负载。Model Optimizer 提供了多种技术来帮助实现这一点,包括:

  • 最小值-最大值校准 (Min-max calibration)
  • SmoothQuant:用于在量子计算机上运行的量子模拟软件。
  • 激活感知权重量化 (AWQ)
  • AutoQuantize:自动量化。

在以下部分中,我们将详细介绍这些技术,并提供动手操作的 Jupyter Notebook 教程,以便您了解如何使用 Model Optimizer API 并将其应用于您自己的模型。

带最小值-最大值校准的标准量化

在对模型进行量化之前,需要对其进行校准,以了解其激活的动态范围。最简单、最常见的校准方法之一是 min-max 校准。在这个过程中,通过原始模型传递一个小型的代表性数据集(校准数据集)来收集激活统计数据。对于每个张量,使用观察到的最小值和最大值来确定将浮点值映射到低精度整数的缩放因子。虽然快速且易于应用,但最小-最大校准对异常值很敏感,并且缺乏更高级技术中使用的自适应缩放功能。

假设模型和分词器已成功加载,则可以使用 Model Optimizer 提供的 get_dataset_dataloadercreate_forward_loop 实用程序函数配置校准数据加载器和前向循环。PTQ 可以使用小型校准数据集(通常只有 128 到 512 个样本)进行应用,并且在不同数据集中的准确性通常保持稳定。在本示例中,使用数据集 cnn_dailymail。可以通过修改 get_dataset_dataloader() 调用中的 dataset_name 配置来替换不同的数据集。

# Calibration dataloader
calib_loader = get_dataset_dataloader(
    dataset_name=”cnn_dailymail”,
    tokenizer=tokenizer,
    batch_size=batch_size,
    num_samples=calib_samples,
    device="cuda"
)

forward_loop = create_forward_loop(dataloader=calib_loader)

配置量化参数需要三个关键输入:

  1. 原始模式:
  2. 量化配置
  3. 前向循环。

在本示例中,我们通过设置 quant_cfg = mtq.NVFP4_DEFAULT_CFG 来使用权重和激活的默认 NVFP4 配置,然后使用 mtq.quantize() 函数将其应用于模型。

# Quantize with NVFP4 config
quant_cfg = mtq.NVFP4_DEFAULT_CFG
model = mtq.quantize(model, quant_cfg, forward_loop=forward_loop)

成功应用量化后,可以使用本博文“导出 PTQ 优化模型”部分中的说明导出模型。要深入了解此 PTQ 方法,我们建议您探索完整的 Jupyter 笔记本演练

高级校准技术

校准通过分析代表性输入数据来确定最佳缩放因子。最大校准等简单方法使用张量中的最大绝对值,这可能会导致动态范围利用不足。SmoothQuant 等更高级的技术在平衡激活平滑度和权重缩放的同时,AWQ 在训练后调整权重组以保持输出分布。校准方法会显著影响量化模型的最终准确性,因此应符合工作负载的敏感性和延迟要求。

校准技术既适用于浮点格式,也适用于整数格式。在实践中,通常需要使用这些技术来处理 INT8 和 INT4 等整数数据类型,以便在量化后恢复可接受的精度。

激活感知权重量化(Activation-aware weight quantization)

AWQ 于 2023 年推出,通过考虑激活范围来实现权重量化。其思路是选择能够最大限度地减少典型激活模式下最坏情况量化误差的每个通道权重尺度。

AWQ 能够“容忍”对输出贡献较小的通道中的某些权重误差(由于激活值较小)。AWQ 的优势之一在于,它能够实现非常低的位数权重量化(4 位),并且不会对所有权重一视同仁,因此对性能的影响最小。

Diagram of the AWQ process, which prioritizes high-activation channels by applying larger scaling factors, preserving their impact in the final quantized representation.
图 4。基于 AWQ 论文,选择性地缩放显著(高激活)权重,以在量化过程中保持准确性

AWQ 的核心前提是,它优先考虑显著权重(通常由于与高幅度激活相一致而被视为最活跃的权重),并在量化过程中更加谨慎地处理这些权重。这些关键权重要么以更高的精度进行量化,要么以原始格式保留,而不太重要的权重则会进行更严格的量化。

这种选择性方法可以减少最关键位置的量化误差,从而有效地使用低位格式。如图 4 所示,每个通道都根据平均幅度进行选择,并在量化之前进行仔细缩放,有助于保留最具影响力的权重的影响。

Model Optimizer API 允许用户覆盖块大小等参数,以便对量化过程进行细粒度控制。如需完整操作指南,请参阅 min-max 量化 Jupyter 笔记本

SmoothQuant:用于在量子计算机上运行的量子模拟软件。

SmoothQuant 于 2022 年推出,解决了低精度量化导致的激活值异常值问题。在 Transformer 架构中,由于 Q/K/V 的注意力计算规模,某些通道中的值可能非常大,因此层中的激活分布可能严重偏斜,这使得直接量化存在风险。

Visualization of the SmoothQuant process. An arrow indicates 'migrating difficulty from activations to weights,' making both activations and weights easier to quantize.
图 5。改编自 SmoothQuant 论文:缩小激活值和调整权重以保持数学有效性

图 5 显示了 SmoothQuant 过程的基本直观理解。从激活的原始分布和相应的异常值开始 | X | 。这些值被缩放到创建\boldsymbol{|\hat{X}|},并且和|W|相应地放大以将\boldsymbol{|\hat{W}|}的值向上舍入,以便该乘积在数学上仍然有效。

模型优化器自动量化 (Model Optimizer AutoQuantize)

Model Optimizer AutoQuantize 功能是一种基于梯度的敏感度评分的逐层量化算法,用于对每个层的量化容忍度进行排序。这使其能够逐层搜索和选择最佳量化格式,甚至跳过量化(图 6)。

该过程由用户定义的约束条件(例如 effective_bits 参数)指导,该参数在平衡更高吞吐量需求的同时,还能保持模型的准确性。通过在层级上定制量化,该算法可以在保留最重要精度的同时,大幅压缩不太敏感的层级。用户还可以根据特定的硬件目标和模型要求应用不同级别的压缩,从而提供细粒度控制,以优化各种环境中的部署效率。

An AutoQuantize diagram. On the left, two sample quantization formats (INT8 and NVFP4) are shown. On the right, icons for capturing measured accuracy and performance metrics, illustrating how AutoQuantize evaluates different formats layer by layer to find the optimal balance between accuracy and efficiency.
图 6。AutoQuantize 工作流的简化动画,根据准确性和性能权衡评估和选择最佳的每层量化格式(例如 INT8、NVFP4)

生成的模型将使用一个自定义量化方案,该方案根据提供给自动量化功能的候选配置进行应用。与本文中讨论的其他方法相比,当每层搜索空间很大时,这种技术可能会导致更高的计算成本和更长的处理时间。为了降低复杂性,您可以选择较小的候选配置集并跳过 KV 缓存校准。

使用 Model Optimizer API 应用 AutoQuantize 非常简单。首先,确定权重量化配置池和激活量化配置 KV。随附的 Jupyter 笔记本深入介绍了不同的配置以及如何有效地应用这些配置。

将模型量化为 NVFP4 的结果

前几节介绍了各种 PTQ 技术的概述和初步介绍。每种技术在提升推理性能和模型准确性方面的有效性取决于所使用的具体配方和超参数。

NVFP4 提供了 Model Optimizer PTQ 所提供的最高压缩级别,可实现稳定的准确性恢复和模型吞吐量的显著提升。下图 8 显示了将原始精度量化为 NVFP4 后对准确性和输出 token 吞吐量的影响。NVFP4 量化显著提高了 Qwen 23B、DeepSeek-R1-0528 和 Llama Nemo Ultra 等主要语言模型的 token 生成吞吐量,同时保持了它们几乎所有的原始准确性,即使在速度提高 2-3 倍的情况下,相对准确性百分比仍然很高。

This scatter plot shows the relationship between throughput speedup and accuracy retention for large language models quantized with NVFP4. The chart visually demonstrates that NVFP4 quantization delivers substantial inference speedup with minimal loss in model accuracy.
图 8。交叉图显示 NVFP4 token 生成吞吐量加速和准确性影响

以下聊天演示展示了 Deepseek-R1 查询的响应保真度相等,但 NVFP4 量化模型的响应速度比 FP8 基线快得多。

Side‑by‑side comparison of DeepSeek‑R1 chat responses at different precisions, demonstrating that NVFP4 maintains response fidelity while enabling faster inference performance.
图 9。聊天演示比较 DeepSeek‑R1 的响应,显示 NVFP4 量化与 FP8 相比,输出精度相同但速度更快

这种性能提升和准确性保持的结合,使 TCO 能够得到有效优化,而 AI 工作负载的保真度几乎不会发生任何变化。

导出 PTQ 优化模型

选择并成功应用所需的 PTQ 技术后,可以将模型导出到量化 Hugging Face 检查点。这与常见的 Hugging Face 检查点类似,因此可以轻松地在 vLLMSGLangTensorRT-LLMDynamo 等各种推理引擎之间共享、加载和运行模型。

导出到量化 Hugging Face 检查点

from modelopt.torch.export import export_hf_checkpoint

export_hf_checkpoint(model, export_dir=export_path)

想要立即尝试 PTQ 优化模型?查看 Hugging Face Hub 上的预量化模型检查点。NVIDIA 模型优化器集合包括 Llama 3、Llama 4 和 DeepSeek 的即用型检查点。

总结

量化是提升模型推理性能的最有效方法之一,可以在不重新训练的情况下大幅降低延迟、提高吞吐量和内存效率。虽然目前大多数大型模型都以 FP16 或 BF16(以及 DeepSeek‑R1 等一些模型以 FP8)运行,但进一步使用 FP4 等格式可以实现更高水平的效率。在快速发展的技术生态系统的支持下,这一转变正在改变开发者部署和扩展高性能 AI 的方式。

NVIDIA TensorRT 模型优化器将这一功能提升到了一个新的水平。支持 NVFP4(专为 NVIDIA Blackwell GPU 构建)等尖端格式、SmoothQuant、AWQ 和 AutoQuantize 等高级校准策略,并与 PyTorch、Hugging Face、NeMo、Megatron-LM、vLLM、SGLang、TensorRT‑LLM 和 Dynamo 无缝集成,为开发者提供强大的压缩工具包,无需妥协。结果如何?更快、更精简、更具可扩展性的 AI 部署,同时保持准确性并提升用户体验。如果您已准备好体验这些优势,请立即探索我们的 Jupyter 笔记本教程或尝试预量化检查点。

 

 

标签