Local / Edge実践ガイド
llama.cppのコンテキスト長とKV cacheを設定する方法

目次
公式サイトで次に進む
この記事で明示的に扱うソフトだけを表示します。配布・手順は各公式ページで確認してください。
llama.cpp
local-gen.jpがファイルを配布するものではなく、互換性を保証するものでもありません。
llama.cppで長い文章を扱うとき、「モデルカードに128Kと書いてあるから128Kで起動すればよい」とは限らない。
モデルが対応する上限と、今回の実行で確保するコンテキスト長、KV cacheに使うメモリを分けて考える必要がある。
図: 容量・設定値・段階差の判断軸を1枚に整理。数値の条件は本文を優先する。
モデルの上限と--ctx-sizeは別に確認する
llama.cppでは-c / --ctx-sizeで、実行時に使うコンテキスト長を指定できる。
モデルが大きなコンテキストに対応していても、毎回その最大値を確保する必要はない。実際に使う入力が短いなら、必要な長さから始めた方がメモリの変化を追いやすい。
最初に次を記録する。
モデル・リビジョン:
モデルのコンテキスト上限:
llama.cppのバージョン:
-c / --ctx-size:
実際の入力長:
小さい値から段階的に増やす
長いコンテキストでメモリ不足が起きる場合は、モデルやGPUオフロード量を同時に変えず、まずctx-sizeだけを比較する。
| 試行 | ctx-size | 入力条件 | メモリの記録 | 結果 |
|---|---|---|---|---|
| A | 小 | 同じ | 記録 | 成功・失敗 |
| B | 中 | 同じ | 記録 | 成功・失敗 |
| C | 必要な長さ | 同じ | 記録 | 成功・失敗 |
こうすれば、コンテキストを伸ばしたことによる差を見やすい。
KV cacheのデータ型は別の設定として扱う
llama.cppには、KV cacheのK側とV側のデータ型を指定するための--cache-type-k、--cache-type-vが用意されている。
利用できるデータ型や既定値はバージョンによって変わる可能性があるため、使用中の--helpや公式資料で確認する。
より小さなデータ型へ変更してメモリを減らせる場合でも、出力への影響が常にゼロとは限らない。比較するなら同じプロンプトと生成条件を使う。
KV cacheの配置とモデル層の配置を混同しない
KV cacheをGPUへ置くかどうかと、--n-gpu-layersでモデル層をどこまでGPUへ置くかは別の設定だ。
モデル層の配置
KV cacheの配置
コンテキスト長
をそれぞれ記録する。
モデル層がGPUに載っているから、KV cacheも必ず同じ場所にあるとは決めつけず、使用中の設定とログを確認する。
ログの一つの数字を最大VRAM使用量と呼ばない
llama.cppの起動ログには、モデルのバッファーやKV cacheなどに関する容量が表示されることがある。
その数字は配置を確認する材料になるが、PC全体で推論中に到達した最大VRAM使用量と同じとは限らない。
最大値を比べる場合は、何の計測ツールで、どの区間を測ったのかを別に記録する。
必要な長さを満たしたところで止める
最終的な目標は最大値を設定することではなく、自分の用途に必要な文章量を安定して扱うことだ。
- 実際に必要な入力長を確認する
- 少し余裕を持った
ctx-sizeで起動する - メモリと出力を記録する
- 足りないときだけ長くする
- KV cacheの設定を変えるなら、その後に一項目ずつ比較する
長いコンテキストでVRAMが増える仕組み自体を確認したい場合は、KV cacheとコンテキスト長がVRAMへ与える影響も参考になる。モデル層のGPU配置を調整したい場合は、llama.cppのn-gpu-layersの決め方へ進む。
まとめ
- モデルが対応する最大コンテキスト長と、llama.cppで実際に確保する長さは分けて考える
- llama.cppでは-c/--ctx-sizeで使用するコンテキスト長を指定できる
- KV cacheのデータ型や配置を変える場合は、メモリ使用量だけでなく出力や互換性も同じ条件で確認する
- 起動ログの個別バッファー容量と、推論中に到達する最大VRAM使用量は別に確認する
この記事で扱ったデータ
モデル・GPU・実行ソフトの確認済みデータを、記事とは別に確かめられます。