← AIページの先頭へ

Quantization: モデルの量子化

量子化 (Quantization) は、メモリ使用量とデータ転送量を削減し、適切なハードウェアでの推論効率を向上させるために、モデル パラメーターまたは中間データを低精度の数値で表します。

1. 量子化手法の分類

Quantization
├── 量子化の対象
│   ├── Weights
│   ├── Activations
│   └── KV Cache
│
├── 数値形式
│   ├── INT8 / INT4
│   ├── FP8 / FP4
│   └── NF4
│
├── 量子化の粒度
│   ├── Per-tensor
│   ├── Per-channel
│   └── Per-group
│
├── 量子化方法
│   ├── PTQ
│   └── QAT
│
├── 量子化アルゴリズム
│   ├── GPTQ
│   ├── AWQ
│   └── SmoothQuant
│
└── ツールとフォーマット
    ├── bitsandbytes
    ├── GGUF
    └── GPTQ / AWQ Model Files

区別する必要があります:

コンセプト分類主な機能
INT4 / INT8数値精度データビット幅を減らす
NF4 / FP4低精度表現異なる数値エンコーディングを使用する
GPTQ量子化アルゴリズム重みの量子化誤差を減らす
AWQ量子化アルゴリズムActivation 情報を使用して感度の高い重みを保護する
SmoothQuant量子化アルゴリズムActivation 量子化の改善
bitsandbytesソフトウェアライブラリ低精度のロードと計算を提供します
GGUFモデルファイル形式重み、定量情報、メタデータを保存する

2.SymmetricとAsymmetric Quantization

Symmetric Quantization

整数値の対称範囲を使用し、ゼロは整数のゼロに対応します。

たとえば:

Float Range: -1.0 ~ 1.0
INT8 Range: -127 ~ 127

量子化:

q=round⁡(x/s)q=\operatorname{round}(x/s)

逆量子化:

x^=q⋅s\hat{x}=q\cdot s

その中には:

  • (x): 元の値。
  • (q): 量子化された整数。
  • (s):Scale。
  • x^\hat{x}: 近似値が回復しました。

Asymmetric Quantization

Zero Point は、整数間隔が非対称な数値分布に対応できるようにするために導入されました。

q=round⁡(x/s)+zq=\operatorname{round}(x/s)+z x^=(q−z)s\hat{x}=(q-z)s

ここで、(z) は Zero Point です。

実際の量子化では、ターゲットの整数範囲に基づいてクリッピングを実行することも必要です。

2 つの方法の間に絶対的な利点や欠点はなく、数値分布、ハードウェアのサポート、および特定の量子化アルゴリズムに依存します。

3. Quantization Granularity: 量子化の粒度

Per-tensor

Tensor 全体では、一連の量子化パラメータが使用されます。

問題は、Channel ごとに値の範囲が大きく異なる可能性があることです。

Channel A: -0.1 ~ 0.1
Channel B: -10  ~ 10

Scale を共有すると、Channel A の精度が大幅に低下する可能性があります。

Per-channel

各 Channel は独立した量子化パラメータを使用します。

Channel 1 → Scale 1
Channel 2 → Scale 2
Channel 3 → Scale 3

重み行列のどの次元が実際に対応するかは、量子化の実装によって異なります。

Per-group / Group-wise

各グループに独立した Scale を使用して、重みをサブグループに分割します。

128 Weights → Scale 1
128 Weights → Scale 2
128 Weights → Scale 3

一般に、Group Size が小さいほど、局所的な数値分布に適応するのが容易になりますが、より多くのメタデータが必要になります。

一般的な Group Size には、32、64、128 などが含まれます。

4. Weight-onlyとWeight-Activation Quantization

W4A16

Weights     → INT4 / 4-bit Format
Activations → FP16 / BF16

主に以下を削減するために使用されます。

  • モデル体重の職業。
  • ビデオ メモリの帯域幅要件。
  • モデルによってロードおよび転送されるデータの量。

多くの 4-bit LLM 推論スキームがこのカテゴリに分類されます。

