Dynamo + LMCache MP integration
Recipes for running NVIDIA Dynamo vLLM serving with KV cache offloaded to an LMCache multiprocess (mp) server, in both aggregated and disaggregated modes.
In mp mode LMCache runs as an out-of-process cache engine. vLLM workers attach
to it through the LMCacheMPConnector and share KV tensors over CUDA IPC, so
sharedMemory is disabled (LMCache owns /dev/shm) and hostIPC is enabled.
Layout
| Path | What it is |
|---|---|
deploy/lmcache_engine.yaml |
LMCacheEngine CR for the shared MP server. Apply before the workers. |
deploy/agg_lmcache_mp.yaml |
Kubernetes DynamoGraphDeployment, aggregated (single worker). |
deploy/disagg_lmcache_mp.yaml |
Kubernetes DynamoGraphDeployment, disaggregated (prefill + decode workers). |
launch/agg_lmcache_mp.sh |
Local single-node launch script, aggregated (1 GPU). |
launch/disagg_lmcache_mp.sh |
Local single-node launch script, disaggregated (2 GPUs). |
The LMCacheEngine (shared prerequisite)
deploy/lmcache_engine.yaml declares the MP
server that both the aggregated and disaggregated workers attach to. The
LMCache operator reconciles the CR into:
- a per-node manager DaemonSet pod (the LMCache server that holds the CPU KV pool), and
- a ConfigMap named
<metadata.name>-connection(i.e.lmcache-mp-connection), which the vLLM workers mount at/etc/lmcacheand read as--kv-transfer-config.
It must live in the same namespace as the workers (default) so the
connection ConfigMap is created where the workers can mount it.
Version pinning: the server's bundled lmcache must be wire-compatible with
the worker's. The worker image vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3
ships lmcache 0.4.4 (vLLM 0.20.1), and the recipe pairs it with the
guide-validated server build nightly-2026-04-25 (lmcache 0.4.5.dev31, a
pre-stable build wire-compatible with that worker). Replace my-tag in each
manifest accordingly.
Usage
The deploy/ manifests are applied with kubectl against a cluster that
already has the Dynamo platform and the LMCache operator installed. Apply the
LMCacheEngine first, then one of the worker manifests:
kubectl apply -n default -f deploy/lmcache_engine.yaml
kubectl apply -n default -f deploy/disagg_lmcache_mp.yaml # or agg_lmcache_mp.yaml
See the Kubernetes deployment guide for
the full step-by-step (platform install, operator, namespace, HF token Secret,
then kubectl apply).
The launch/ scripts are the single-node local equivalents. They run inside
the Dynamo vllm-runtime container and source Dynamo's
examples/common/{gpu_utils,launch_utils}.sh helpers, so run them from a Dynamo
checkout (or copy them into examples/backends/vllm/launch/).
The deploy manifests pin the worker image to
my-tagand theLMCacheEngineimage separately; keep the two wire-compatible (see the validated pairings in the deployment guide).