# 概要

Quantization（量子化）は、モデルの重み、場合によってはアクティベーションを、より少ないビット数で保存することで、モデルが消費するメモリ量を削減します。モデルは通常、bf16で読み込まれ、これはパラメータごとに2バイトを必要とします。8Bのパラメータを持つモデルの場合、bf16では重みに約16GB、8ビットでは約8GB、4ビットでは約4〜5GBのメモリが必要です。ビット数を減らすと精度が多少犠牲になりますが、各量子化手法は、メモリ、速度、精度の間に異なるトレードオフをもたらします。

Transformers は [from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) を通じて 20 種類以上の量子化手法を統合しているため、選択した手法にかかわらず、同じ読み込みコードを使用できます。

## 量子化モデルを使用する2つの方法

量子化の使用方法は、チェックポイントがすでに量子化済みかどうかによって異なります。

| あなたは | 実施する内容 | メソッド |
|---|---|---|
| フルプレシションのチェックポイント | `from_pretrained` に量子化設定を渡すと、重みの読み込み時に量子化が行われます。 | [モデルの読み込み時に量子化を行う](#quantize-a-model-while-loading) |
| すでに量子化済みのチェックポイント | 量子化設定なしで`from_pretrained`を呼び出します。Transformersは、チェックポイントの`config.json`または指定したGGUFファイルからメソッドを読み取ります。 | [事前量子化済みチェックポイントを読み込む](#load-a-pre-quantized-checkpoint) |

AWQ、AutoRound、AQLM、compressed-tensors、GGUFなどの一部のメソッドは、チェックポイントからの読み込みのみに対応しています。まず、そのメソッド専用のライブラリでモデルを量子化し、その後、Transformersで結果を読み込みます。

## 読み込み時にモデルを量子化

メソッドの config クラスを作成し、`quantization_config` に渡します。以下の例では、[bitsandbytes](./bitsandbytes) を使用して 8B モデルを 4 ビットで読み込みます。

```py
import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig

quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B-Instruct",
    quantization_config=quantization_config,
    device_map="auto",
)
```

このグループの各メソッドには、[TorchAoConfig](/docs/transformers/main/ja/main_classes/quantization#transformers.TorchAoConfig) や [BitsAndBytesConfig](/docs/transformers/main/ja/main_classes/quantization#transformers.BitsAndBytesConfig) のような独自の設定クラスがあります。ほとんどのメソッドはキャリブレーション用のデータセットを必要としません。[GPTQ](./gptq) は例外で、モデルの読み込み時にデータセットを用いてキャリブレーションを行います。

## 事前量子化されたチェックポイントを読み込む

事前量子化済みチェックポイントには、`config.json` に `quantization_config` が保存されています。`from_pretrained` がこれを見つけると、対応する量子化器が自動的に選択されます。

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/zephyr-7B-alpha-AWQ",
    device_map="auto",
)
print(model.config.quantization_config.quant_method)
```

チェックポイントを読み込む前に、そのメソッドが依存するライブラリをインストールしてください。各メソッドのページには、インストールすべき内容が記載されています。カーネルバックエンドなど、読み込みオプションを変更するには、同じタイプの設定を渡します。そのオプションは、チェックポイントに保存されているオプションとマージされます。

### GGUF チェックポイント

GGUF チェックポイントは、重み、設定、トークナイザーを単一のファイルに格納する形式であり、`from_pretrained` が読み取る `config.json` は存在しません。ファイル名は `gguf_file` で指定します。

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "unsloth/Qwen3.5-4B-GGUF",
    gguf_file="Qwen3.5-4B-Q4_K_M.gguf",
)
```

ほとんどのGGUFモデルは読み込み時にフル精度へデクォンタイズされるため、量子化されていないモデルと同量のメモリを消費します。重みがパックされた状態のまま保持されるのは、[kernels](https://huggingface.co/docs/kernels/index)パッケージがインストールされているMPS環境でのQwen3.5およびQwen3.5 MoEの場合のみです。詳細は[GGUF](./gguf)を参照してください。

## 量子化モデルを保存する

[save_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.save_pretrained) または [push_to_hub()](/docs/transformers/main/ja/main_classes/model#transformers.utils.PushToHubMixin.push_to_hub) を呼び出して、量子化された重みとその `quantization_config` を保存します。すべてのメソッドで量子化された重みを保存できるわけではありません。

## メソッドを選択

[手法を選択する](./selecting)では、一般的な目的に応じた出発点を提案し、すべての手法をハードウェア、ビット幅、省メモリ効果、ファインチューニング、および`torch.compile`のサポートという観点で比較しています。[量子化ピッカー](https://huggingface.co/spaces/stevhliu/quantization-picker)を使用して、各精度でモデルがハードウェアのメモリに収まるかどうかを確認できます。

## その他のツール

これらのツールは、Transformers の外部でモデルを量子化します。

- [Optimum](https://huggingface.co/docs/optimum/index)は、Intel CPUやONNX Runtimeなどの特定のハードウェアやランタイム向けにモデルを量子化します。
- Hub Spaces はモデルを量子化し、結果をあなたのアカウントにプッシュします:[bitsandbytes](https://huggingface.co/spaces/bnb-community/bnb-my-repo)、[GGUF](https://huggingface.co/spaces/ggml-org/gguf-my-repo)、[MLX](https://huggingface.co/spaces/mlx-community/mlx-my-repo)。

## リソース

- [Hugging Faceによる量子化の基礎](https://www.deeplearning.ai/short-courses/quantization-fundamentals-with-hugging-face/)コース
- [Quantization in Depth](https://www.deeplearning.ai/short-courses/quantization-in-depth)コース

## 次のステップ

- 量子化スキーム、粒度、および技術の仕組みについては、[Quantization concepts](./concept_guide)を参照してください。
- [quantized cache](../kv_cache#quantized-cache) を使用して KV キャッシュを量子化し、長い生成時のメモリ使用量を削減します。
- [Quantizing exports](../exporters_quantization)でモデルをエクスポートしながら量子化します。
- [量子化メソッドの貢献](./contribute)で新しいメソッドを貢献してください。