W8A8

Weights     → INT8
Activations → INT8

重みを圧縮するだけでなく、低精度の行列演算を使用して計算効率を向上させようとしています。

計画主な利点難易度
W4A16重みメモリを大幅に削減Dequantization および Kernel の効率
W8A8低精度の行列計算が可能Activation Quantization
FP8Improved compute and memory efficiency on supported hardware値の範囲、Scale、およびハードウェアの互換性

Activation を量子化するのが難しいのはなぜですか?

Weight is usually fixed after training, and the numerical distribution can be analyzed in advance.

Activation changes with the input content, Token and model layer, and dynamic Outlier may occur.

Activation Quantization therefore often requires more careful calibration or dynamic quantization strategies.

5. PTQ、QAT、Calibration

PTQ:Post-Training Quantization

モデルがトレーニングされた後に量子化します。

一般的な方法:

  • GPTQ。
  • AWQ。
  • SmoothQuant。

完全なモデルを再トレーニングする必要はありません。

QAT:Quantization-Aware Training

トレーニング中に量子化エラーをシミュレートして、モデルを低精度の計算に適応させます。

High-precision training states suitable for gradient updates are usually still retained.

Calibration Dataset

Some PTQ methods require representative samples for analysis:

  • Activation配布。
  • Outlier。
  • 体重に対する感度。
  • 量子化エラー。

For example, provide hundreds to thousands of representative texts for calibration.

Calibration Dataset が実際の使用シナリオに近いほど、通常は合理的な量子化結果が得られます。

But not all quantization methods require Calibration Dataset.

6. GPTQ

GPTQ is a typical post-training weight quantization algorithm.

核となるアイデア:

重みを量子化するとき、近似 2 次情報を使用して量子化誤差を測定し、まだ量子化されていない重みを補正します。

Original Weights
W1 W2 W3 W4
     ↓
Quantize W1
     ↓
Estimate Error
     ↓
Adjust Remaining Weights
     ↓
Continue Quantization

主な特徴:

  • 4-bit Weight-only Quantizationと共用です。
  • 多くの場合、校正データが必要になります。
  • 量子化プロセスには時間がかかる場合があります。
  • より低いビット幅でより良いモデル品質を維持できます。

The advantage of GPTQ lies in quantization error control rather than guaranteeing optimal inference speed on any hardware.

7. AWQ

AWQ:Activation-aware Weight Quantization。

核となるアイデア:

Different weights in the model have different importance for the final output. Weight Magnitude を観察するだけでは十分ではありません。 The characteristics corresponding to Activation must also be considered.

AWQ は、Activation Statistics を介して機密重みまたは Channel を識別し、Scaling などの方法を使用して量子化誤差を削減します。

Calibration Data
       ↓
Activation Statistics
       ↓
Identify Salient Channels
       ↓
Protect Sensitive Weights
       ↓
Quantized Model

GPTQ と比較:

コントラストGPTQAWQ
主な基礎おおよその二次誤差情報Activation Statistics
中核戦略量子化誤差補正デリケートな重み物を保護する
一般的な用途4-bit 重みの量子化4-bit 重みの量子化
校正が必要かどうか通常必要な通常必要な

GPTQ と AWQ はどちらも一般的な低ビット推論の選択肢であり、実際のパフォーマンスはモデル、ハードウェア、推論エンジンによって異なります。

8. SmoothQuant

SmoothQuant は主に、Activation では量子化が難しい問題を解決するために使用されます。

所見:

Weights     → 比較的数値化しやすい
Activations → Outlier より明白な

中心となるアイデアは、Activation の数値範囲の圧力の一部を等価変換を通じて Weight 側に転送することです。

Original:
Activation Range → Large
Weight Range     → Moderate

After Smoothing:
Activation Range → Smaller
Weight Range     → Larger

したがって、W8A8 Quantization の実装が容易になります。

GPTQ および AWQ の典型的な Weight-only スキームと比較して、SmoothQuant は Weight + Activation の低精度計算に重点を置いています。

9. bitsandbytes

