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")利点
欠点
比較
関連用語
よくある質問
AWQは何ビットまで量子化できる?
主に4bit(w_bit=4)での量子化を対象に設計されており、活性化値に基づき重要な重みを保護することで4bit程度でも高い精度を維持しやすい。
AWQで量子化したモデルはどのツールで推論できる?
AutoAWQライブラリのほか、vLLMやHugging Face Transformers、TGI等がAWQ形式のモデルの読み込みに対応している。