# 选择一种方法

如果您的检查点已经量化，则量化方法由检查点决定。请按照[加载预量化检查点](./overview#load-a-pre-quantized-checkpoint)中所示的方式加载它。否则，请根据您的硬件以及加载后需要对模型执行的操作来选择方法。

## 从你的目标开始

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

| 目标 | 从 | 为什么 |
|---|---|---|
| 以最少配置，用更少内存训练模型 | [bitsandbytes](./bitsandbytes) | 在加载时进行 4 位或 8 位量化，无需校准，支持在 CUDA、XPU、HPU 和 CPU 上运行，并支持保存和微调。 |
| 使用 QLoRA 进行微调 | [bitsandbytes](./bitsandbytes#qlora) | 支持使用 PEFT 进行 4 位 NF4 量化。[HQQ](./hqq)、[EETQ](./eetq)、[GPTQ](./gptq)、[SINQ](./sinq) 和 [Quanto](./quanto) 也支持微调。 |
| 使用 `torch.compile` 加速推理 | [torchao](./torchao) | `generate` 会自动使用静态缓存来编译 torchao 模型，并且 torchao 为 CUDA、XPU 和 CPU 提供了 int4、int8 和 FP8 方案。 |
| 获取最佳的 4 位精度 | [GPTQ](./gptq) | 在加载时于数据集上进行校准。若要改用 [AWQ](./awq) 或 [AutoRound](./auto_round)，请使用它们的库进行量化，然后加载检查点。 |
| 在 Ada、Hopper 或 Intel XPU 上运行 FP8 | [细粒度 FP8](./finegrained_fp8) | 需要 CUDA 计算能力 8.9 或更高，或 XPU。[FBGEMM FP8](./fbgemm_fp8) 需要计算能力 9.0 或更高，或 XPU。 |
| 在 Blackwell 上运行 FP4 | [NVFP4](./nvfp4) | 在加载时量化为 NVIDIA 的 4 位浮点格式。[MXFP4](./mxfp4) 支持计算能力 7.5 或更高版本、XPU 以及 CPU。 |
| 在 Apple silicon 上运行 | [Metal](./metal) | 在加载时，在 MPS 上量化为 2、4 或 8 位。[GGUF](./gguf) 文件也可以在 MPS 上加载。 |
| 加载使用 llm-compressor 创建的检查点 | [compressed-tensors](./compressed_tensors) | 以 compressed-tensors 格式加载 FP8、int4 和 int8 检查点。 |
| 压缩至 4 位以下 | [HQQ](./hqq) 或 [SINQ](./sinq) | 在加载时进行量化，无需校准即可量化至 2 位或 3 位。[AQLM](./aqlm)、[VPTQ](./vptq) 和 [SpQR](./spqr) 检查点可以量化到更低的位数，但必须使用它们各自的库进行量化。 |

显示完整的对比表

| 方法 | `quant_method` | 工作流 | 位 | 硬件 | 保存 | 微调 | 自动编译 |
|---|---|---|---|---|---|---|---|
| [AQLM](./aqlm) | `aqlm` | 仅支持预量化 | 1–2 | CUDA、CPU | ✅ | ✅ 适用于 `aqlm>=1.0.2` | ❌ |
| [AutoRound](./auto_round) | `auto-round` | 仅支持预量化 | 2–8 | CUDA、XPU、CPU | ✅ | ❌ | ❌ |
| [AWQ](./awq) | `awq` | 仅支持预量化 | 4 | CUDA、ROCm、XPU、CPU | ✅ 除 ExLlama 后端外 | ✅ 适用于 `gptqmodel>=5.0.0` | ❌ |
| [BitNet](./bitnet) | `bitnet` | 仅支持预量化 | 1.58 | CUDA | ✅ | 仅 `autobitlinear` 支持 `online` 模式 | ❌ |
| [bitsandbytes](./bitsandbytes) | `bitsandbytes` | 加载时 | 4, 8 | CUDA、XPU、HPU、CPU | ✅ | ✅ | ❌ |
| [compressed-tensors](./compressed_tensors) | `compressed-tensors` | 仅支持预量化 | 按检查点设置 | CUDA、XPU、MPS、CPU | ✅ | ✅ 但 FP8 内核除外 | ✅ |
| [EETQ](./eetq) | `eetq` | 加载时 | 8 | CUDA | ✅ | ✅ | ❌ |
| [FBGEMM FP8](./fbgemm_fp8) | `fbgemm_fp8` | 加载时 | 8 | CUDA（计算能力 9.0+）、XPU | ✅ | ❌ | ❌ |
| [细粒度 FP8](./finegrained_fp8) | `fp8`, `mxfp8` | 加载时 | 8 | CUDA（计算能力 8.9+）、XPU | ✅ | ❌ | ✅ |
| [四比六](./fouroversix) | `fouroversix` | 加载时 | 4 | CUDA（在 Blackwell 上速度最快），CPU | ✅ | 仅在 `keep_master_weights=True` 时 | ❌ |
| [FP-Quant](./fp_quant) | `fp_quant` | 加载时 | 4 | CUDA、XPU | ✅ | 仅在 `store_master_weights=True` 时 | ❌ |
| [GGUF](./gguf) | `gguf` | 仅支持预量化 | 1–8 | CUDA、MPS、XPU、CPU | ❌ | ❌ | ✅ |
| [GPTQ](./gptq) | `gptq` | 在加载过程中，进行校准 | 2, 3, 4, 8 | CUDA、ROCm、XPU、CPU | ✅ | ✅ | ❌ |
| [HIGGS](./higgs) | `higgs` | 加载时 | 2, 3, 4 | CUDA | ✅ | ❌ | ❌ |
| [HQQ](./hqq) | `hqq` | 加载时 | 1, 2, 3, 4, 8 | CUDA、XPU | ✅ | ✅ | ❌ |
| [Metal](./metal) | `metal` | 加载时 | 2, 4, 8 | MPS | ✅ | ❌ | ❌ |
| [MXFP4](./mxfp4) | `mxfp4` | 加载时 | 4 | CUDA（计算能力 7.5+）、XPU、CPU | ✅ | ❌ | ❌ |
| [NVFP4](./nvfp4) | `nvfp4` | 加载时 | 4 | 一块 Blackwell GPU | ❌ | ❌ | ✅ |
| [Quanto](./quanto) | `quanto` | 加载时 | 2, 4, 8 | CUDA、MPS、XPU、CPU | ❌ | ✅ | ❌ |
| [Quark](./quark) | `quark` | 仅支持预量化 | 按检查点设置 | CUDA、ROCm、CPU | ❌ | ❌ | ❌ |
| [SINQ](./sinq) | `sinq` | 加载时 | 2, 3, 4, 6, 8 | 一个 CUDA GPU，CPU | ✅ | ✅ | ❌ |
| [SpQR](./spqr) | `spqr` | 仅支持预量化 | 3 | CUDA | ✅ | ❌ | ❌ |
| [torchao](./torchao) | `torchao` | 加载时 | 4, 8 | CUDA、XPU、CPU | ✅ | 仅 8 位方案 | ✅ |
| [VPTQ](./vptq) | `vptq` | 仅支持预量化 | 1–8 | CUDA | ✅ | ❌ | ❌ |

## 使用量化选择器检查内存

[量化选择器](https://huggingface.co/spaces/stevhliu/quantization-picker)会估算模型在每种精度下（包括 KV 缓存）是否能适配您的硬件。选择模型、您的硬件以及该方法需要实现的功能，**Compare** 视图将列出符合条件的方法。

<iframe src="https://stevhliu-quantization-picker.hf.space" frameborder="0" width="100%" height="420"
>

## 基准测试

以下基准测试在 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 内核（在方法支持的情况下）。

<iframe src="https://huggingface.co/datasets/derekl35/quantization-benchmarks/embed/viewer/default/train" frameborder="0" width="100%" height="560px" title="基准测试结果数据集"
>

结果分为三个位范围。

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

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

