Re Reference AI

技術

GPTQとは

少量のキャリブレーションデータのみで、LLMの重みを4bit程度まで高速かつ高精度に量子化するPTQ手法

モデル圧縮軽量化

ひとことで言うと

少しのデータだけで、AIモデルを短時間で4bit程度まで軽量化できる量子化手法。

概要

GPTQとは、大規模言語モデルの重みを4bit程度まで、少量のキャリブレーションデータと比較的短い処理時間で量子化できる、PTQ(学習後量子化)の代表的な手法。 量子化対象の重み行列を層ごとに、少数のサンプルデータを使った二次近似(ヘッセ行列に基づく重み更新)により量子化誤差を最小化しながら、少数の列ずつ順に量子化していく。 数百億パラメータ規模のモデルでも数時間程度で量子化を完了でき、量子化後もFP16に近い性能を維持しやすいことから、LLMをコンシューマー向けGPUや限られたメモリ環境で動作させる用途に広く採用されている。

背景

大規模言語モデルをそのまま実行するには大量のGPUメモリを要するため、モデルサイズを圧縮する量子化が重要になる一方、モデル全体を再学習するQATは計算コストが高く、数百億パラメータ規模のモデルには適用しづらかった。GPTQは、少量のデータのみで高精度な量子化を短時間に完了できる手法として考案された。

歴史

2022年10月: Frantar・Ashkboos・Hoefler・Alistarhらが論文「GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers」を発表。

コード例

Transformersを用いたGPTQ量子化(概念例)

from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig

model_name = "facebook/opt-125m"
tokenizer = AutoTokenizer.from_pretrained(model_name)
quantization_config = GPTQConfig(bits=4, dataset="c4", tokenizer=tokenizer)

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=quantization_config,
)
model.save_pretrained("opt-125m-gptq-4bit")

利点

  • 少量のキャリブレーションデータのみで、数百億パラメータ規模のモデルも数時間程度で量子化できる
  • 4bit程度まで圧縮しても、FP16に近い性能を維持しやすい
  • Hugging Face TransformersやvLLM等、主要な推論ライブラリで広くサポートされている

欠点

  • QATと比べると、極端に低いビット数まで圧縮した場合の精度低下は避けにくい
  • ヘッセ行列の近似計算等を要し、単純な丸め処理のみのPTQ手法よりは計算コストが高い
  • キャリブレーションデータの内容が実際の利用ドメインと異なると、量子化後の精度に影響することがある

比較

  • PTQGPTQは、少量のキャリブレーションデータで高精度な量子化を実現する代表的なPTQ手法の1つ
  • AWQGPTQとAWQは、いずれもLLM向けに開発された代表的な4bit量子化手法であり、アルゴリズムのアプローチが異なる
  • 量子化GPTQは、LLM向けに広く使われる量子化手法の1つ

関連用語

PTQAWQ量子化INT4

よくある質問

GPTQで量子化したモデルはどのように推論できる?

Hugging Face TransformersのGPTQConfigやAutoGPTQ、vLLM等の推論ライブラリが、GPTQ形式で量子化されたモデルの読み込みと推論に対応している。

GPTQはどのくらいの時間で量子化を完了できる?

モデルサイズやハードウェアによって異なるが、少量のキャリブレーションデータを用いることで、数百億パラメータ規模のモデルでも数時間程度で量子化を完了できる場合が多い。

参考文献