大規模言語モデルの量子化: GPTQ、AWQ、GGUF を比較する

大規模言語モデル (LLM) は、近年急速な進歩を遂げ、テキスト生成、翻訳、要約など、さまざまなタスクにおいて驚くべき成果をあげています。しかし、LLM は膨大な計算リソースを必要とするため、消費者のハードウェアでは実行するのが難しいという課題がありました。この課題に対処するために、量子化技術が注目されています。

量子化技術は、LLM の重みをより少ないビット数で表現することで、モデルのサイズを削減し、メモリ使用量を減らし、推論速度を向上させることを目指しています。このブログでは、LLM の量子化に用いられる3つの主要な方法、GPTQ、AWQ、GGUF を比較検討し、それぞれの利点、欠点、ユースケースについて解説します。

はじめに

  • 大規模言語モデル (LLM) は、膨大なテキストデータでトレーニングされた、高度な言語理解と生成能力を持つニューラルネットワークです。LLM の規模は日々大きくなっており、その性能向上は目覚ましいものがあります。しかし、LLM は大量のメモリと処理能力を必要とするため、消費者のハードウェアでは実行が困難でした。
  • 量子化技術 は、LLM の重みをより少ないビット数で表現することで、モデルのサイズを削減し、メモリ使用量を減らし、推論速度を向上させることを目指す技術です。量子化は、LLM をよりアクセスしやすいものにするために重要な役割を果たしています。

GGUF (GPT-Generated Unified Format)

GGUF は、llama.cpp チームによって開発された、LLM 用の量子化方法です。GGUF は、CPU 上で実行されるように設計されており、一部のレイヤーを GPU にオフロードすることで、速度を向上させることができます。GGUF は、CPU または Apple デバイスでモデルを実行するユーザーにとって特に役立ちます。

GGUF の主な利点は以下のとおりです。

  • CPU 互換性: GGUF は、CPU 上で LLM を実行することを可能にすることで、消費者のハードウェアへのアクセスを向上させます。
  • Apple M シリーズのサポート: GGUF は、Apple M シリーズのチップセットをサポートしており、Mac ユーザーが LLM を利用しやすくなります。
  • GPU へのレイヤーオフロード: GGUF は、一部のレイヤーを GPU にオフロードすることで、推論速度を向上させることができます。

GGUF は、GGML の進化版であり、モデルのロードと保存を高速化し、モデルファイルの処理を簡素化するように設計されています。GGUF は llama.cpp でサポートされており、GPTQ や AWQ とは異なる独自のファイル形式を持っています。

GPTQ と AWQ との比較

GGUF は、CPU 互換性、Apple M シリーズのサポート、GPU へのレイヤーオフロードというユニークな利点を提供します。GPTQ や AWQ は、主に GPU 推論の最適化に焦点を当てており、GGUF のような CPU サポートは提供していません。

GPTQ (Generalized Post-Training Quantization)

GPTQ は、Frantar らによって開発された、近似的な 2 次情報に基づく、ワンショットの重み量子化方法です。GPTQ は、LLM の圧縮と性能向上を目的として設計されており、大量のパラメータを持つモデル (例: GPT モデルの 1750 億パラメータ) でも、高精度で効率的な量子化を実現できます。GPTQ は、主に GPU 推論とその性能向上に焦点を当てています。

GPTQ の主な側面は以下のとおりです。

  • 4 ビット量子化: GPTQ は、モデルの重みを 4 ビットに量子化することで、モデルのサイズを大幅に削減します。
  • 近似的な 2 次情報: GPTQ は、近似的な 2 次情報を使用して、量子化による性能低下を最小限に抑えます。
  • 動的脱量子化: GPTQ は、推論中に動的に重みを脱量子化することで、性能を向上させます。

GPTQ は、8、4、3、さらには 2 ビットへの量子化をサポートしており、性能低下を抑えながら、推論速度を高速化できます。GPTQ は、NVIDIA TensorRT-LLM、FastChat、vLLM、HuggingFace TGI、LMDeploy などのさまざまなプラットフォームに統合されています。

GGUF と AWQ との比較

GPTQ は、GPU 推論とその性能向上に焦点を当てており、さまざまな量子化ビットレベルをサポートしています。GGUF は、主に CPU 推論に焦点を当てており、Apple M シリーズのチップセットもサポートしていますが、GPTQ のように幅広い量子化ビットレベルをサポートしていません。AWQ は、特にインストラクションチューニングされた LLM で、GPTQ と同等またはより優れた性能を維持しながら、速度を向上させられる可能性があります。

AWQ (Activation-Aware Weight Quantization)

AWQ は、MIT-HAN ラボによって開発された、アクティベーションを考慮した重み量子化手法です。AWQ は、重みそのものよりも、アクティベーションを観察して、重要な重みを保護することで、優れた量子化性能を実現します。AWQ は、特にインストラクションチューニングされた LLM やマルチモーダル LLM で優れた量子化性能を示します。

AWQ の主な利点は以下のとおりです。

  • インストラクションチューニングされた LLM に適した量子化: AWQ は、インストラクションチューニングされた LLM に適した量子化手法であり、これらのモデルの性能を維持しながら、サイズを削減することができます。
  • 正確な出力: AWQ は、量子化後も正確な出力を生成することができます。
  • VRAM 削減: AWQ は、モデルのメモリ使用量 (VRAM) を削減することができます。
  • トークン生成の高速化: AWQ は、トークン生成の速度を向上させることができます。

AWQ は、NVIDIA TensorRT-LLM、FastChat、vLLM、HuggingFace TGI、LMDeploy などのさまざまなプラットフォームに統合されています。

