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?

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

LLM量子化 Day 14: AWQQuantizerの内部

実装の全体像

llm-quantizeのAWQ量子化は、MIT HAN Labのllm-awqライブラリを優先的に活用しています。llm-awqはAWQ論文の著者によって開発された公式実装であり、最も信頼性の高い参照実装です。

ライブラリの選択

llm-awq (推奨)
├── MIT HAN Labの公式実装
├── https://github.com/mit-han-lab/llm-awq
└── 最新のアルゴリズム改善を反映

AutoAWQ (レガシー・フォールバック)
├── 2025年5月にアーカイブ
├── https://github.com/casper-hansen/AutoAWQ
└── 既存環境との互換性のため対応

Day 11でllama.cppとの連携について学んだように、複雑なアルゴリズムの実装は専門家に任せるのが賢明です。AWQのスケーリング計算は数学的に複雑であり、llm-awqはこれを最適化された形で提供しています。

量子化フローの詳細

AWQ量子化は以下のステップで進みます:

1. 準備フェーズ

入力の検証
├── モデルパスが有効か
├── 量子化レベルが4bitか(AWQは4bit固定)
└── 出力ディレクトリが書き込み可能か

2. キャリブレーションデータの準備

キャリブレーションデータ
├── ユーザー指定のファイルがあれば読み込む
│   └── JSON形式: ["text1", "text2", ...] または {"text": [...]}
│
└── なければデフォルトを使用
    └── 汎用的な英語テキスト

デフォルトのキャリブレーションデータは、様々なドメイン(技術文書、一般文章、コードなど)をカバーするよう設計されています。

3. モデル読み込み

モデルはllm-awq(またはAutoAWQ)を通じて読み込まれます。この時点で、モデルの構造が分析され、どの層を量子化するかが決定されます。

4. キャリブレーション実行

ここがAWQの核心です:

  1. キャリブレーションデータをモデルに通す
  2. 各層のアクティベーションを記録
  3. アクティベーションの分布から重みの重要度を計算
  4. 重要な重みを保護するスケールを決定

5. 量子化

スケールが決定したら、実際の量子化を行います:

  1. 重みにスケールを適用
  2. 4ビット整数に量子化
  3. メタデータ(スケール値など)を保存

6. 保存

量子化されたモデルはディレクトリとして保存されます:

model-AWQ-4bit/
├── config.json              # モデル設定
├── generation_config.json   # 生成設定
├── tokenizer.json           # トークナイザー
├── tokenizer_config.json
├── special_tokens_map.json
└── model.safetensors        # 量子化された重み

出力サイズの推定

AWQの出力サイズは、以下の式で推定できます:

推定サイズ = 元サイズ × (4/16) × 1.2
  • 元サイズ: パラメータ数 × 2バイト(FP16)
  • 4/16: 16ビットから4ビットへの圧縮
  • 1.2: メタデータのオーバーヘッド(約20%)

7Bモデルの場合

元サイズ: 7B × 2 = 14GB
量子化後: 14GB × 0.25 = 3.5GB
オーバーヘッド込み: 3.5GB × 1.2 = 4.2GB

llm-awqとの連携

ライブラリの検出

まず、llm-awqがインストールされているかを確認します。見つからない場合はAutoAWQ(レガシー)にフォールバックします:

def _has_llm_awq(self) -> bool:
    try:
        from awq.quantize.quantizer import real_quantize_model_weight
        return True
    except ImportError:
        return False

量子化設定

llm-awqには多くの設定オプションがあります:

パラメータ 説明 デフォルト
zero_point ゼロポイント量子化を使用 True
q_group_size グループサイズ 128
w_bit 量子化ビット数 4

llm-quantizeではこれらの設定を合理的なデフォルトで提供しつつ、上級ユーザー向けにカスタマイズも可能にしています。

フォールバック機構

llm-quantizeは3段階のフォールバック機構を持っています:

1. llm-awq (推奨)
   │
   └── 失敗時 → 2. AutoAWQ (レガシー)
                  │
                  └── 失敗時 → 3. 基本構造のみ作成

基本構造のみのフォールバックでは:

  1. 基本的なディレクトリ構造を作成: 正しい形式のconfig.jsonなど
  2. 警告をログ出力: 「llm-awqをインストールすると、より高品質な量子化が可能です」
  3. プレースホルダーファイルを作成: 構造は正しいが、実際の量子化は行われない

このフォールバックは主にテストやデモンストレーション用です。本番環境では必ずllm-awqをインストールしてください。

キャリブレーションデータの形式

llm-quantizeは2つのJSON形式をサポートしています:

形式1: シンプルなリスト

[
    "The quick brown fox jumps over the lazy dog.",
    "Machine learning models require significant computational resources.",
    "Natural language processing has made remarkable progress."
]

形式2: オブジェクト形式

{
    "text": [
        "The quick brown fox jumps over the lazy dog.",
        "Machine learning models require significant computational resources."
    ]
}

どちらでも動作しますが、形式2はメタデータを追加できるため、より拡張性があります。

チェックポイント機能

AWQ量子化も、GGUFと同様にチェックポイント機能をサポートしています。これにより、長時間の処理が中断されても、途中から再開できます。

# 中断された場合、同じコマンドを再実行
llm-quantize quantize model awq -q 4bit

# 出力: "Resuming from checkpoint: 15 layers completed"

Tips: AWQ量子化を成功させるコツ

1. llm-awqをインストールする

# 推奨: llm-awq(公式実装)
pip install llm-awq

# または AutoAWQ(レガシー、アーカイブ済み)
pip install autoawq

GPUが必要です。CUDAが正しくセットアップされていることを確認してください。

2. 十分なVRAMを確保する

7Bモデルの量子化には、約16GB以上のVRAMが必要です。VRAMが足りない場合は、より小さいモデルから始めてください。

3. キャリブレーションデータを選ぶ

用途に合ったキャリブレーションデータを用意しましょう:

  • コーディング: GitHubからのコードスニペット
  • 日本語対応: 日本語テキストを含むデータ
  • 対話: 対話形式のデータ

4. 変換後のテスト

量子化後は、必ず実際のタスクでテストしてください:

from vllm import LLM, SamplingParams

llm = LLM(model="./model-AWQ-4bit", quantization="awq")
params = SamplingParams(max_tokens=100)

outputs = llm.generate(["Write a function to calculate fibonacci:"], params)
print(outputs[0].outputs[0].text)

次回予告

Day 15では「GPTQ形式の概要」として、もう一つのGPU向け量子化形式について解説します。GPTQはAWQとは異なるアプローチで高品質な量子化を実現しています。


実装の複雑さを隠蔽することは、良いソフトウェア設計の特徴です。llm-quantizeを使うユーザーは、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?