なぜ量子化が必要か

LLaMA 3 70Bのようなオープンソースモデルをそのまま実行するには、BF16精度では約140GBものGPUメモリが必要だ。消費者向けGPUの最高峰であるRTX 4090でも24GBしかメモリを持たない。つまり、最先端のオープンソースLLMをそのままローカルで動かすことは、ほとんどの人にとって現実的でない。

量子化とは、モデルの重みを低いビット数で表現することでサイズを圧縮し、少ないメモリで動かせるようにする技術だ。品質とのトレードオフは避けられないが、適切な量子化を選べば、ほとんどのユースケースで実用的な品質を維持できる。

浮動小数点数からの変換

ニューラルネットワークの重みは通常、32ビット浮動小数点(FP32)または16ビット浮動小数点(BF16・FP16)で表現される。量子化ではこれをより少ないビット数(8ビット・4ビット・2ビット)の整数または低精度浮動小数点に変換する。

例えば4ビット量子化(INT4)では、元の16ビットの値を4ビットで近似することで、重みのサイズを4分の1まで圧縮できる。70Bモデルが4ビット量子化されれば、理論上35GB程度まで縮小でき、2〜3枚のRTX 4090、または1台のA100(80GB)で実行できるようになる。

主要な量子化形式

INT8(8ビット整数量子化)

INT8は量子化の中で最もシンプルな手法の一つで、重みを8ビット整数で表現する。FP16と比べてサイズは半分になり、精度の劣化が比較的小さいため、品質を重視するケースで選ばれる。

BitsAndBytes(BnB)ライブラリを使えば、Hugging FaceのモデルをINT8でロードするのは数行のコード変更で実現できる。load_in_8bit=Trueを指定するだけだ。

INT4(4ビット整数量子化)

INT4はさらに圧縮し、重みを4ビット整数で表現する。サイズはFP16の4分の1になるが、精度の劣化もINT8より大きい。それでも多くのタスクでは実用的な品質が保たれており、メモリ制約が厳しい環境での主流な選択肢だ。

NF4(Normal Float 4)というINT4の改良版もあり、量子化誤差を数学的に最小化する工夫がされている。QLoRA(量子化ベースのLoRA)ではNF4が標準的に使われている。

GPTQ(Post-Training Quantization)

GPTQは学習後の量子化手法で、少量のキャリブレーションデータを使ってモデルの重みを精度よく4ビット(または3ビット・2ビット)に量子化する。単純なINT4より精度が高く、Hugging Faceのモデルハブには多数のGPTQ量子化済みモデルが公開されている。

GPU上での推論に最適化されており、AutoGPTQやExLlama2といったライブラリで高速な推論が可能だ。

GGUF(旧GGML)

GGUFはllama.cppというCPU対応の推論エンジンで使われるフォーマットだ。特徴はGPUだけでなくCPUでも動かせることで、GPUを持たない環境でもLLMを実行できる。また、GPUとCPUのメモリを組み合わせて使う「オフロード」にも対応しており、GPUメモリに収まらないモデルの一部をCPUメモリに逃がして動かせる。

OllamaはGGUFを内部で使っており、ローカルでLLMを簡単に実行するための最も普及した方法の一つになっている。量子化レベルはQ4_K_M・Q5_K_M・Q8_0など複数のバリエーションがあり、サイズと品質のバランスを選べる。

AWQ(Activation-aware Weight Quantization)

AWQはGPTQと同じく学習後の量子化手法だが、モデルの「活性化」(重みを使った計算結果)の分布を考慮して量子化誤差を最小化する。GPTQと同等かそれ以上の精度を、より少ない量子化時間で実現できることが多い。

vLLMなどの高性能推論サーバーはAWQをサポートしており、プロダクション環境での4ビット推論によく使われる。

精度とサイズのトレードオフ

形式サイズ比(対FP16)精度劣化主な用途
INT81/2小さい高精度が必要な推論
GPTQ / AWQ (4bit)1/4中程度GPUでの本番推論
GGUF Q41/4〜1/3中程度ローカル・CPU推論
INT4 / GGUF Q21/4〜1/8大きい実験・超低メモリ環境

一般的なガイドラインとして、Q4_K_M(GGUF)またはGPTQ/AWQ 4ビットは多くのユースケースで実用的な品質を維持する。会話・要約・コード生成であれば、FP16との差を人間が判別するのは難しいレベルだ。

用途別の選び方

GPUを持ち高性能を追求するなら、GPTQ・AWQの4ビット量子化とvLLMの組み合わせが有力だ。GPUなしでローカル実行したい、またはMacのApple Siliconで動かしたいなら、OllamaとGGUFが最も手軽な選択肢になる。ファインチューニングも視野に入れるなら、QLoRAのためにINT4(NF4)+BitsAndBytesを使う。

まとめ

LLM量子化は、GPUメモリの制約を乗り越えてオープンソースモデルをローカルや低コストな環境で動かすための重要な技術だ。INT8からINT4まで、GPTQ・GGUF・AWQなどの形式それぞれに用途と特性がある。ローカル実行には汎用性の高いGGUFとOllamaから始めるのが最も手軽で、GPU環境での本番推論にはAWQとvLLMの組み合わせが現在の主流の選択肢となっている。