# VPTQ

[向量后训练量化（VPTQ）](https://github.com/microsoft/VPTQ)是一种后训练量化（PTQ）方法，它利用向量量化将大语言模型（LLM）量化到极低的比特宽度（<2-bit）。VPTQ 可以在不重新训练的情况下，将 70B 甚至 405B 的模型压缩至 1-2 比特，同时保持较高的精度。这是一种轻量级量化算法，量化一个 405B 模型大约需要 17 小时。VPTQ 支持灵活的量化推理，具有较低的解码开销以及高吞吐量和首词延迟（TTFT）。

运行以下命令以安装 VPTQ，它提供了用于在 NVIDIA 和 AMD GPU 上进行推理的高效内核。

```bash
pip install vptq
```

[VPTQ-community](https://huggingface.co/VPTQ-community) 提供了一系列经过 VPTQ 量化的模型。模型名称中包含了其位宽信息（不包括 cookbook、参数和填充开销）。以 [Meta-Llama-3.1-70B-Instruct-v8-k65536-256-woft] 模型为例。

- 模型名称为 Meta-Llama-3.1-70B-Instruct。
- 质心数量由 65536（2^16）给出。
- 残差质心的数量由 256 (2^8) 给出。

等效位宽计算如下所示。

- index: log2(65536) = 16 / 8 = 2 位
- 残差索引：log2(256) = 8 / 8 = 1 位
- 总位宽：2 + 1 = 3 位

从这里开始，通过 70B * 3-bits / 8-bits/byte 来估算模型大小，总计为 26.25GB。

使用 [from_pretrained()](/docs/transformers/main/zh/main_classes/model#transformers.PreTrainedModel.from_pretrained) 加载 VPTQ 量化模型。

```py
from transformers import AutoTokenizer, AutoModelForCausalLM

quantized_model = AutoModelForCausalLM.from_pretrained(
    "VPTQ-community/Meta-Llama-3.1-70B-Instruct-v16-k65536-65536-woft",
    dtype="auto", 
    device_map="auto"
)
```

若要量化您自己的模型，请参阅 [VPTQ 量化算法教程](https://github.com/microsoft/VPTQ/blob/algorithm/algorithm.md)。

## 基准测试

VPTQ 在不同规模的模型上均能以更低的量化开销实现更高的精度和吞吐量。以下实验结果仅供参考；在合理的参数设置下，VPTQ 能够取得更优的效果，尤其是在模型精度和推理速度方面。

| 模型       | 位宽 | W2↓  | C4↓  | AvgQA↑ | tok/s↑ | mem(GB) | 成本/h↓ |
| ----------- | -------- | ---- | ---- | ------ | ------ | ------- | ------- |
| LLaMA-2 7B  | 2.02     | 6.13 | 8.07 | 58.2   | 39.9   | 2.28    | 2       |
|             | 2.26     | 5.95 | 7.87 | 59.4   | 35.7   | 2.48    | 3.1     |
| LLaMA-2 13B | 2.02     | 5.32 | 7.15 | 62.4   | 26.9   | 4.03    | 3.2     |
|             | 2.18     | 5.28 | 7.04 | 63.1   | 18.5   | 4.31    | 3.6     |
| LLaMA-2 70B | 2.07     | 3.93 | 5.72 | 68.6   | 9.7    | 19.54   | 19      |
|             | 2.11     | 3.92 | 5.71 | 68.7   | 9.7    | 20.01   | 19      |

## 资源

在 VPTQ 在线演示 [Space](https://huggingface.co/spaces/microsoft/VPTQ) 上查看 VPTQ 的示例演示，或尝试运行 VPTQ 推理 [notebook](https://colab.research.google.com/github/microsoft/VPTQ/blob/main/notebooks/vptq_example.ipynb)。

有关更多信息，请阅读 VPTQ [论文](https://huggingface.co/papers/2409.17066)。

