LMCache 実用ガイド:vLLM 推論サービスで KV Cache を再利用する

LMCache の実用ガイド。KV Cache 再利用が有効な場面、vLLM MP モードでの起動方法、キャッシュヒットの確認、本番前に見るべきメモリ、chunk size、hit ratio、観測指標を整理します。

LMCache は LLM 推論でよくある問題を扱います。多くのリクエストは prompt の前半が重複しているのに、サーバーは毎回 prefill を再計算し、GPU 時間を浪費します。

長いシステムプロンプト、RAG テンプレート、複数ターン会話、Agent のツール説明、固定知識コンテキストがあるなら、LMCache は検討する価値があります。主な狙いは repeated prefill を減らし、TTFT を下げることです。

1
https://github.com/LMCache/LMCache
1
https://docs.lmcache.ai/

必要かどうか

LMCache は、長い prompt、大きな共通 prefix、RAG の反復、長い会話履歴、長い Agent ツール説明、複数 vLLM インスタンスの共有キャッシュに向いています。短いリクエストや共通 prefix が少ない workload では効果が小さい場合があります。

vLLM MP モードから始める

  • MP モード:LMCache を独立サービスとして動かし、vLLM が LMCacheMPConnector で接続する。
  • In-process モード:LMCache を vLLM プロセス内で動かす。

実用上は MP モードがおすすめです。管理、観測、複数インスタンス共有がしやすくなります。

インストール

1
2
3
uv venv --python 3.12
source .venv/bin/activate
uv pip install lmcache vllm

または:

1
2
3
python -m venv .venv
source .venv/bin/activate
pip install lmcache vllm

本番では vLLM、LMCache、connector のバージョン互換性を確認します。

LMCache を起動する

1
lmcache server   --l1-size-gb 20   --eviction-policy LRU   --chunk-size 16

--chunk-size 16 はデモ向けです。本番では通常 256 などのデフォルト値を使います。デフォルトポートは ZMQ 5555、HTTP 管理とメトリクス 8080 です。

vLLM を接続する

1
vllm serve Qwen/Qwen3-8B   --port 8000   --kv-transfer-config   '{"kv_connector":"LMCacheMPConnector", "kv_role":"kv_both"}'

vLLM 0.20.0 以降では次のように LMCache 側 connector を明示できます。

1
vllm serve Qwen/Qwen3-8B   --port 8000   --kv-transfer-config   '{"kv_connector":"LMCacheMPConnector", "kv_connector_module_path":"lmcache.integration.vllm.lmcache_mp_connector", "kv_role":"kv_both"}'

ヒットを確認する

共通 prefix を持つ 2 つのリクエストを送ります。

1
2
3
4
5
6
curl http://localhost:8000/v1/completions   -H "Content-Type: application/json"   -d '{
    "model": "Qwen/Qwen3-8B",
    "prompt": "Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts",
    "max_tokens": 100,
    "temperature": 0.7
  }'
1
2
3
4
5
6
curl http://localhost:8000/v1/completions   -H "Content-Type: application/json"   -d '{
    "model": "Qwen/Qwen3-8B",
    "prompt": "Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models",
    "max_tokens": 100,
    "temperature": 0.7
  }'

1 回目は Stored ... tokens、2 回目は Retrieved ... tokens が見えるはずです。

見るべき指標

hit tokens、hit ratio、キャッシュ取得元、取得時間、TTFT 改善、chunk alignment の影響を確認します。Retrieved が出るだけでは十分ではありません。

効果が出やすい場面

長いシステムプロンプト、固定 RAG テンプレート、Agent ツール説明、複数インスタンス推論サービスです。最初は CPU RAM で試し、Redis、S3、NIXL などの複雑な backend は後で検討します。

In-process モード

1
LMCACHE_CHUNK_SIZE=8 vllm serve Qwen/Qwen3-8B   --port 8000   --kv-transfer-config   '{"kv_connector":"LMCacheConnectorV1", "kv_role":"kv_both"}'

簡単ですが、キャッシュは vLLM プロセスに依存します。長期運用では MP モードの方が扱いやすいです。

本番前チェック

  • LMCache 有効/無効で TTFT を比較する。
  • prefill latency を単独で記録する。
  • prefix cache hit tokens と hit ratio を見る。
  • メモリ安定性を確認する。
  • vLLM 再起動後の挙動を見る。
  • 並行時の ZMQ、HTTP メトリクス、ログを確認する。
  • demo ではなく実業務 prompt で測る。

まとめ

LMCache は、長い prompt が繰り返し現れる推論サービスに向いています。生成そのものを万能に速くするのではなく、repeated prefill を再利用可能な KV Cache に変えます。vLLM を使っているなら、まず MP モードでローカル検証し、実トラフィックで TTFT を比較しましょう。

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。