0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LLM量子化 Day 13: AWQ - アクティベーションを見る量子化

Posted at

科学と神々株式会社アドベントカレンダー 2025

LLM量子化 Day 13: AWQ - アクティベーションを見る量子化

GPU推論の世界へ

ここまでGGUF形式について学んできました。GGUFはCPU推論に最適化された形式で、ローカルPCでLLMを動かす際の最良の選択肢です。

しかし、大規模なサービスを運営する場合や、より高速な応答が必要な場合は、GPU推論が必要になります。今日から3日間、GPU推論向けの量子化形式について学びましょう。

AWQとは何か

AWQ(Activation-aware Weight Quantization)は、2023年にMITの研究者によって提案された量子化手法です。名前の通り、「アクティベーション(活性化)を意識した重みの量子化」を行います。

核心的なアイデア

従来の量子化は、すべての重みを同じように扱います。しかしAWQは、「どの重みが重要か」をアクティベーションの分布から判断します。

従来の量子化:
すべての重みを均等に4ビットに量子化
→ 重要な重みも、そうでない重みも同じ精度

AWQの量子化:
アクティベーションを分析 → 重要な重みを特定 → 重要な重みを保護
→ 重要度に応じた量子化で品質を維持

なぜアクティベーションを見るのか

重みの重要度を判断するとき、「重みの値が大きい」だけでは不十分です。大きな重みでも、実際の推論であまり使われないなら、精度を落としても影響は小さいでしょう。

逆に、小さな重みでも、頻繁に大きなアクティベーションと掛け合わされるなら、その重みは非常に重要です。

具体例で考える

重みA: 値 0.5、平均アクティベーション 0.01
  → 出力への寄与: 0.5 × 0.01 = 0.005

重みB: 値 0.1、平均アクティベーション 2.0
  → 出力への寄与: 0.1 × 2.0 = 0.2

重みAは値が大きいですが、実際の影響は重みBの40分の1です。AWQは、重みBのような「実際に重要な重み」を優先的に保護します。

AWQの仕組み:スケーリングによる保護

AWQは、重要な重みを「スケーリング」という手法で保護します。

スケーリングのイメージ

量子化は「値を丸める」処理です。例えば、小数を整数に丸めるとき:

0.4 → 0
0.6 → 1

この丸め誤差は、元の値が小さいほど相対的に大きくなります。

AWQは、重要な重みをあらかじめ大きくスケール(拡大)してから量子化します:

元の値: 0.4
スケール: 10倍
量子化前: 4.0
量子化後: 4
逆スケール: 0.4

誤差がゼロに!

推論時には逆スケールを適用するため、結果は正しく計算されます。

AWQの利点

1. 高い推論品質

同じ4ビットでも、AWQは他の手法より高い品質を維持します:

手法 Perplexity増加 品質維持率
単純4ビット +8〜12% 88〜92%
GPTQ 4ビット +3〜5% 95〜97%
AWQ 4ビット +1〜3% 97〜99%

2. vLLMとの相性

AWQはvLLM(高速なLLM推論エンジン)に最適化されています。vLLMはAWQ形式を直接読み込み、効率的なGPUカーネルで推論を実行します。

from vllm import LLM

# AWQモデルを読み込む
llm = LLM(
    model="./my-model-AWQ-4bit",
    quantization="awq",
)

# 高スループット推論
outputs = llm.generate(prompts, sampling_params)

3. メモリ効率

7Bモデルの場合:

  • FP16: 約14GB VRAM
  • AWQ 4ビット: 約4GB VRAM

残りのVRAMをKVキャッシュに使えるため、より長いコンテキストや、より多くの同時リクエストを処理できます。

AWQの欠点

1. GPU専用

AWQはGPU推論を前提とした形式です。CPU推論には適しません。ローカルPCで試したいなら、GGUFを選びましょう。

2. キャリブレーションが必要

AWQは、アクティベーションの分布を分析するために「キャリブレーションデータ」が必要です。これは追加の計算時間を要します。

3. 4ビット固定

現在のAWQ実装は4ビット量子化のみをサポートしています。8ビットや2ビットが必要な場合は、GPTQを検討してください。

キャリブレーションデータの選び方

AWQの品質は、キャリブレーションデータに大きく依存します。

理想的なキャリブレーションデータ

  1. ターゲットタスクに近いデータ: コーディング支援に使うなら、コードを含むデータ
  2. 十分な多様性: 様々なトピックとスタイルを含む
  3. 適切な量: 通常256〜512サンプルで十分

デフォルトデータの限界

llm-quantizeはデフォルトのキャリブレーションデータを提供しますが、これは汎用的なテキストです。特定のタスクで最高品質を求めるなら、自前のデータを用意することをお勧めします。

# カスタムキャリブレーションデータを使用
llm-quantize quantize model awq -q 4bit \
    --calibration-data ./my_data.json \
    --calibration-samples 512

GGUFとAWQの使い分け

条件 推奨形式
ローカルPC、CPU推論 GGUF
ローカルPC、GPU推論 GGUF(CUDA対応)またはAWQ
サーバー、高スループット AWQ
vLLMを使用 AWQ
llama.cppを使用 GGUF
様々なビット幅が必要 GPTQ

Tips: AWQ量子化のコツ

1. 十分なキャリブレーションサンプルを使う

256サンプルがデフォルトですが、品質を求めるなら512に増やすことを検討してください。

2. グループサイズを調整する

デフォルトの128は多くの場合に適切ですが、品質重視なら64、速度重視なら256を試してください。

3. 変換後は必ず検証する

# 簡単な推論テスト
vllm serve ./my-model-AWQ-4bit --port 8000
curl localhost:8000/v1/completions -d '{"prompt": "Hello", "max_tokens": 10}'

次回予告

Day 14では「AWQQuantizerの内部」として、llm-quantizeがAWQ量子化をどのように実装しているか、llm-awqライブラリとの連携について解説します。


AWQは「すべての重みを平等に扱わない」という発想の転換から生まれました。機械学習の世界では、このような「人間の直感に反するアイデア」がブレークスルーを生むことがよくあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?