LLMの量子化にはどのようなデメリットがあるのか

AI実装検定のご案内

目次

LLMの量子化とは

LLMの量子化とは、モデル内部で使用される数値の精度を下げることで、モデルサイズやメモリ使用量を削減する技術です。

LLMでは通常、重みや計算処理にFP32、FP16、BF16などの浮動小数点形式が使われます。

これらをFP8、INT8、INT4、FP4などの、より少ないビット数で表現することで、モデルを軽量化できます。

たとえばFP16では1つの値を16bitで保持しますが、4bit量子化では1つの値を4bit程度で表現します。

そのため、重みだけを単純に比較すれば、FP16から4bitへ量子化することで理論上は約4分の1までデータ量を削減できます。

ただし、実際の量子化モデルではスケール情報やグループ情報なども保存されるため、モデルファイル全体が厳密に4分の1になるわけではありません。

量子化には大きなメリットがありますが、数値を低精度化する以上、いくつかのデメリットも存在します。

LLMを量子化するとモデル性能が低下する可能性がある

量子化では数値情報の一部が失われる

量子化の代表的なデメリットは、モデルの精度が低下する可能性があることです。

たとえば高精度な数値表現では、

0.121
0.123
0.126

という細かな違いを区別できます。

しかし、使用できる数値の種類が少ない低ビット表現では、これらが同じ値として近似される場合があります。

つまり量子化では、元の数値を完全に保存するのではなく、近い値へ置き換えます。

このとき発生する誤差を「量子化誤差」と呼びます。

LLMには数十億から数千億ものパラメータが存在するため、個々の量子化誤差が小さくても、モデル全体としては出力結果へ影響する可能性があります。

ビット数が少ないほど量子化誤差を抑えるのが難しくなる

一般的には、量子化に使用するビット数を減らすほど、元の値を細かく表現することが難しくなります。

たとえば8bitでは最大256種類の値を表現できますが、4bitでは16種類しか表現できません。

そのため、

8bit
↓
4bit
↓
3bit
↓
2bit

とビット数を減らすほど、モデル品質を維持する難易度は高くなる傾向があります。

ただし、「4bitなら必ず性能が大きく低下する」という意味ではありません。

GPTQやAWQなどの量子化アルゴリズムを利用することで、4bitでも元のモデルに近い性能を維持できる場合があります。

複雑なタスクでは量子化の影響が表れる場合がある

数学やコードなどで差が出ることがある

量子化による性能低下は、すべてのタスクで同じように表れるわけではありません。

たとえば、

日本の首都は?

といった単純な知識問題では、FP16モデルと4bitモデルの違いがほとんど分からない場合があります。

一方、

複雑な数学問題
プログラミング
多段階推論
長文分析
論理問題

などでは、量子化によるわずかな数値誤差が最終的な回答へ影響する可能性があります。

ただし、「難しいタスクでは必ず量子化モデルの性能が低下する」という一般法則があるわけではありません。

モデルの種類や量子化方式、ビット数、評価するタスクによって結果は異なります。

そのため、量子化モデルを導入するときは、一般的なベンチマークだけでなく、実際に利用するタスクでも評価することが重要です。

出力するトークンが変化する可能性がある

LLMでは、次に出力するトークンの候補に対してスコアを計算します。

量子化によって内部計算結果がわずかに変化すると、候補となるトークンの順位が変わる場合があります。

たとえば量子化前には、

候補A:最も高い
候補B:わずかに低い

という状態だったとしても、量子化誤差によって、

候補B:最も高い
候補A:わずかに低い

となる可能性があります。

最初の数トークンが変われば、その後に生成される文章も変化します。

そのため、小さな数値誤差でも最終的な回答内容に影響することがあります。

外れ値によって量子化が難しくなることがある

LLM内部には極端に大きな値が存在する場合がある

LLMを量子化するときに問題になりやすいものの一つが、外れ値です。

たとえば内部の値が、

-0.8
0.3
1.1
-0.4
0.7
32.5

となっているとします。

ほとんどの値が-1~1程度であるのに対して、一部だけ極端に大きな値が存在しています。

