小さいモデルほど量子化で劣化する:モデルとGGUF量子化の関係

ハウツー

ローカルLLMを使うとき、たいていは量子化します(ここではGGUF量子化を前提に話をします)。FP16で推論させる意味がないからです。性能と量子化数の度合いはトレードオフの関係にありますが、実際はどの程度の量子化まで許容されるのでしょうか。それを調べました。

8bit量子化までは確実に劣化しない

量子化と劣化の度合いを表してくれているのが以下のページです。
https://note.com/bakushu/n/n1badaf7a91a0
q8までは劣化しませんが、q4は危ないです。ちょっと劣化します。後述のk-quantsを取り入れたq4_k_mが多くのモデルにとって最適な、サイズと性能のバランスがとれた選択肢になると思います。激しい量子化をすると他のモデルよりも極端に性能が落ちるモデルが存在するようです(LLama3)。bf16の細かい桁にまで重要な情報を詰め込んでいるという意味で冗長性に乏しく、量子化によってその部分まで失われてしまう、との説明があります。参考

K-quantsとI-quants

K-quants

q4_k_mなど、kがつく量子化です。可変ビットレートといって、モデルのレイヤーごとに量子化の度合いを変化させたものです。重要なレイヤーの量子化は控えめに、どうでもいいレイヤーはがっつり、という感じ。これによってレガシーな(全てのレイヤーに同じ量子化を施す)量子化よりも性能の劣化を抑えることができます。q4_0よりもq4_k_mのほうが圧倒的に良いです。

I-quants

iq4_sなど、iがつく量子化です。こちらですが、よくわかりません。「本当の」2bit量子化だとか言ってます。これに関する日本語の解説が見当たらず、また機械翻訳でも私の貧弱な英語力でもよくわかりませんでした。たぶんLLMに関する私の英語の素地が欠けています。

UD(Unsloth Dynamic)

モデルにUDとつくものです。量子化するレイヤーをモデルごとに動的に決定します。K-quantsとは異なり、劣化の評価にはperplexityではなくKL Divergenceというものを使用します。K-quantsとI-quantsはUDと共存できるようです。
※perplexityは実際の性能の劣化を表すわけではありませんが、実際のタスク性能の劣化具合とperplexityはおおむね連動します。

小さいモデルほど量子化で劣化しやすい

このディスカッションでは、「7Bでは量子化によって(性能の)顕著な差が見られる」「3Bと1Bではさらに顕著に劣化する」「13Bではq4が完璧だったり劣化していたりする」という報告がされています。現在現実的に動かせるローカルLLMの中で覇権を握っているのがQwen3.6-27BとGemma4-31Bなので、13Bよりも大きいモデルでの劣化具合の報告が欲しいところですが、目安として知っておくといいでしょう。
つまり小さいモデルほど量子化で劣化しやすいということです。ただ、K-quantsやUDでは”重要な”レイヤーの量子化を控えめにしていたりするため、事情が異なる可能性があります。体感ではK-quantsを使っていたとしても3bit以下の量子化モデルにはあまり手を出さない方がいいです(一方で、UD+K-quantsで3bit量子化したGemma4-31Bはかなり劣化が抑えられているなと感じます)。

小さいモデルの高ビットか、大きいモデルの低ビットか

7Bの8bitを使うか13Bの4bitを使うか、といったジレンマです。パラメータ数が多いほどモデル内に保持しておける知識の量が増えるので、できる限り大きいパラメータの低ビットなモデルを選んだ方がいいかもしれません。2bit以下は使い物にならないということを念頭に置いて、自分が持っているVRAMの容量と相談する必要があります。Qwen3.5-27BとQwen3.5-122B-A10Bだったら迷わず後者を選びますが、RAMが足りなくて断念しました(MoEモデルはアクティブパラメータぶんだけVRAMがあれば快適に動く)……

コメント

タイトルとURLをコピーしました