オルタナティブ・ブログ > 生涯ITエンジニアでいこう。 >

どんどん出てくるIT業界の新トレンドを乗りこなし末長くエンジニアをやっていきましょう。

LLMのダイエット術、『量子化(Quantization)』――ビット数を削っても賢さが残る理由

»

1. はじめに――「そのモデル、うちのGPUに載りますか?」

「Llama 3の70Bを社内で動かしたいんですけど」

こう相談されて、まず頭に浮かぶのはモデルの賢さではありません。

メモリです。

......載るのか。何枚要るのか。

LLMは知識を無数の「パラメータ(重み)」として持っています。700億(70B)パラメータ級のモデルは、もはや珍しくありません。最先端では兆単位とも言われます。

これをそのまま動かそうとすると、桁外れのメモリと計算資源が必要になります。

そこで登場するのが「量子化(Quantization)」です。

量子化そのものは新しい技術ではありません。デジタル通信や信号処理の世界では昔から当たり前に使われてきました。それがいま、LLMを現実的に運用するためのコア技術になっています。

今回は、ある解説動画をもとに、量子化の仕組みと現場で知っておきたいポイントを整理してみます。

量子化は、巨大なLLMを「使える大きさ」にするための入り口です。

2. 70Bで140GB――LLMが直面する「メモリの壁」

パラメータは、学習で調整された知識の「ダイヤル」のようなものです。

1つのダイヤルにどれだけ細かい目盛りを持たせるか。

それがモデルのサイズ、必要メモリ、計算量を決めます。

一般的なモデルは、パラメータを「FP16」や「BF16」という16ビット(2バイト)の浮動小数点で持っています。

では、70Bモデルで計算してみましょう。

700億パラメータ × 2バイト = 約140GB

......重みだけで、です。

データセンター向けGPUでも、1枚で積んでいるメモリは80GB前後が主流です。推論時にはKVキャッシュなども上乗せされます。つまり、1枚では到底収まりません。

ここで1パラメータあたりのビット数を減らすと、景色が一変します。

精度フォーマット

1パラメータあたり

70Bモデルの重み

FP16比

FP16 / BF16

16ビット(2バイト)

約140GB

1

FP8 / INT8

8ビット(1バイト)

約70GB

1/2

INT4

4ビット(0.5バイト)

約35GB

1/4

INT4なら、FP16の4分の1。

140GBが35GBになる。これは大きい。

量子化は、精度の損失を抑えながらモデルのフットプリントを削る、最もシンプルで効果的な手段の1つです。

3. 「下の桁を切り捨てる」のではない――レイヤーごとのマッピング

低精度化と聞くと、こう思うかもしれません。

「小数点以下を切り捨てればいいんでしょ?」

......そう単純ではありません。

浮動小数点の数値は、「符号」「指数(大きさ)」「仮数(細かさ)」が別々のビット列に収まっています。無造作にビットを削ると、まったく別の数値に化けてしまいます。

だから、低い精度に「写し替え」、推論時に元のスケールへ戻す、きちんとした手順が必要になります。

この処理は、推論と同じく**レイヤーごと(layer by layer)**に行われます。

  1. 範囲を調べる――そのレイヤーに含まれる値の最小・最大を確認する
  2. スケールを縮める――たとえば「0〜100」の範囲を、少ないビットで表せる「0〜10」に写す
  3. 丸める――縮めた値を、表現できる一番近い値に寄せる

例を1つ。

元の値が「53」なら、0〜10のスケールでは「5.3」。丸めて「5」です。

推論時は、スケール係数を掛け戻して「50」として扱います。元の53との差、つまり「3」が量子化誤差です。

ちなみに、モデル名に「8B FP8」とあれば、80億パラメータのモデルをFP8で量子化したもの、という意味です。

また現場では、「重み(Weights)は8ビット、アクティベーション(Activations)は16ビットのまま」というW8A16のような組み合わせもよく使われます。

