Generic selectors
Search in title
Search in content
Post Type Selectors
コラム
AI用語集

量子化とは何か

用語:量子化

一言で:量子化とは、モデルの重みや活性値をより少ないビット数で表現して、メモリ使用量や計算コストを下げる最適化手法です。

AI用語の分類:AIエージェント・開発・運用

AIモデルの量子化(quantization)は、モデル内部の数値を、より少ないビット数で表現することで、メモリ使用量や計算コストを抑える最適化手法です。LLMの配布ページで「8-bit」「4-bit」「INT8」「FP8」「NF4」などの表記を見たとき、その多くは量子化と関係しています。

典型的なニューラルネットワークでは、重みや活性値を32bit浮動小数点などで扱います。量子化では、それらを16bit、8bit、4bitなどへ落とし込みます。単純化すると、細かい数値をより粗い目盛りで表すようなものです。モデルの表現に必要なメモリは減りますが、丸め誤差が入るため、性能とのトレードオフが生じます。

何を量子化するのか

「4bitモデル」と書かれていても、モデル内のすべての数値が4bitとは限りません。よくあるのは重みだけを低ビット化するweight-only quantizationです。LLMでは巨大な重み行列がメモリの大部分を占めるため、重みを8bitや4bitへ圧縮するだけでも大きな効果があります。

一方、重みだけでなく活性値も整数化する方式があります。TensorFlowのpost-training full integer quantizationでは、代表データを用いて活性値の範囲を推定し、重みと活性値を整数表現へ変換します。対応ハードウェアでは整数演算を使いやすくなりますが、精度維持の難しさは増します。[1]

LLMではさらに、KV cacheなど推論時の一時データを量子化する場合もあります。そのため「何bitか」だけでなく、「何がそのbit幅なのか」を確認する必要があります。

Post-Training QuantizationとQuantization-Aware Training

学習済みモデルを後から量子化する方法をPost-Training Quantization(PTQ)と呼びます。導入が比較的簡単で、既存モデルを低精度化して配布しやすいのが利点です。TensorFlowも、まずPTQから試すことを案内しています。

それに対してQuantization-Aware Training(QAT)は、学習中に量子化による丸め誤差を擬似的に再現し、モデルが低精度表現に適応するよう訓練します。追加の学習コストがかかりますが、特に厳しい低ビット化で精度を保ちやすい場合があります。[2]

4bit・8bitでどれだけ軽くなるのか

理論上、32bitの重みを8bitで保存すれば、重み部分の記憶量は約4分の1になります。4bitなら約8分の1です。ただし実際のモデルには、量子化スケール、ゼロ点、非量子化層、埋め込み、キャッシュ、ランタイムの作業領域などがあるため、モデル全体のメモリが単純に4分の1、8分の1になるとは限りません。

Hugging Faceのbitsandbytes文書では、8bitロードで重みのメモリ使用量を大きく削減でき、4bitではさらに圧縮できることが説明されています。一方、LayerNormなど一部モジュールは高精度のまま残る構成も一般的です。[3]

量子化すれば必ず速くなるのか

ここは実用上の重要な落とし穴です。低ビット化は、モデルをメモリへ載せやすくし、メモリ帯域を節約し、対応する整数・低精度演算器を使える可能性を高めます。しかし、推論速度の改善幅はハードウェアと実装に依存します。

あるGPUでは4bitカーネルがよく最適化されていて高速でも、別の環境では変換オーバーヘッドが大きいことがあります。CPU、GPU、NPUでは得意な形式が違います。したがって「4bitだから8bitより必ず2倍速い」とは読めません。

精度はどこで落ちるのか

低精度化すると、近い値が同じ量子化レベルへ丸められます。通常は影響の小さい範囲に収めるよう設計しますが、外れ値や敏感な層では情報が失われやすくなります。LLM向け量子化では、外れ値だけ高精度で処理する、層ごとに異なるスケールを使う、4bit向けの特殊な数値形式を使うなど、多数の工夫があります。

したがって、品質評価はモデル名だけでなく量子化方式ごとに見る必要があります。同じ元モデルでも、8bit版、4bit版、量子化アルゴリズムA/Bで性能が異なります。

蒸留やPruningとの違い

蒸留は、大きな教師モデルの出力を使って別の生徒モデルを訓練する手法です。Pruningは、重要度の低い重みや構造を削って疎にします。量子化は、基本的には「数を何bitで表すか」を変える手法です。

これらは排他的ではありません。小型モデルへ蒸留した後に8bit量子化する、Pruningしたモデルをさらに量子化する、といった組み合わせもあります。

元の文脈で確認すべきこと

「このモデルは4bit」と書かれていたら、まず4bitなのが重みだけか、活性値も含むかを確認します。次に方式名、calibrationの有無、対応ハードウェア、推奨ランタイム、元モデルに対する品質差を見ます。さらに、メモリ削減量と実測レイテンシを分けて確認します。

量子化という言葉だけから「同じ性能のまま軽くなる」「どこでも高速になる」と推論してはいけません。量子化は非常に有効な最適化ですが、品質と速度は実装条件によって決まります。

注・出典

  1. TensorFlow: Post-training quantization ↩
  2. TensorFlow: Quantization aware training ↩
  3. Hugging Face Transformers: bitsandbytes quantization ↩

AI協働制作について

本記事は、著者が独自に設計した指示、参照資料、出典確認規則、著作権確認および監査工程を組み込んだChatGPT等の生成AIを、情報収集の補助、資料整理、構成検討、草稿作成、文章校正および監査補助に使用して制作しました。記事の対象範囲、情報源の採否、構成、解釈および最終表現は著者が判断し、最終稿を承認しています。著者は、本記事の正確性、独自性、引用、著作権処理および公開内容について責任を負います。制作工程の詳細は「AI協働制作方針」をご覧ください。

おすすめ