# Optimum Quanto

[Quanto](https://github.com/huggingface/optimum-quanto)は、[Optimum](https://huggingface.co/docs/optimum/index)向けのPyTorch量子化バックエンドです。重みの線形量子化（float8、int8、int4、int2）に対応しており、フルプレシジョンモデルとほぼ同等の精度を実現します。Quantoはあらゆるモデルのモダリティやデバイスと互換性があるため、ハードウェアを問わず簡単に利用できます。

Quanto は、より高速な生成のために [torch.compile](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html) とも互換性があります。

次のコマンドでQuantoをインストールします。

```bash
pip install optimum-quanto accelerate transformers
```

[QuantoConfig](/docs/transformers/main/ja/main_classes/quantization#transformers.QuantoConfig) を作成し、量子化対象の `weights` パラメータを指定してモデルを量子化します。これは、[torch.nn.Linear](https://pytorch.org/docs/stable/generated/torch.nn.Linear.html) レイヤーを含む限り、どのモダリティのモデルにも適用できます。

> [!TIP]
> Transformers の統合は、重みの量子化のみをサポートしています。活性化の量子化、キャリブレーション、または QAT が必要な場合は、Quanto ライブラリを直接使用してください。

```py
from transformers import AutoModelForCausalLM, AutoTokenizer, QuantoConfig

quant_config = QuantoConfig(weights="int8")
model = transformers.AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B", 
    dtype="auto", 
    device_map="auto", 
    quantization_config=quant_config
)
```

## torch.compile

Quantoモデルを[torch.compile](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html)でラップして、生成を高速化します。

```py
import torch
from transformers import AutoModelForSpeechSeq2Seq, QuantoConfig

quant_config = QuantoConfig(weights="int8")
model = AutoModelForSpeechSeq2Seq.from_pretrained(
  "openai/whisper-large-v2",
  dtype="auto",
  device_map="auto",
  quantization_config=quant_config
)

model = torch.compile(model)
```

## リソース

ライブラリの設計やベンチマークについて詳しく知るには、[Quanto: a PyTorch quantization backend for Optimum](https://huggingface.co/blog/quanto-introduction) というブログ記事をお読みください。

より実践的な例については、Quantoの[ノートブック](https://colab.research.google.com/drive/16CXfVmtdQvciSh9BopZUDYcmXCDpvgrT?usp=sharing)をご覧ください。