量子化とは、値の分布を保ったまま、少ない目盛りに賢く写し替える作業です。

4. ビットを削っても、賢さはどこまで残るのか

写真を圧縮しすぎると、だんだんピクセルが粗くなっていきます。

LLMも同じです。目盛りを減らせば、保持できる情報は確実に減ります。

......では、どれくらい落ちるのか。

結論から言うと、丁寧にマッピングすれば、思ったほどは落ちません。

  • INT8――多くのモデルで、元の精度をほぼそのまま維持できます。メモリは半分、レイテンシも大きく改善します。
  • INT4――FP16の4分の1まで削る、攻めの量子化です。劣化のリスクは上がりますが、手法を選べば元のモデルにかなり近い精度に着地できます。

なぜそこまで粘れるのか。

前章のレイヤーごとのスケール調整と丸めによって、値の分布と範囲がうまく保たれるからです。

ただし、ここは誤解しないでおきたいところです。

「どのモデルでも、どの量子化でも、劣化は1%未満」――とまでは言えません。

INT8はほぼ無劣化と見てよいケースが多い。一方、INT4はモデル、手法、タスクによって差が出ます。4ビットを下回ると、劣化が目に見えて大きくなることもあります。

「量子化すれば大丈夫」ではなく、「自分のタスクで測って確かめる」が正解です。

5. いつ量子化するか――PTQとQAT

量子化には、タイミングの違いで大きく2つのやり方があります。

学習が終わってから一気に縮めるか。

学習しながら、低精度に慣れさせていくか。

項目

PTQ(Post-Training Quantization/学習後量子化)

QAT(Quantization-Aware Training/量子化対応学習)

タイミング

学習済みモデルに後から適用

学習(またはファインチューニング)中に量子化を模擬

コスト

低い。時間も計算資源も少なくて済む

高い。追加の学習コストがかかる

特徴

速くて手軽。いちばん普及している

量子化による誤差に適応するよう重みが調整される

得意な領域

INT8など標準的な量子化

INT4以下など攻めた量子化でも精度を保ちやすい

公開されている量子化済みモデルの多くは、PTQで作られています。

一方、限界まで削りつつ精度を死守したいなら、QATの出番です。

手軽さとスピードならPTQ。攻めた圧縮で精度を守りたいならQAT。――この使い分けが基本です。

6. 明日からできること――量子化モデルを選ぶ前のチェックリスト

「とりあえずINT4で」は、現場でよく聞くセリフです。

でも、その前に確認しておきたいことがあります。

  • 必要メモリを概算する――「パラメータ数 × バイト数」で重みのサイズを出し、KVキャッシュ分の余裕も見込む
  • まずINT8から試す――ほぼ無劣化で済むことが多い。足りなければINT4を検討する
  • 自分のタスクで評価する――汎用ベンチマークの数字ではなく、実際の業務データで精度を比べる
  • ハードウェアの対応を確認する――FP8やINT4を高速に処理できるかはGPUの世代で変わる
  • 重みとアクティベーションを分けて考える――W8A16のように、重みだけ削る構成も選択肢に入れる

量子化は「削ってから考える」のではなく、「測ってから削る」もの。

7. 結論

量子化とは、無数のパラメータをレイヤーごとに低い精度へ写し替え、

わずかな精度と引き換えに、大量のメモリと速度を手に入れる技術です。

かつてはデータセンターのGPUを何枚も占有していた巨大LLMが、量子化によって1枚のGPUに収まる。小さなモデルなら、手元のPCやスマートフォンでも動く。

そんな時代になりました。

とはいえ、どこまで削るかに正解はありません。

求めるスピードと、許せる精度。

そのバランスを決めるのは、それぞれのプロダクション環境です。

......最後に、みなさんに質問です。

「いま本番環境で動かしているモデルは、何ビットですか?」

FP16のままでしょうか。INT8でしょうか。それとも、もうINT4まで攻めていますか?

ぜひ一度、自分のシステム構成を振り返ってみてください。

Comment(0)