量子化と低ビット推論
量子化は、重みや計算途中の値を、少ないビット数で表せる値へ近似する方法です。保存量やメモリ転送を減らせる一方、丸め誤差や外れ値への対応が必要です。小さいファイルであること、速く動くこと、元の精度を保つことは別々に確認します。
連続的な値を限られた段へ写す
単純な例として、実数wを刻み幅sで割って近い整数qへ丸め、復元値をs×qとする方法があります。s=0.1なら0.26は0.3へ近似され、誤差は0.04です。表せる整数の範囲外に出れば、端の値に切り詰めるため誤差がさらに増えることがあります。ゼロ点をずらす非対称な方式や、値の集まりごとに尺度を変える方式もあります。ビット数を減らすほど段数が減るため、どこへ細かい段を割り当てるかが重要になります。
刻み幅0.1、範囲内で最も近い値へ丸める例なら、丸め誤差の絶対値は最大0.05です。しかし行列積では多数の近似値が組み合わさるため、出力全体の誤差が常に0.05以内になるわけではありません。保存時の誤差と課題の成績は別に測ります。
全てを同じ精度にするとは限らない
重みだけを低ビットで保存する方式と、活性値も低ビットで扱う方式は異なります。計算結果を足し合わせる際には、より高い精度を使う場合もあります。また、一部の値が非常に大きいと、共通の尺度では小さい値を細かく表せなくなります。LLM.int8()は外れ値の特徴を高い精度で別に扱う方法を示しました。4bitという表示だけで、全ての層・キャッシュ・計算が4bitだと考えず、何を圧縮しているかを確認します。
学習後の圧縮と学習中の対策
学習済みモデルを圧縮する方法は、学習後量子化と呼ばれます。代表的な入力を流して値の範囲や誤差を調べる校正を行う場合があり、GPTQは量子化で生じる誤差を抑える研究の一つです。量子化を意識して学習する方法では、低精度で生じる変化を学習過程へ取り込みます。校正に使う文章が実際の用途と大きく違うと、その用途での誤差を見逃すことがあります。単に数字を四捨五入するだけで、どんなモデルも同じ品質で圧縮できるわけではありません。
容量の削減と速度の条件
同じ個数の重みを16bitから4bitへ変えると、補助情報を無視した理想的な保存量は4分の1です。ただし実行時に値を展開する処理、専用計算の対応、メモリ帯域、GPUへ収まるかによって速度は変わります。適した実装がなければ、ファイルが小さくなっても速くならない場合があります。全ての重みをGPUに置けるようになることで転送が減り、大きく改善する例もあります。容量・速度・品質を同じ条件で測り、一つの指標だけで選ばないことが重要です。
用途別に品質の落ち方を調べる
短い会話が自然でも、長い文脈、まれな固有名詞、厳密な計算、コードの構文で差が現れることがあります。元モデルと量子化版へ同じ課題を渡し、正答率、必要な出力形式、長文の参照漏れなどを比較します。無作為に一問だけ試すより、用途を代表する問題と失敗しやすい問題を固定して比較すると判断しやすくなります。低ビット化は学習されていない知識を追加する方法ではありません。小さくした結果の利便性と、失われた能力の有無を分けて捉えます。
確認問題
16bitの重みを同じ個数の4bit表現にすると、補助情報を無視した容量は何分の一ですか。速度も必ず4倍ですか。
解答と考え方を見る
4÷16=4分の1です。速度は計算方式、展開処理、メモリ帯域、ハードウェアなどに依存するため、必ず4倍にはなりません。
参考資料・次に読む資料
- Frantarほか:GPTQ — Accurate Post-Training Quantization for Generative Pre-trained Transformers学習済み重みを少ないビット数で表す量子化と誤差の補正を扱う研究。
- Dettmersほか:LLM.int8() — 8-bit Matrix Multiplication for Transformers at Scale外れ値を別の精度で扱う混合精度の量子化手法。
- ggml-org:llama.cpp公式リポジトリCPU・GPU・量子化を用いるローカル推論の実装と公式資料。対応機能は版ごとに確認する。
資料確認日:2026-11-03。