Re Reference AI

技術

AWQとは

Activation-aware Weight Quantization

活性化値の分布をもとに重要な重みを特定し、その精度を保護しながら量子化するLLM向けの重み量子化手法

モデル圧縮軽量化

ひとことで言うと

AIモデルの中で特に重要な部分だけ精度を保ちながら、全体を軽量化する量子化手法。

概要

AWQ(Activation-aware Weight Quantization)とは、モデルの活性化値(推論時の中間出力)の分布を観察し、出力への影響が大きい「重要な重み」を特定したうえで、その精度を保護しながら量子化するLLM向けのPTQ手法。 重みの大きさそのものではなく、対応する活性化値の大きさに着目して重要な重みのチャネルを選び出し、それらのチャネルにスケーリングを適用することで、量子化誤差の影響を受けやすい重要な重みの精度を実質的に保護する。 GPTQのように逆ヘッセ行列を使った複雑な最適化を必要とせず、比較的シンプルな計算で量子化を完了できるため、処理自体の速さと量子化後の精度の両立を狙った手法として知られる。 エッジデバイスやオンデバイスLLM推論など、限られたメモリ環境でのモデル展開にも活用されている。

背景

LLMの重みを量子化する際、全ての重みを一様に扱うと、出力への影響が大きい一部の重みの精度低下がモデル全体の性能へ大きく影響することがある。AWQは、活性化値の分布から重要な重みを特定し、そこを重点的に保護することで、量子化による性能低下を抑えるために考案された。

歴史

2023年6月: MIT(Song Han研究室)のLin・Tang・Tang・Yang・Hanらが、論文「AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration」を発表。 2024年: MLSys 2024にてBest Paper Awardを受賞。

コード例

AutoAWQによる量子化(概念例)

from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer

model_path = "mistralai/Mistral-7B-v0.1"
model = AutoAWQForCausalLM.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)

quant_config = {"zero_point": True, "q_group_size": 128, "w_bit": 4, "version": "GEMM"}
model.quantize(tokenizer, quant_config=quant_config)
model.save_quantized("mistral-7b-awq")

利点

  • 活性化値に基づき重要な重みを重点的に保護するため、量子化後も高い精度を維持しやすい
  • 逆ヘッセ行列等の複雑な計算を必要とせず、比較的シンプルな計算で量子化を完了できる
  • vLLMやTGI(Text Generation Inference)等、主要な推論サーバーでAWQ形式のモデルがサポートされている

欠点

  • 活性化値の分布を把握するためのキャリブレーションデータの選定が、量子化結果の品質に影響する
  • 活性化値の分布が学習時と大きく異なる入力に対しては、手法の効果が薄れやすい
  • グループサイズ等のハイパーパラメータの選択が、量子化後の精度と速度のバランスに影響する

比較

  • GPTQGPTQとAWQは、いずれもLLM向けに開発された代表的な4bit量子化手法であり、アルゴリズムのアプローチが異なる
  • PTQAWQは、活性化値の分布に基づき重要な重みを保護する代表的なPTQ手法の1つ

関連用語

GPTQPTQ量子化INT4

よくある質問

AWQは何ビットまで量子化できる?

主に4bit(w_bit=4)での量子化を対象に設計されており、活性化値に基づき重要な重みを保護することで4bit程度でも高い精度を維持しやすい。

AWQで量子化したモデルはどのツールで推論できる?

AutoAWQライブラリのほか、vLLMHugging Face Transformers、TGI等がAWQ形式のモデルの読み込みに対応している。

参考文献