単純な量子化方法で非常に広い範囲を同じ尺度で表現すると、この大きな値に合わせてスケールを設定する必要があります。

その結果、小さな値同士の違いを細かく表現しにくくなることがあります。

現在は外れ値対策を行う量子化方式も多い

ただし、現在のLLM量子化では単純にモデル全体を同じスケールで量子化するとは限りません。

実際には、

per-channel量子化
group-wise量子化
block-wise量子化
外れ値だけ高精度で計算

といった方法が使われます。

そのため、外れ値が1つ存在しただけでモデル全体の量子化精度が大きく悪化するとは限りません。

LLM.int8()などでは、外れ値を高精度で処理することで性能低下を抑える仕組みも利用されています。

4bitとINT4は必ずしも同じ意味ではない

4bit量子化には複数の表現方法がある

4bit量子化という言葉を見ると、INT4をイメージすることがあります。

しかし、4bit表現には複数の種類があります。

代表的なものとして、

INT4
NF4
FP4

などがあります。

INT4は4bit整数表現ですが、NF4はNormalFloat 4-bitと呼ばれる形式で、ニューラルネットワークの重み分布を考慮した4bit表現です。

そのため、

4bit量子化=INT4

とは限りません。

GPTQやAWQとNF4も役割が異なる

GPTQやAWQとNF4も、厳密には同じカテゴリーではありません。

GPTQやAWQは主に、

どのようにモデルの重みを量子化するか

を決める量子化アルゴリズムです。

一方、NF4は、

数値をどのような4bit形式で表現するか

に関係する方式です。

したがって、正確には、

GPTQ・AWQ
→ 量子化アルゴリズム

NF4・INT4・FP4
→ 低ビットの数値表現

と考えると理解しやすくなります。

量子化しても必ず推論速度が上がるわけではない

メモリ使用量削減と高速化は別の問題

量子化について、

モデルが軽くなる
=
推論も必ず速くなる

と考えることがあります。

しかし、実際にはそうとは限りません。

量子化によって低ビットでモデルの重みを保存できれば、GPUメモリへのデータ転送量を減らせる可能性があります。

一方で、推論時に低ビットの重みを別の計算形式へ変換する処理などが必要になる場合があります。

そのため、

メモリ使用量は減った
↓
しかし変換処理は増えた

という状態になる可能性があります。

専用カーネルを利用できるかどうかで速度が変わる

4bit量子化モデルには、

W4A16
W4A8
FP4

など複数の計算方式があります。

また、GPUや推論エンジンによっては低ビット計算に最適化された専用カーネルを利用できます。

適切な低ビット演算用カーネルを利用できれば、大幅に高速化できる場合があります。

一方、その量子化方式に対応した高速カーネルが存在しなければ、FP16モデルより速くならないこともあります。

場合によっては、量子化モデルのほうが遅くなることもあります。

したがって、

量子化=高速化技術

と単純に考えるのではなく、

メモリ使用量やメモリ帯域を削減し、
適切なハードウェアや実装を利用できれば
高速化できる可能性がある技術

と理解するのが適切です。

量子化の効果はハードウェアによって大きく異なる

GPUによって対応する低精度演算が違う

同じ量子化モデルでも、使用するGPUによって推論性能は大きく変わります。

たとえばGPUによって、

INT8演算
INT4演算
FP8演算
FP4演算

への対応状況や性能が異なります。

したがって、

あるGPUでは4bitモデルが非常に高速

でも、

別のGPUではほとんど速くならない

というケースがあります。

推論エンジンによっても性能は変わる

LLMにはさまざまな推論エンジンがあります。

代表的なものとして、

Transformers
vLLM
llama.cpp
TensorRT-LLM
MLX
Ollama

などがあります。

これらは対応する量子化形式や最適化方法が異なります。

したがって実際の推論性能は、

モデル
×
量子化方式
×
GPU
×
推論エンジン
×
カーネル
×
バッチサイズ
×
コンテキスト長

などの組み合わせで決まります。

キャリブレーションが必要になる場合がある

GPTQやAWQでは事前データを利用することがある

量子化方式によっては、モデルを量子化する前に代表的なデータを入力して、モデル内部の状態を分析します。