GGUF と GPTQ との比較

AWQ は、アクティベーションを考慮した量子化アプローチを採用することで、特にインストラクションチューニングされた LLM に対して、優れた量子化性能と正確な出力を提供します。GGUF は、主に CPU 推論に焦点を当てており、Apple M シリーズのチップセットもサポートしていますが、AWQ のようなインストラクションチューニングされた LLM への適応性はありません。GPTQ は、AWQ と比べて、量子化による性能低下が大きくなる可能性がありますが、より幅広い量子化ビットレベルをサポートしています。

考察

量子化技術は、さまざまなハードウェア上で効率的に LLM を展開するために不可欠な技術です。各量子化方法は、特定のユースケースに対応するユニークな利点と制限を提供します。

実装例

各量子化方法の実装例を以下に示します。

  • Hugging Face Transformers ライブラリ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
from torch import bfloat16
from transformers import BitsAndBytesConfig

# 4-bit 量子化の設定
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,  # 4-bit 量子化
    bnb_4bit_quant_type='nf4',  # Normalized float 4
    bnb_4bit_use_double_quant=True,  # 2段階量子化
    bnb_4bit_compute_dtype=bfloat16  # 計算データ型
)

# モデルとトークナイザーのロード
tokenizer = AutoTokenizer.from_pretrained("TheBloke/Mistral-7B-Instruct-v0.1-GPTQ")
model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Mistral-7B-Instruct-v0.1-GPTQ",
    quantization_config=bnb_config,
    device_map="auto",
)

# パイプラインの作成
pipe = pipeline(model=model, tokenizer=tokenizer, task="text-generation")

# テキスト生成
prompt = "今日はいい天気ですね。"
outputs = pipe(prompt, max_new_tokens=20)
print(outputs[0]["generated_text"])
  • ctransformers:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from ctransformers import AutoModelForCausalLM
from transformers import AutoTokenizer, pipeline

# モデルとトークナイザーのロード
model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Mistral-7B-Instruct-v0.1-GGUF",
    model_file="mistral-7b-instruct-v0.1.Q4_K_M.gguf",
    model_type="mistral", gpu_layers=50, hf=True
)
tokenizer = AutoTokenizer.from_pretrained(
    "mistralai/Mixtral-8x7B-Instruct-v0.1", use_fast=True
)

# パイプラインの作成
pipe = pipeline(model=model, tokenizer=tokenizer, task="text-generation")

# テキスト生成
prompt = "今日はいい天気ですね。"
outputs = pipe(prompt, max_new_tokens=20)
print(outputs[0]["generated_text"])
  • vLLM:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from vllm import LLM, SamplingParams
from transformers import AutoModelForCausalLM, AutoTokenizer

# モデルとトークナイザーのロード
model = AutoModelForCausalLM.from_pretrained("TheBloke/Mistral-7B-Instruct-v0.1-AWQ")
tokenizer = AutoTokenizer.from_pretrained("TheBloke/Mistral-7B-Instruct-v0.1-AWQ")

# サンプリングパラメータの設定
sampling_params = SamplingParams(temperature=0.0, top_p=1.0, max_tokens=20)

# LLM のロード
llm = LLM(
    model="TheBloke/Mistral-7B-Instruct-v0.1-AWQ",
    quantization="awq",
    dtype="half",
    gpu_memory_utilization=0.95,
    max_model_len=4096,
)

# テキスト生成
prompt = "今日はいい天気ですね。"
output = llm.generate(prompt, sampling_params)
print(output[0].outputs[0].text)

これらの例では、同じプロンプトを使用して、各量子化方法がどのように動作し、出力を生成するかを示しています。さらに、実行時間、VRAM 使用量、モデルサイズの測定のためのコードスニペットも含まれています。

パフォーマンス比較

提供された例に基づいて、各量子化方法の強みと弱点を以下にまとめます。

量子化方法 強み 弱点 理想的なシナリオ
GGUF CPU 互換性、Apple M シリーズのサポート、GPU へのレイヤーオフロード GPU 推論のパフォーマンスがGPTQ や AWQ に比べて低い CPU や Apple デバイスで LLM を実行する必要がある場合
GPTQ GPU 推論のパフォーマンスが優れている、さまざまな量子化ビットレベルをサポート モデルのサイズが AWQ に比べて大きい GPU を利用した高速な推論が必要な場合
AWQ インストラクションチューニングされた LLM に適した量子化、正確な出力、VRAM 削減、トークン生成の高速化 量子化による性能低下が GPTQ に比べて大きい可能性がある インストラクションチューニングされた LLM やマルチモーダル LLM を使用し、GPU メモリを節約する必要がある場合

各量子化方法は、ハードウェアの制限と特定のユースケースに基づいて、それぞれ異なる強みを持っています。たとえば、GPU メモリが限られている場合は、AWQ が適しています。一方、GPU 推論のパフォーマンスを最大限に引き出す必要がある場合は、GPTQ が適しています。

量子化技術の将来の開発

LLM の分野は常に進化しており、より効率的な量子化技術の継続的な研究開発が期待されています。今後の開発では、より高精度で、より多くのハードウェアをサポートする量子化方法が期待されます。また、量子化と他の最適化技術を組み合わせることで、より効率的に LLM を実行することが可能になるかもしれません。

まとめ

量子化メソッドは、さまざまなハードウェアでの効率的な LLM 展開に不可欠です。各メソッドは、特定のユースケースに対応する、ユニークな利点と制限を提供します。LLM の未来は、効率的な量子化技術の継続的な研究開発に依存します。