# VPTQ

[Vector Post-Training Quantization (VPTQ)](https://github.com/microsoft/VPTQ)は、ベクトル量子化を活用してLLMを極めて低いビット幅（<2ビット）で量子化するPost-Training Quantization (PTQ)手法です。VPTQは、再学習なしで70Bモデル、さらには405Bモデルを1〜2ビットに圧縮しつつ、高い精度を維持できます。軽量な量子化アルゴリズムであり、405Bモデルの量子化に約17時間かかります。VPTQは、デコード時のオーバーヘッドが低く、スループットとTime To First Token (TTFT)が高い、俊敏な量子化推論を特徴としています。

以下のコマンドを実行して、NVIDIAおよびAMD GPUでの推論に効率的なカーネルを提供するVPTQをインストールします。

```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ビット
- residual index: log2(256) = 8 / 8 = 1-bit
- 総ビット幅: 2 + 1 = 3ビット

ここから、モデルサイズを推定します。70B * 3-bits / 8-bits/byte を計算すると、合計 26.25GB となります。

[from_pretrained()](/docs/transformers/main/ja/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 Online Demo [Space](https://huggingface.co/spaces/microsoft/VPTQ)でデモを確認するか、VPTQ推論の[notebook](https://colab.research.google.com/github/microsoft/VPTQ/blob/main/notebooks/vptq_example.ipynb)を実行してみてください。

詳細については、VPTQの[論文](https://huggingface.co/papers/2409.17066)をお読みください。