この処理をキャリブレーションと呼びます。

たとえばGPTQやAWQなどでは、キャリブレーションデータを使用して、量子化による性能低下を抑えることがあります。

概念的には、

元モデル
↓
代表的なデータを入力
↓
重みやactivationなどを分析
↓
量子化方法を決定
↓
量子化モデルを生成

という流れになります。

キャリブレーションデータの選び方が影響する場合がある

キャリブレーションデータの内容によって、量子化後の性能が変化する場合があります。

たとえば使用するデータが特定のドメインへ大きく偏っている場合、別のタスクで性能が低下する可能性があります。

ただし、その影響の大きさは量子化方式によって異なります。

GPTQ、AWQなどではキャリブレーションデータの利用方法が異なるため、

キャリブレーションデータが違えば必ず性能が大きく変わる

とは限りません。

学習やファインチューニングが複雑になる

低ビットモデルをそのままフルファインチューニングするのは難しい

量子化は特に推論時のメモリ削減と相性の良い技術です。

一方で、量子化済みモデルをそのまま通常の方法でフルファインチューニングするのは簡単ではありません。

通常の学習では、重みに対して非常に細かな更新を繰り返します。

しかし、4bitなどでは表現できる値が限られているため、そのまま高精度な勾配更新を行うのは困難です。

QLoRAなどを利用して追加パラメータを学習する

そこで広く利用されているのがQLoRAです。

QLoRAでは、

量子化されたベースモデル
↓
基本的に固定

+

LoRAパラメータ
↓
学習

という構造を使用します。

これにより、大規模なモデルを少ないVRAMでファインチューニングできます。

ただし、モデル本体のすべてのパラメータを通常の高精度学習と同じように自由に更新するわけではありません。

そのため、

量子化モデルは学習できない

というより、

低ビット量子化されたモデルを通常のフルファインチューニングへ
そのまま利用するのは難しく、
LoRAやQLoRAなどの方法がよく利用される

と理解するのが正確です。

モデルによって量子化への強さが異なる

同じ4bitでも性能低下の大きさは違う

量子化への耐性はモデルによって異なります。

たとえば、

モデルA
→ 4bitでもほとんど性能低下なし

モデルB
→ わずかに低下

モデルC
→ 比較的大きく低下

ということがあります。

これは、

モデルアーキテクチャ
重み分布
activation分布
学習方法
量子化アルゴリズム
group size
量子化対象レイヤー

などによって結果が変わるためです。

したがって、

4bitなら性能が必ず○%低下する

という共通の数値はありません。

大きなモデルほど量子化に強いとは限らない

大規模モデルには冗長性があるため、量子化による情報損失を吸収しやすい場合があります。

しかし、

モデルが大きい
=
必ず量子化に強い

とは言えません。

量子化耐性はモデルサイズだけではなく、

アーキテクチャ
学習方法
重みの分布
activationの分布
量子化方式

などによって決まります。

そのため、モデルサイズだけで量子化後の品質を判断するべきではありません。

量子化方式によって互換性に差がある

すべての推論エンジンで同じモデルを使えるわけではない

量子化にはさまざまな形式があります。

代表例として、

GPTQ
AWQ
GGUF
bitsandbytes
HQQ
FP8

などがあります。

しかし、すべての推論エンジンがすべての量子化形式へ対応しているわけではありません。

たとえば、

GPTQモデル

を使える推論エンジンと、

GGUFモデル

を使える推論エンジンは必ずしも同じではありません。

そのため量子化モデルを選ぶときは、

どのGPUで動かすのか
どの推論エンジンを利用するのか
どの量子化形式に対応しているのか

まで確認する必要があります。

特定の環境への依存が強くなる場合がある

元のBF16やFP16モデルであれば複数の環境で利用しやすくても、量子化後は特定の推論ランタイムへ依存するケースがあります。

そのため、量子化には、

軽量化できる

というメリットがある一方、

移植性が低下する可能性がある

というデメリットもあります。

ビット数を減らせば必ず速くなるわけではない

3bitが4bitより遅くなることもある

理論上は、

FP16
↓
INT8
↓
4bit
↓
3bit
↓
2bit

