Guía práctica de LMCache: reutilizar KV Cache en servicios vLLM

Guía práctica de LMCache: cuándo merece la pena reutilizar KV Cache, cómo probar LMCache con vLLM en modo MP, cómo comprobar aciertos de caché y qué revisar antes de producción.

LMCache resuelve un problema concreto de inferencia LLM: muchas peticiones comparten la primera parte del prompt, pero el servidor recalcula el prefill cada vez. Eso desperdicia GPU.

Si usas prompts de sistema largos, plantillas RAG, conversaciones de varios turnos, descripciones de herramientas de agentes o contexto fijo, LMCache merece una prueba. Su objetivo principal es reducir prefill repetido y bajar el TTFT.

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

Cuándo Tiene Sentido

Encaja cuando los prompts son largos, comparten prefijo, RAG repite fragmentos, las conversaciones reutilizan historia, los agentes incluyen herramientas largas o varias instancias vLLM necesitan compartir caché. Si las peticiones son cortas o no comparten prefijo, el beneficio puede ser bajo.

Empieza con vLLM en Modo MP

  • Modo MP: LMCache corre como servicio independiente y vLLM usa LMCacheMPConnector.
  • Modo in-process: LMCache corre dentro del proceso vLLM con LMCacheConnectorV1.

Para uso práctico, MP es más fácil de observar, gestionar y compartir entre instancias.

Instalación

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

O:

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

En producción fija versiones y comprueba compatibilidad entre vLLM, LMCache y connector.

Arrancar LMCache

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

--chunk-size 16 es útil para demos; en producción suele usarse el valor por defecto, como 256. Los puertos por defecto son ZMQ 5555 y HTTP 8080.

Arrancar vLLM

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

Con vLLM 0.20.0 o superior:

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"}'

Probar Aciertos

Envía dos peticiones con prefijo compartido:

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
  }'

La primera debería mostrar Stored ... tokens; la segunda, Retrieved ... tokens.

Qué Observar

Mira hit tokens, hit ratio, origen de la caché, latencia de lectura, mejora de TTFT y efecto de la alineación de chunks. No basta con ver que existe un Retrieved.

Dónde Aporta Más

Prompts de sistema largos, plantillas RAG fijas, descripciones de herramientas de agentes y servicios con múltiples instancias. Empieza con CPU RAM local antes de usar Redis, S3, NIXL u otros backends complejos.

Modo In-Process

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

Es simple, pero la caché depende del proceso vLLM. Para producción suele ser más cómodo MP.

Checklist

  • Comparar TTFT con y sin LMCache.
  • Registrar prefill latency por separado.
  • Medir prefix cache hit tokens y hit ratio.
  • Vigilar memoria de LMCache.
  • Probar reinicio de vLLM.
  • Revisar métricas ZMQ, HTTP y logs bajo concurrencia.
  • Medir con prompts reales.

Resumen

LMCache es útil cuando prompts largos se repiten. No acelera mágicamente todo; convierte prefill repetido en KV Cache reutilizable. Si ya usas vLLM, prueba primero MP localmente, confirma aciertos y compara TTFT con tráfico real.

记录并分享
Creado con Hugo
Tema Stack diseñado por Jimmy