複数の8〜12Bモデルに対する8種類のllama.cpp KVキャッシュ量子化のKLD測定

Reddit r/LocalLLaMA / 2026/3/24

💬 オピニオンSignals & Early TrendsIdeas & Deep AnalysisTools & Practical UsageModels & Research

要点

  • 本投稿では、8つの8B〜12Bモデル(例:Qwen3.5 9B、Qwen3-VL 8B、Gemma 3 12B、Ministral 3 8B、Irix 12Bなど)におけるllama.cppのKVキャッシュ量子化設定を比較し、自己実行したKLD(相対エントロピー)測定の結果を報告する。
  • 著者はf16のKVキャッシュを用いて基準となるlogitsを生成し、llama.cppで検証したKVキャッシュの量子化がKLDによって出力分布に与える影響を評価する。
  • GPUのVRAMに制限があるため、著者は既に量子化されたモデル(IQ4_XS)を用いてlogitsを生成する。そのうえで、モデル重みを固定した場合でも、KLDがKV量子化によって生じる分岐(ダイバージェンス)を意味のある形で反映しうると主張している。
  • 方法論は、文脈ウィンドウの一部に対して、llama-perplexity風のKLD計算を用いる(主にwikitext-2で検証し、さらに200kトークンのRPをつなぎ合わせたテストでも確認する。結果は概ねwikitext-2と一致している)。
  • 量子化バリアントの一部(例:iq4_nl)はCUDA上で実行できなかったため、比較から除外している。
8種類のllama.cpp KVキャッシュ量子化におけるKLD測定(複数の8〜12Bモデル)

免責事項

  • 私はGPUがとても貧弱でVRAMが6GBしかないため、すべてのlogitsは、すでに量子化済みのモデルで生成しました(この場合、すべてIQ4_XSです)。実際に実行するためにはそうする必要がありました。良い点として、KLDは相対エントロピーを測る指標なので、同じ量子化済みモデルを使う限り、これらの数値は「量子化したKVキャッシュを使ったときに出力logitsがどれくらい変わるか」を引き続き示してくれます。
  • これが意味のある情報を取り出せるかどうか、100%確信はありません。Llama-perplexityは、処理する各コンテキストウィンドウの後半でKLDを計算します。もし可能なら、実際のinstruct会話を使ってセットアップし、KLDはアシスタントメッセージに対してのみ測定したいところでした。さらに、ツール呼び出しを特に狙った別テストも用意するかもしれません。実際に、200kトークン(wikitext-2は300k)合計となるようにRPセグメントをつなぎ合わせたテキストファイルで、1つのモデルを回しました。しかし、そこから得られた結果はほぼwikitextと同一だったので、時間を節約し、SSDに無駄な苦痛を与えないために、より標準的なオプションを選びました。
  • 何らかの理由でiq4_nlがcudaで動かせなかったため、含めていません。

手法

Llama.cpp b8288(b5fe4559a)、GGML_CUDA_FA_ALL_QUANTSでビルド。ベースのlogitsはf16のKVで生成。「wikitext」の「long」バリアでは、すべてのモデルで、llama-perplexityがクラッシュしない範囲の最も大きい2のべき乗となるようにコンテキストサイズを引き上げました。具体的にはMinistralとIrixが16k、Qwen3.5とQwen3 VLが8k、Gemma 3が4kです。それ以外では、llama-perplexityがデフォルトで設定するコンテキストサイズは512です。

結果

通常のwikitext-2

longのwikitext-2

wikitextを実行する前に、すべてが正しく動くことを確認するために、小さめの会話(32kトークン)で大量のテストを行いました。コンテキストサイズもlong wikitextと同じにしています。この時点で、Bartowskiの量子化のほうが、Qwen3.5 9Bに対してはUnslothよりも良いKLDになる、というスレッドを見たので、両方を試しました。wikitextではBartowskiの量子化だけを使用しました。サンプル数が少ないことを考えると、これらの数値をあまり重く受け止めないほうがよいでしょう。

テスト会話

追加の結果

PPLやトークン統計を含む、llama-perplexityによる完全な結果はすべてこのリポジトリにアップロードしました。必要なら確認してみてください(なぜ±やΔpが日本語の文字に変わったのかは聞かないでください。ターミナルが勝手にそうしてしまっただけです)。

個人的な所見

  • 一般に、KV量子化によるKLDへの影響は、「同等の」重み量子化よりもやや低いように見えます。ただ、2つがどのように合成されるのか不明なので、そこから結論を出すことはできません。bf16で実際に読み込めるモデル(例:qwen3.5 2B)で追加テストを実行して、この点を調べてみようと考えています。
  • Qwen3 VLは、KVを量子化することをかなり嫌がります。
提出者 /u/Velocita84
[リンク] [コメント]