とビット数を減らすほど、モデルサイズは小さくなります。

しかし、ハードウェアは必ずしもすべてのビット幅に最適化されているわけではありません。

特に3bitのような数値は、コンピューター内部で扱いにくい場合があります。

その結果、

packing
unpacking
型変換

などの追加処理が必要になり、

3bitモデルより4bitモデルのほうが速い

というケースもあります。

したがって、

ビット数が少ない
=
推論速度が速い

とは限りません。

重みを4bit化してもVRAM全体が4分の1になるわけではない

LLMは重み以外にもVRAMを使用する

FP16の重みを4bitにすれば、重み部分の理論的なデータ量は約4分の1になります。

しかし、LLM推論では重み以外にもVRAMを使用します。

代表的なものには、

モデルの重み
KV Cache
Activation
一時バッファ
CUDAワークスペース
推論ランタイムのオーバーヘッド

などがあります。

そのため、

Weight memoryが4分の1

になっても、

GPU全体のVRAM使用量が4分の1

になるとは限りません。

量子化モデルにも追加情報が必要になる

量子化モデルでは、

scale
zero-point
group情報
metadata

なども保存する場合があります。

そのため、4bit量子化モデルの実際のサイズは、FP16モデルの厳密な25%になるわけではありません。

「理論的には重みを約4分の1にできる」と理解するのが適切です。

長いコンテキストではKV Cacheが問題になる

Weight Quantizationだけではメモリ不足を解決できない場合がある

LLMで長い文章を処理するときには、KV Cacheと呼ばれるデータをGPUメモリへ保存します。

コンテキストが長くなるほどKV Cacheは大きくなります。

そのため、

モデルの重み
→ 4bit化して小さくした

としても、

KV Cache
→ 大量にVRAMを使用

することで、メモリ不足になる場合があります。

特に、

大規模モデル
+
長いコンテキスト
+
大きなbatch

ではKV Cacheが重要になります。

KV Cache自体を量子化する方法もある

KV Cacheについても、

FP16
↓
FP8
↓
INT8

などの低精度形式を利用する方法があります。

これをKV Cache Quantizationと呼びます。

KV Cacheを量子化することで、長文推論時のVRAM使用量やスループットを改善できる場合があります。

ただし、Attentionで参照する情報そのものを低精度化するため、出力品質へ影響する可能性があります。

そのため、

Weight Quantization

と、

KV Cache Quantization

は別々に評価する必要があります。

量子化モデルの作成にもコストがかかる

高品質な量子化では事前処理が必要になる

量子化モデルは完成後こそ軽量ですが、作成するときには計算処理が必要になる場合があります。

特にGPTQやAWQなどでは、

元モデルを読み込む
↓
キャリブレーション
↓
モデル内部を分析する
↓
量子化パラメータを計算する
↓
量子化モデルを生成する
↓
性能を評価する

といった工程が必要です。

大規模モデルでは、

GPU
RAM
ストレージ
処理時間

も必要になります。

つまり、

完成したモデルは軽い

一方で、

高品質な量子化モデルを作る作業にはコストがかかる

というデメリットがあります。

量子化すると問題の原因を特定しにくくなることがある

品質低下の原因候補が増える

FP16モデルでは正常だったのに、4bitモデルへ変更したところ回答品質が悪化したとします。

この場合、

量子化方式
bit数
group size
scale
キャリブレーションデータ
量子化対象レイヤー
GPU
カーネル
推論エンジン

など、さまざまな要因が考えられます。

そのため、

なぜ回答品質が低下したのか

を特定するのが難しくなる場合があります。

個人でローカルLLMを利用する場合は大きな問題にならなくても、大規模な本番サービスでは運用コストにつながる可能性があります。

LLM量子化の主なデメリット

量子化の代表的なデメリットをまとめると、以下のようになります。