bitsandbytes は、低精度の計算および量子化ツール ライブラリであり、Hugging Face Transformers および PEFT と組み合わせてよく使用されます。

一般的な用途:

  • 8-bitモデル搭載。
  • 4-bitモデル搭載。
  • NF4 / FP4。
  • QLoRA微調整。

4-bit NF4読み込み中

import torch
from transformers import (
    AutoModelForCausalLM,
    BitsAndBytesConfig,
)

quant_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)

model = AutoModelForCausalLM.from_pretrained(
    "your-model-id",
    device_map="auto",
    quantization_config=quant_config,
)

ここで:

  • load_in_4bit: 4-bit 重み量子化を有効にします。
  • bnb_4bit_quant_type: NF4を選択します。
  • bnb_4bit_compute_dtype:該当する演算精度を設定します。
  • bnb_4bit_use_double_quant: 量子化された部分量子化メタデータ。

実際の GPU のサポートは、bitsandbytes、PyTorch、およびデバイス環境によって異なります。

bitsandbytes は主に Hugging Face エコシステムおよび QLoRA の低精度ロードに適していますが、それが必ずしも高同時実行性のプロダクション推論に最適なソリューションであることを意味するわけではありません。

10. NF4、FP4、Double Quantization

NF4:NormalFloat 4-bit

NF4 は、ほぼ正規分布する重み用に設計された不均一 4-bit 表現です。

通常の均一量子化には固定値の間隔がありますが、NF4 は特定の分布に適合する量子化レベルを使用します。

QLoRA では特に重要です。

FP4

FP4 は、4-bit 浮動小数点表現のクラスの総称です。

FP4 のエンコーディングは実装間で異なる場合があることに注意してください。 bitsandbytes の FP4 と、最新の GPU でサポートされている他の FP4 形式は、直接同じ形式とは見なされません。

Double / Nested Quantization

重みの量子化後、Scale などのパラメータも保存する必要があります。

Double Quantization は、一部の量子化メタデータをさらに圧縮します。

Original Weights
      ↓
4-bit Quantization
      ↓
Weights + Scales
      ↓
Quantize Scales
      ↓
Reduce Metadata Overhead

これにより、すでに量子化されたすべての重みを再量子化するのではなく、量子化されたメタデータのコストが削減されます。

11. GGUF Quantization

GGUF は、llama.cpp エコシステムで一般的に使用されるモデル ファイル形式です。

一般的な量子化タイプ:

タイプ特長
Q4_0以前の 4-bit Block Quantization
Q4_K_SK-Quant 4-bit、小型ハイブリッド方式
Q4_K_MK-Quant 4-bit、共通バランス方式
Q5_K_M精度が高く、一般にファイルが大きくなる
Q6_K6-bit K-Quant
Q8_08-bit 量子化、通常は品質損失が少なくなります

Q4_K_M および Q5_K_M

K-Quant は、ブロック量子化、Scale のグループ化などを使用して重みを保存します。

その中には:

  • Q4 / Q5 は主量子化ビット幅を表します。
  • KはK-Quantシリーズを意味します。
  • _S / _M は、さまざまなモデルレベルの量子化組み合わせ戦略を表します。

Q4_K_M と Q5_K_M は、異なる Tensor に対して異なる量子化精度を使用する場合があり、すべての Tensor が厳密に同じビット幅であるわけではありません。

したがって、実際のモデルのサイズは単純なものよりも大きくなります。

Parameters × 4 bits

量子化バージョンを選択するにはどうすればよいですか?

同じモデルの場合、一般的に次のように理解できます。

Q4_K_M → 記憶力と品質のバランスにもっと注意を払う
Q5_K_M → 精度の向上と引き換えにメモリを増やしたい
Q6_K   → 量子化誤差をさらに低減
Q8_0   → 通常は元の高精度モデルに近い

これはモデル間の絶対的な品質ランキングではありません。実際の結果を得るには、同じモデルの異なる量子化バージョンを比較する必要があります。

