llama.cpp:量子化による出力劣化の調査事例

huggingface.co

  • LLMの量子化では、最小で2bit近く(ファイルサイズ1/8程度)まで圧縮できますが、圧縮率を高めると出力の質が低下することが知られています。
  • ただ量子化による変質はperplexityという指標で測定されることが多く、perplexityをそのまま出力の質を表す値として捉えることには疑義があるようです(元のモデルとの誤差を表しているに過ぎない)。
  • この投稿では、GGUFフォーマットの多岐にわたる量子化モデルを、実際に同一のプロンプトでテストした結果がまとめられています。
  • 投稿者の見解として、以下のような解釈が綴られています。
    • Q6_K(6bit量子化)の出力が最も優れている。
    • IQ3_XXS(最近llama.cppに導入された新しい3bit量子化)は、モデルがごく小さいにも関わらず、出力の劣化が極めて限定されている。
    • Q3_K_Mまでは特にモデルが壊れることはないが、Q3_K_S以下ではモデルの信頼性が低下する。
    • K付きの量子化(K-means quants)は、Kなしの旧式の量子化よりも基本的に優れている。
  • 一般的には、4bitの量子化まではモデルへの影響がごく限られ、ほとんど出力の劣化に気づかないとされています(と思います)。
  • ただ最近llama.cppに立て続けに実装された新しい量子化によって精度が改善し、3bitクラスでも良い感じに使えるようになったようです。
  • なお上記のテストは「7Bx2のMoEというマイナーなタイプのモデルを使用」+「ほぼ単一のプロンプト」という条件で行われているようなので、あくまで参考データという風に捉えるべきかと思います。