デメリット内容
モデル品質低下の可能性低精度化によって量子化誤差が発生する
低ビット化が難しい4bitより3bit、2bitのほうが品質維持が難しくなる傾向がある
タスクによって影響が違う数学、コード、長文などで差が出る場合がある
外れ値への対応が必要値の分布によって量子化誤差が増える可能性がある
必ず高速になるわけではないGPUやカーネルによっては速度が向上しない
ハードウェア依存性があるGPU世代などによって対応する低精度演算が違う
キャリブレーションが必要な場合があるGPTQやAWQなどでは事前データを使用する
学習が複雑になる通常のフルファインチューニングが難しくなる場合がある
互換性の問題がある推論エンジンによって対応形式が異なる
VRAMが単純に4分の1になるわけではないKV Cacheなど別のメモリ使用量がある
KV Cacheは別途対策が必要長いコンテキストでは大きなメモリを消費する
量子化モデルの作成にコストがかかるキャリブレーションや変換処理が必要
デバッグが複雑になる問題の原因候補が増える

8bit・4bit・2bitはどのように考えればよいのか

8bitは比較的品質を維持しやすい

8bit量子化は、低ビット量子化の中では比較的量子化誤差を抑えやすい方式です。

そのため、

品質をなるべく維持したい
↓
しかしFP16よりメモリを減らしたい

という場合に使いやすい選択肢です。

4bitはメモリ効率とのバランスがよい

4bit量子化は、LLMをローカル環境で動かす際によく使われます。

適切な量子化アルゴリズムや実装を利用すれば、モデルサイズを大幅に削減しながら、元モデルに近い性能を維持できる場合があります。

そのため、

品質
メモリ使用量
推論速度

のバランスを取りやすい精度です。

2bitや3bitではトレードオフが大きくなりやすい

2bitや3bitまで精度を下げると、さらにモデルサイズを削減できます。

一方で、表現できる数値の種類が少なくなるため、モデル品質を維持する難易度が高くなります。

また、ハードウェアが3bitなどへ最適化されていなければ、モデルサイズが小さくなっても推論速度が上がらない可能性があります。

そのため、極端な低ビット量子化では、品質と速度の両方を確認する必要があります。

LLM量子化では品質・速度・メモリを総合的に評価することが重要

量子化は、単純に「モデルの性能を落として小さくする技術」ではありません。

本質的には、

モデル品質
推論速度
VRAM使用量
メモリ帯域
消費電力
ハードウェアコスト

のバランスを最適化するための技術です。

たとえばFP16では大規模モデルをGPUへ載せられない場合でも、4bitへ量子化すれば利用できる可能性があります。

その場合、

小型モデルをFP16で動かす

よりも、

大型モデルを4bitで動かす

ほうが、最終的な回答品質が高くなることもあります。

したがって、

量子化したらどれだけ性能が落ちるか

だけを見るのではなく、

限られたハードウェアの中で、
どの構成が最も高い実用性能を出せるか

という視点で考えることが重要です。

実際の利用環境でベンチマークする

量子化モデルを比較するときは、少なくとも、

VRAM使用量
モデルサイズ
TTFT
tokens/sec
throughput
実際のタスクでの回答品質
最大コンテキスト長

などを確認することをおすすめします。

特に重要なのは、一般的なベンチマークスコアだけではなく、自分が実際に使用するプロンプトやタスクで評価することです。

量子化による影響は、モデル、量子化方式、GPU、推論エンジン、タスクによって大きく変わるためです。

LLM量子化のデメリットを理解したうえで使い分けることが重要

LLMの量子化には、VRAM使用量を削減し、大規模モデルを限られたハードウェアで動かしやすくできるという大きなメリットがあります。

一方で、

量子化誤差による品質低下
推論速度が必ず向上するわけではない
ハードウェア依存性
互換性の問題
学習の複雑化

といったデメリットもあります。

特に注意したいのは、

4bitモデルだから性能が低い

あるいは、

ビット数が低いほど必ず高速

とは限らないことです。

現在のLLM量子化では、ビット数だけでなく、GPTQやAWQなどのアルゴリズム、INT4やNF4などの表現形式、GPU、推論エンジン、専用カーネルなどによって実際の性能が大きく変化します。

そのためLLMを量子化するときは、単純に最もビット数の低いモデルを選ぶのではなく、品質・速度・VRAM使用量のバランスを確認しながら、用途に合った量子化方式を選ぶことが重要です。

以上、LLMの量子化にはどのようなデメリットがあるのかについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次