# AQLM

言語モデルの加法的量子化（[AQLM](https://huggingface.co/papers/2401.06118)）は、複数の重みをまとめて量子化し、それらの間の相互依存性を活用します。AQLMでは、8〜16個の重みのグループを、複数のベクトルコードの和として表現します。

AQLMは[PEFT](https://huggingface.co/docs/peft)ライブラリによる[LoRA](https://huggingface.co/docs/peft/package_reference/lora)でのファインチューニングにも対応しており、[torch.compile](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html)と完全に互換性があるため、より高速な推論と学習を実現できます。

GPUおよびCPUでの推論と学習のカーネルサポート付きでAQLMライブラリをインストールするには、以下のコマンドを実行してください。

```bash
pip install aqlm[gpu,cpu]
```

[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) で AQLM 量子化モデルを読み込みます。

```python
from transformers import AutoTokenizer, AutoModelForCausalLM

quantized_model = AutoModelForCausalLM.from_pretrained(
    "ISTA-DASLab/Mixtral-8x7b-AQLM-2Bit-1x16-hf",
    dtype="auto", 
    device_map="auto"
)
```

## 設定

AQLMの量子化設定は、主に使用されるコードブックの数と、ビット単位のコードブックサイズによって異なります。最も一般的な設定と、対応する推論カーネルを以下に示します。

| カーネル | コードブックの数 | コードブックサイズ、ビット数 | 表記 | 精度 | 高速化     | 高速なGPU推論 | 高速なCPU推論 |
|---|---------------------|---------------------|----------|-------------|-------------|--------------------|--------------------|
| Triton | K                   | N                  | KxN     | -        | 約0.7倍まで | ✅                  | ❌                  |
| CUDA | 1                   | 16                  | 1x16     | ベスト        | 最大で約1.3倍 | ✅                  | ❌                  |
| CUDA | 2                   | 8                   | 2x8      | OK          | 最大で約3.0倍 | ✅                  | ❌                  |
| Numba | K                   | 8                   | Kx8      | 良い        | 最大約4.0倍 | ❌                  | ✅                  |

## リソース

AQLMのデモ[ノートブック](https://colab.research.google.com/drive/1-xZmBRXT5Fm3Ghn4Mwa2KRypORXb855X?usp=sharing)を実行して、モデルの量子化方法、量子化済みモデルをHubにプッシュする方法など、さらに多くの例を確認してください。

AQLMの[リポジトリ](https://github.com/Vahe1994/AQLM)には、その他のデモノートブックの例があります。