llama.cpp によって提供される量子化参照データは、Q5_K_M のファイル サイズが一般的に Q4_K_M よりも大きく、Perplexity の損失が低いことを示しています。

12. FP8とFP4

FP8

FP8 共通形式:

E4M3 → 1 Sign + 4 Exponent + 3 Mantissa
E5M2 → 1 Sign + 5 Exponent + 2 Mantissa

E4M3 は有効数字の精度が高く、E5M2 は指数範囲が広くなります。

浮動小数点表現は INT8 よりも広いダイナミック レンジをカバーできますが、それでも適切な Scale 管理が必要です。

最新のデータ センター GPU FP8 のハードウェア サポートは向上し続けているため、大規模な推論とトレーニングにおいてその重要性がますます高まっています。

FP4

FP4は、Activationの重みとデータ量をさらに削減できます。

ただし、FP4 の実際のパフォーマンスは、GPU に対応する低精度コンピューティング ハードウェア、量子化戦略、および Kernel があるかどうかに大きく依存します。

FP4 が bit を 4 つ使用しているからといって、FP8 の 2 倍の速度が必要であるという意味ではありません。

13. Dequantizationと推論速度

Dequantization は、量子化された値を近似浮動小数点値に復元するか、計算 Kernel 内で同等のデータ変換と計算を完了します。

たとえば:

INT4 Weights
     ↓
Read Compressed Weights
     ↓
Dequantization / Fused Kernel
     ↓
Matrix Computation

W4A16 の方が速いのはなぜですか?

モデルにはもともと BF16 の 16 GB 重みがあったと仮定します。

BF16 Weights ≈ 16 GB
INT4 Weights ≈ 4 GB + Metadata

Memory-bound の Decode の場合、重み付けされた読み取りの数を減らすと速度が大幅に向上する可能性があります。

量子化が必ずしも高速ではないのはなぜですか?

実際の速度は以下によって異なります。

  • GPU は、対応する低精度演算をサポートします。
  • 適切に最適化された Quantized Kernel はありますか。
  • Dequantization オーバーヘッド。
  • Batch Size。
  • Prefill / Decode 比率。
  • Kernel Fusion。
  • Memory Bandwidth。

GPU に強力な BF16 Tensor Core 実装があり、選択された INT4 Kernel 実装が貧弱な場合、INT4 はビデオ メモリを節約するだけで、速度は向上しない可能性があります。

したがって、メモリの節約、モデルの品質、および実際の推論パフォーマンス は個別に測定する必要があります。

14. KV Cache Quantization

量子化はWeightsだけでなくKV Cacheでも使用できます。

たとえば:

Model Weights: INT4
KV Cache:      FP8 / INT8
Activations:   BF16

KV Cache Quantization の主な値:

  • 長いコンテキストのメモリ フットプリントを削減します。
  • サポートできる同時実行数を増やします。
  • Attention が KV Cache から読み込むデータ量を減らします。

その代償として、追加の精度誤差と量子化計算のオーバーヘッドが発生する可能性があります。

長いコンテキストと高い同時実行性の推論の場合、KV Cache Quantization の意味は非常に明らかである可能性があります。

15. 量子化スキームと推論エンジン

モデルが実行できるかどうかは、量子化方法だけでなく、モデルのファイル形式と推論エンジンがサポートする Kernel によっても決まります。

計画共通の生態代表的な用途
GPTQTransformers、互換性のある GPU 推論エンジン4-bit 重み推論
AWQTransformers、互換性のある GPU 推論エンジン4-bit 重み推論
bitsandbytes NF4Transformers、PEFT低精度ロード、QLoRA
GGUF Q4_K_Mllama.cpp、Ollamaローカルの低メモリ推論
FP8vLLM、SGLang、その他の互換エンジンデータセンター GPU 推論

具体的なサポートは、推論エンジンのバージョン、モデル アーキテクチャ、ハードウェアによって異なります。

は、GGUF、GPTQ、AWQ ファイルを単純に交換可能なモデル ファイルとして扱うことはできません。

16. 量子化効果の評価方法

量子化には 3 つの次元を同時に比較する必要があります。

