Transformers 文档

选择量化方法

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

选择量化方法

Transformers 中提供了多种量化方法用于推理和微调。本指南将帮助您根据用例选择最常用且生产就绪的量化技术,并介绍每种技术的优缺点。

要全面了解所有支持的方法及其功能,请参阅概述中的表格。

推理

请考虑以下量化方法用于推理。

量化方法 用例
bitsandbytes 易用性,以及在 NVIDIA GPU 上的 QLoRA 微调
压缩张量 加载特定量化格式 (FP8, 稀疏)
GPTQModel 或 AWQ 在预先校准的情况下具有良好的 4 位精度
HQQ 无需校准即可快速进行即时量化
torchao 使用 torch.compile 实现灵活性和快速推理

无需校准(即时量化)

这些方法通常更易于使用,因为它们不需要单独的校准数据集或步骤。

bitsandbytes

优点 缺点
非常简单,推理无需校准数据集。 主要针对 NVIDIA GPU (CUDA) 进行了优化。
社区支持良好,应用广泛。 不能保证推理速度提升。

更多详情请参阅 bitsandbytes 文档

HQQ(半二次量化)

优点 缺点
快速量化过程,无需校准数据。 在小于 4 位的位深度下,精度可能会显著下降。
支持多种后端以实现快速推理。 除非使用 torch.compile 或后端,否则推理速度可能无法与其他方法匹配。
torch.compile 兼容。
支持广泛的位深度(8、4、3、2、1 位)。

更多详情请参阅 HQQ 文档

torchao

优点 缺点
torch.compile 强集成,可实现潜在的速度提升。 较新的库,生态系统仍在发展中。
提供不错的 CPU 量化支持。 性能取决于 torch.compile 的良好运行。
量化方案灵活(int8、int4、fp8)。 4 位量化 (int4wo) 可能无法在精度上与 GPTQ/AWQ 匹敌。

更多详情请参阅 torchao 文档

基于校准的量化

这些方法需要使用数据集进行预先校准步骤,以可能实现更高的精度。

GPTQ/GPTQModel

8B 模型校准在大约 20 分钟内完成,使用一块 A100 GPU。

优点 缺点
通常能达到高精度。 需要校准数据集和单独的校准步骤。
可以提高推理速度。 可能会在校准数据上过拟合。
Hugging Face Hub 上有许多预量化的 GPTQ 模型。

更多详情请参阅 GPTQ 文档

AWQ(激活感知权重校准)

8B 模型校准在大约 10 分钟内完成,使用一块 A100 GPU。

优点 缺点
通常在 4 位精度下实现高精度。(有时在特定任务上超过 GPTQ。) 如果自行量化,则需要校准。
可以提高推理速度。
校准时间比 GPTQ 短。
Hugging Face Hub 上有许多预量化的 AWQ 模型。

更多详情请参阅 AWQ 文档

加载特定格式

compressed-tensors

优点 缺点
支持灵活的格式,包括 FP8 和稀疏性。 主要用于加载预量化模型。
不直接在 Transformers 中执行量化。

更多详情请参阅 compressed-tensors 文档

微调

在微调期间考虑以下量化方法以节省内存。

bitsandbytes

  • 描述:通过 PEFT 进行 QLoRA 微调的标准方法。
  • 优点:支持在消费级 GPU 上微调大型模型;对 PEFT 有广泛的支持和文档。
  • 缺点:主要针对 NVIDIA GPU。

其他方法也兼容 PEFT,但 bitsandbytes 是 QLoRA 最成熟和直接的路径。

更多详情请参阅 bitsandbytes 文档PEFT 文档

研究

诸如 AQLMSpQRVPTQHIGGS 等方法正在突破压缩边界(小于 2 位)或探索新颖技术。

  • 如果满足以下条件,请考虑使用这些方法:
    • 您需要极高的压缩率(小于 4 位)。
    • 您正在进行研究或需要从其相关论文中获得最先进的结果。
    • 您有足够的计算资源可用于潜在复杂的量化过程。我们建议在选择一种方法用于生产之前,仔细查阅每种方法的文档和相关论文。

基准比较

为了对不同的量化方法进行定量比较,我们对 Llama 3.1 8B 和 70B 模型上的几种常用技术进行了基准测试。下表显示了精度(越高越好)、以每秒令牌数衡量的推理吞吐量(越高越好)、以 GB 为单位的峰值 VRAM 使用量(越低越好)和量化时间的结果。

性能指标是在 Llama 3.1 70B(bfloat16)上使用 2 块 NVIDIA A100 80GB GPU,FP8 方法使用 1 块 NVIDIA H100 80GB GPU,所有其他方法使用 1 块 NVIDIA A100 80GB GPU 测量的。吞吐量是在批量大小为 1 且生成 64 个令牌的情况下测量的。适用于 torch.compile 和 Marlin 内核的结果已包含在内。

主要结论如下:

量化与方法 内存节省 (vs bf16) 准确率 其他注意事项
8 位 (bnb-int8, HQQ, Quanto, torchao, fp8) 约 2 倍 非常接近基线 bf16 模型
4 位 (AWQ, GPTQ, HQQ, bnb-nf4) 约 4 倍 相对较高的精度 AWQ/GPTQ 通常在精度上领先,但需要校准。HQQ/bnb-nf4 易于即时使用。
4 位以下 (VPTQ, AQLM, 2 位 GPTQ) 极端 (>4 倍) 显著下降,尤其是在 2 位时 量化时间可能非常长 (AQLM, VPTQ)。性能各异。

始终在您的特定任务和硬件上对量化模型的性能(精度和速度)进行基准测试,以确保其符合您的要求。有关详细的使用说明,请参阅上面链接的各个文档页面。

< > 在 GitHub 上更新