Local / Edge実践ガイド

llama.cppのコンテキスト長とKV cacheを設定する方法

llama.cppのコンテキスト長とKV cacheを設定する方法
目次

公式サイトで次に進む

この記事で明示的に扱うソフトだけを表示します。配布・手順は各公式ページで確認してください。

local-gen.jpがファイルを配布するものではなく、互換性を保証するものでもありません。

llama.cppで長い文章を扱うとき、「モデルカードに128Kと書いてあるから128Kで起動すればよい」とは限らない。

モデルが対応する上限と、今回の実行で確保するコンテキスト長、KV cacheに使うメモリを分けて考える必要がある。

llama.cppのコンテキスト長と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使用量と同じとは限らない。

最大値を比べる場合は、何の計測ツールで、どの区間を測ったのかを別に記録する。

必要な長さを満たしたところで止める

最終的な目標は最大値を設定することではなく、自分の用途に必要な文章量を安定して扱うことだ。

  1. 実際に必要な入力長を確認する
  2. 少し余裕を持ったctx-sizeで起動する
  3. メモリと出力を記録する
  4. 足りないときだけ長くする
  5. KV cacheの設定を変えるなら、その後に一項目ずつ比較する

長いコンテキストでVRAMが増える仕組み自体を確認したい場合は、KV cacheとコンテキスト長がVRAMへ与える影響も参考になる。モデル層のGPU配置を調整したい場合は、llama.cppのn-gpu-layersの決め方へ進む。

まとめ

  • モデルが対応する最大コンテキスト長と、llama.cppで実際に確保する長さは分けて考える
  • llama.cppでは-c/--ctx-sizeで使用するコンテキスト長を指定できる
  • KV cacheのデータ型や配置を変える場合は、メモリ使用量だけでなく出力や互換性も同じ条件で確認する
  • 起動ログの個別バッファー容量と、推論中に到達する最大VRAM使用量は別に確認する
同じテーマから

この記事で扱ったデータ

モデル・GPU・実行ソフトの確認済みデータを、記事とは別に確かめられます。

サイト内検索