寸法インジケーター
Memoryモデルボリューム、VRAM、KV Cache
PerformanceTTFT、TPOT、Throughput
QualityPerplexity、Benchmark、タスク成功率

同じ条件で比較することをお勧めします。

Same Model Architecture
Same Evaluation Dataset
Same Hardware
Same Input / Output Length
Same Concurrency
       ↓
BF16 vs INT8 vs INT4

Quality

次のことを観察できます。

  • Perplexity。
  • Benchmark Accuracy。
  • コード生成の精度。
  • ツール呼び出し精度率。
  • ロングコンテキストタスクのパフォーマンス。

量子化誤差は、さまざまな程度でさまざまなタスクに影響を与える可能性があるため、単一の Benchmark だけに頼ってモデルの品質を判断することはできません。

17. LoRA、QLoRA、Distillation、Pruning

これらの手法は量子化に関連していますが、異なる問題を解決します。

LoRA

LoRA (Low-Rank Adaptation) は、効率的なパラメータ微調整方法です。

特定の重み行列が (W) であると仮定し、トレーニング中に元の行列をフリーズし、低ランクの更新を追加します。

[ W'=W+BA ]

その中には:

  • (A)、(B): トレーニング可能な低ランク行列。
  • Rank (r): 低ランクの更新の容量を制御します。
  • 元のウェイト (W): 通常は固定されたままになります。

したがって、トレーニングする必要がある新しいパラメータは少なくなります。

QLoRA

量子化と LoRA を組み合わせます。

Base Model
    ↓
4-bit NF4
    ↓
Frozen Base Weights
    ↓
Train LoRA Adapters

主な目的は、モデルの推論を高速化することではなく、大規模なモデルを微調整する際のメモリ要件を削減することです。

Distillation

Student Model をトレーニングするには、Teacher Model を使用します。

一般的な方法:

  • Output Distillation。
  • Logit Distillation。
  • Reasoning / Trace Distillation。

通常の目標は、大規模なモデルの一部の機能を小規模なモデルに移すことです。

Pruning

重要でないパラメータ、チャネル、または構造を削除またはスパース化します。

含まれるもの:

  • Unstructured Pruning: 部分的な重みをゼロにリセットします。
  • Structured Pruning: Head、Channel、Neuron、または Layer を削除します。

注: スパース化は特定の加速と等しくないため、実際の速度はハードウェアと Sparse Kernel のサポートによって異なります。

技術比較

テクノロジーコアの動き主な目的
Quantization数値精度を下げるメモリとデータ転送を削減する
LoRA低ランクの増分パラメータのトレーニング低コストでの微調整
QLoRA定量ベーシックモデル+LoRA低メモリの微調整
DistillationTeacher トレーニング Student知識の移行とミニモデリング
Pruningパラメータを削除またはスパース化するモデル構造または計算を圧縮する

概要

量子化にとって最も重要な知識は次のように要約できます。

分類核となる知識
基本原則Scale、Zero Point、Symmetric、Asymmetric
量子化の粒度Per-tensor、Per-channel、Per-group
量子化の対象Weight、Activation、KV Cache
方法PTQ、QAT、Calibration
コアアルゴリズムGPTQ、AWQ、SmoothQuant
特殊な生態bitsandbytes、NF4、GGUF、FP8
性能評価Memory、Quality、TTFT、TPOT、Throughput

実際の選択は次のシナリオから開始できます。

Local Inference
    ↓
GGUF + llama.cpp / Ollama

GPU Weight-only Inference
    ↓
GPTQ / AWQ その他の互換性のあるソリューション

GPU FP8 Inference
    ↓
Hardware-supported FP8 Kernels

Low-memory Fine-tuning
    ↓
NF4 + QLoRA

基本原則:

量子化は、主に数値精度を下げることでメモリとデータ送信を節約します。ただし、高速化できるかどうか、どの程度加速されるか、および品質の低下がどの程度になるかは、特定のモデル、量子化スキーム、ハードウェア、および推論エンジンによって異なります。


参考資料