AI・データ●●●●○

量子化

Quantizationりょうしか

モデルの重みを低精度の数値に変換して軽量化する技術。ローカルLLMの立役者。

概要

量子化は、機械学習モデルの重み(パラメータ)を表現する数値の精度を意図的に落とし、モデルのサイズと計算コストを削減する技術です。学習時には通常32ビットや16ビットの浮動小数点数で表現されている重みを、8ビットや4ビットの整数など、より少ないビット数に変換します。ビット数を半分にすればモデルの容量もほぼ半分になり、メモリ帯域と計算量も減るため、推論が軽く・速くなります。

この技術が脚光を浴びたのは、LLMの巨大化と「手元で動かしたい」需要の衝突がきっかけです。70億パラメータのモデルでもFP16のままでは約14GBのメモリを要し、家庭用GPUやノートPCには載りません。しかし4ビット量子化すれば約4GBまで縮み、普通のラップトップで動くようになります。Ollamaやllama.cppでローカルLLMを動かした経験があるなら、そのモデルファイルはほぼ間違いなく量子化済みです。量子化はローカルLLM文化の、文字どおりの立役者なのです。

なぜ生まれたか

量子化の考え方自体は、LLM以前からモバイル・組み込み向けの深層学習で発展してきました。スマートフォンでの画像認識やエッジデバイスでの推論では、メモリも電力も限られており、ニューラルネットワークをそのままのサイズでは載せられなかったからです。そこで「学習は高精度で行い、推論は低精度で行っても精度はさほど落ちない」という経験則を土台に、INT8推論などの技術が整備されました。

LLM時代になると、この問題は桁違いに深刻化しました。パラメータ数が数十億〜数千億に達し、推論のボトルネックが計算そのものよりも「重みをメモリから読み出す帯域」に移ったのです。1トークン生成するたびに全パラメータを読み出すLLM推論では、重みを小さくすることがそのまま速度向上に直結します。加えて、高性能GPUの価格高騰と品薄が「手持ちのハードで動かす」動機を強め、2023年のllama.cpp登場を境に、コミュニティ主導で4ビット量子化が一気に実用化・普及しました。

詳細

仕組み — 実数の範囲を整数の目盛りに割り付ける

量子化の基本操作は、浮動小数点の重みが取る値の範囲を、少数の離散的な目盛りに割り付けることです。たとえばある層の重みが -1.0〜+1.0 に分布しているなら、この範囲をINT8の256段階(-128〜127)に等分し、各重みを最も近い目盛りの整数に置き換えます。元に戻すときはスケール係数を掛けるだけです。当然、目盛りの間の細かい違いは失われます(量子化誤差)。ビット数を減らすほど目盛りは粗くなり、INT4では16段階しかありません。そこで実用的な手法では、重み行列を小さなブロックに分割してブロックごとに別々のスケールを持たせたり、分布から外れた重要な外れ値だけ高精度で別扱いしたりして、少ないビットでも誤差を抑える工夫を重ねています。

1パラメータあたりのビット数と、7Bモデルのおよその容量FP3232bit 浮動小数点約28GB — 学習時の標準精度FP16 / BF1616bit 浮動小数点約14GB — 配布時の標準INT88bit 整数約7GBINT44bit 整数約4GB精度劣化はわずか。多くの実務用途で十分家庭用GPUやラップトップで動く。劣化は現れ始めるが実用域容量は小さく・劣化リスクは大きく目安: FP16比で INT8 はほぼ無劣化、INT4 は軽微な劣化、3bit 以下は用途を選ぶ
精度と容量のトレードオフ — 7Bパラメータモデルの場合

いつ量子化するか — PTQ と QAT

量子化のタイミングには大きく2系統あります。学習済みモデルを後から変換する PTQ(Post-Training Quantization)と、量子化された状態を想定しながら学習する QAT(Quantization-Aware Training)です。PTQ は追加学習が不要で手軽なため、LLMの量子化はほぼこちらが主流です。少量の較正データで各層の値域を測って変換する GPTQ や AWQ、llama.cpp 系の K-quants などが代表的な手法です。QAT は学習時から量子化誤差を織り込むため低ビットでも精度を保ちやすい一方、学習コストがかかるため、モデル提供元が公式に低ビット版を出すような場面で使われます。また、ファインチューニングの世界でも量子化は重要で、4ビットに量子化したモデルを凍結し、小さな追加行列だけを学習する QLoRA は、家庭用GPUでのLLMカスタマイズを可能にした代表的手法です。

GGUF とローカルLLM

ローカル実行の文脈で必ず出会うのが GGUF というファイル形式です。これは llama.cpp プロジェクトが定義した、量子化済みの重みとトークナイザ・メタデータを1ファイルにまとめた配布形式で、Ollama や LM Studio など主要なローカルLLMツールが対応しています。Hugging Face で「Q4_K_M」「Q8_0」といった名前を見かけたら、それは量子化の方式とビット数を表す GGUF の型名です。おおまかには Q8 がほぼ無劣化、Q4_K_M が容量と品質のバランスが良い定番、Q2〜Q3 は大きく縮む代わりに劣化が目立つ、という使い分けになります。CPUだけでも動作し、GPUがあれば一部の層だけをGPUに載せる(オフロード)といった柔軟な構成が取れることも、ローカルLLM普及の推進力になりました。

精度劣化との付き合い方

量子化は不可逆な圧縮であり、失った情報は戻りません。劣化の現れ方には傾向があり、一般常識的な応答は低ビットでも保たれやすい一方、数学的推論・コード生成・多言語(特に学習データの少ない言語)といった繊細なタスクから先に崩れていきます。またベンチマークの平均点ではわずかな差でも、特定の入力で目に見えて挙動が変わることがあるため、「自分の用途のタスクで実測する」ことが実務上の鉄則です。パラメータ数とビット数のどちらを取るかという選択では、「大きいモデルを強く量子化する方が、小さいモデルを高精度で使うより良い」傾向が知られており(例: 13Bの4bit ≧ 7BのFP16)、限られたメモリの使い方として覚えておく価値があります。なお量子化の対象はモデルの重みだけでなく、長いコンテキストウィンドウで肥大化するKVキャッシュにも適用され、推論時のメモリ削減手段としても定着しつつあります。