Transformers documentation

选择一种方法

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

选择一种方法

如果您的检查点已经量化,则量化方法由检查点决定。请按照加载预量化检查点中所示的方式加载它。否则,请根据您的硬件以及加载后需要对模型执行的操作来选择方法。

从你的目标开始

每一行都推荐了一种首选尝试方法。在确定使用某一种方法之前,请先查看完整的对比表。

目标从为什么
以最少配置,用更少内存训练模型bitsandbytes在加载时进行 4 位或 8 位量化,无需校准,支持在 CUDA、XPU、HPU 和 CPU 上运行,并支持保存和微调。
使用 QLoRA 进行微调bitsandbytes支持使用 PEFT 进行 4 位 NF4 量化。HQQ、EETQ、GPTQ、SINQ 和 Quanto 也支持微调。
使用 torch.compile 加速推理torchaogenerate 会自动使用静态缓存来编译 torchao 模型,并且 torchao 为 CUDA、XPU 和 CPU 提供了 int4、int8 和 FP8 方案。
获取最佳的 4 位精度GPTQ在加载时于数据集上进行校准。若要改用 AWQ 或 AutoRound,请使用它们的库进行量化,然后加载检查点。
在 Ada、Hopper 或 Intel XPU 上运行 FP8细粒度 FP8需要 CUDA 计算能力 8.9 或更高,或 XPU。FBGEMM FP8 需要计算能力 9.0 或更高,或 XPU。
在 Blackwell 上运行 FP4NVFP4在加载时量化为 NVIDIA 的 4 位浮点格式。MXFP4 支持计算能力 7.5 或更高的设备、XPU 以及 CPU。
在 Apple silicon 上运行Metal在加载时,在 MPS 上量化为 2、4 或 8 位。GGUF 文件也可以在 MPS 上加载。
加载使用 llm-compressor 创建的检查点compressed-tensors以 compressed-tensors 格式加载 FP8、int4 和 int8 检查点。
压缩至 4 位以下HQQ 或 SINQ在加载时进行量化,无需校准即可量化至 2 位或 3 位。AQLM、VPTQ 和 SpQR 检查点可以量化到更低的位数,但必须使用它们各自的库进行量化。
Show the full comparison table
方法quant_method工作流位硬件保存微调自动编译
AQLMaqlm仅支持预量化1–2CUDA、CPU✅✅ 适用于 aqlm>=1.0.2❌
AutoRoundauto-round仅支持预量化2–8CUDA、XPU、CPU✅❌❌
AWQawq仅支持预量化4CUDA、ROCm、XPU、CPU✅ 除 ExLlama 后端外✅ 适用于 gptqmodel>=5.0.0❌
BitNetbitnet仅支持预量化1.58CUDA✅仅 autobitlinear 支持 online 模式❌
bitsandbytesbitsandbytes加载时4, 8CUDA、XPU、HPU、CPU✅✅❌
compressed-tensorscompressed-tensors仅支持预量化按检查点设置CUDA、XPU、MPS、CPU✅✅ 但 FP8 内核除外✅
EETQeetq加载时8CUDA✅✅❌
FBGEMM FP8fbgemm_fp8加载时8CUDA(计算能力 9.0+)、XPU✅❌❌
细粒度 FP8fp8, mxfp8加载时8CUDA(计算能力 8.9+)、XPU✅❌✅
四比六fouroversix加载时4CUDA(在 Blackwell 上速度最快),CPU✅仅在 keep_master_weights=True 时❌
FP-Quantfp_quant加载时4CUDA、XPU✅仅在 store_master_weights=True 时❌
GGUFgguf仅支持预量化1–8CUDA、MPS、XPU、CPU❌❌✅
GPTQgptq在加载过程中,进行校准2, 3, 4, 8CUDA、ROCm、XPU、CPU✅✅❌
HIGGShiggs加载时2, 3, 4CUDA✅❌❌
HQQhqq加载时1, 2, 3, 4, 8CUDA、XPU✅✅❌
Metalmetal加载时2, 4, 8MPS✅❌❌
MXFP4mxfp4加载时4CUDA(计算能力 7.5+)、XPU、CPU✅❌❌
NVFP4nvfp4加载时4一块 Blackwell GPU❌❌✅
Quantoquanto加载时2, 4, 8CUDA、MPS、XPU、CPU❌✅❌
Quarkquark仅支持预量化按检查点设置CUDA、ROCm、CPU❌❌❌
SINQsinq加载时2, 3, 4, 6, 8一个 CUDA GPU,CPU✅✅❌
SpQRspqr仅支持预量化3CUDA✅❌❌
torchaotorchao加载时4, 8CUDA、XPU、CPU✅仅 8 位方案✅
VPTQvptq仅支持预量化1–8CUDA✅❌❌

使用量化选择器检查内存

量化选择器会估算模型在每种精度下(包括 KV 缓存)是否能适配您的硬件。选择模型、您的硬件以及该方法需要实现的功能,Compare 视图将列出符合条件的方法。

基准测试

以下基准测试在 Llama 3.1 8B 和 70B 上比较了多种方法。它们报告了准确率、每秒 token 吞吐量、峰值内存(GB)以及量化时间。

Llama 3.1 70B 在 bf16 下运行于 2 块 NVIDIA A100 80GB GPU。FP8 方法运行于 1 块 NVIDIA H100 80GB GPU,其余所有方法均运行于 1 块 NVIDIA A100 80GB GPU。吞吐量在 batch size 为 1、生成 64 个 token 的条件下测量。结果包含 torch.compile 和 Marlin 内核(在方法支持的情况下)。

结果分为三个位范围。

位基准测试的方法内存与 bf16准确率
8bitsandbytes int8、HQQ、Quanto、torchao、FP8体积缩小约 2 倍非常接近 bf16
4AWQ、GPTQ、HQQ、bitsandbytes NF4、SINQ小约 4 倍高。AWQ 和 GPTQ 通常表现领先,但需要进行校准。
低于 4VPTQ、AQLM、2-bit GPTQ缩小 4 倍以上性能下降明显,尤其是在 2 bits 时。AQLM 和 VPTQ 的量化耗时较长。

在确定生产环境所用的方法之前,请先在您的任务和硬件上对准确率和速度进行基准测试。

Update on GitHub