Transformers 文档
选择量化方法
并获得增强的文档体验
开始使用
选择量化方法
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 文档。
研究
诸如 AQLM、SpQR、VPTQ、HIGGS 等方法正在突破压缩边界(小于 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)。性能各异。 |
始终在您的特定任务和硬件上对量化模型的性能(精度和速度)进行基准测试,以确保其符合您的要求。有关详细的使用说明,请参阅上面链接的各个文档页面。