Files
2026-07-13 12:24:33 +08:00
..

LMCache Examples

This directory contains runnable examples organized by use case. The table below describes what each example does, its hardware requirements, and a recommended learning order for infrastructure engineers getting started with LMCache.

Single-node vs. multi-node: Examples marked with NIXL or UCX require a high-bandwidth interconnect (NVLink or PCIe Gen4/5). Running them on a single machine with two GPUs is simpler than a true multi-node setup, but cross-node deployments add network configuration complexity — don't start there if you're still learning the basics.


Before You Start

Example What it does Hardware
kv_cache_calculator/ Web UI for calculating KV cache size (GB) given model architecture, dtype, and token count. Start here to size GPU memory and cache tiers before running anything. None (browser)

Tier 1 — Core Concepts (Single-Node)

Focus: local caching within a single machine. No cross-node networking required.

Example What it does Hardware
kv_cache_reuse/local_backends/ Offload KV cache from GPU to CPU memory or local disk. Repeated requests with identical prefixes skip prefill entirely. Includes a Rust-based NVMe backend with io_uring support (Linux kernel 5.10+ required for io_uring). 1 GPU; optional NVMe for disk path
online_session/ Measure TTFT (time-to-first-token) for cold vs. cache-hit requests. Outputs JSONL for plotting. Includes a sweep script across context lengths. 1 GPU

Tier 2 — Disaggregated Prefill and Multi-Instance Sharing

Focus: separating prefill from decode, and sharing KV cache across vLLM instances.

Example What it does Hardware
disagg_prefill_mp/ PD disaggregation via the LMCache multiprocess server. P and D exchange KV through the LMCache MP service — no direct NIXL connection required. Recommended starting point for PD disaggregation. 2 GPUs
disagg_prefill/1p1d/ PD disaggregation with direct NIXL transfer: 1 prefill server + 1 decode server + a FastAPI proxy. Includes a benchmark script with expected latency numbers. High-bandwidth interconnect (NVLink or PCIe Gen4/5) is strongly recommended — without it, KV transfer overhead may negate the gains. 2 GPUs + NIXL
kv_cache_reuse/share_across_instances/centralized_sharing/ Two vLLM instances share one LMCache server. A prefix computed by instance A is reused by instance B. ⚠️ Requires PYTHONHASHSEED=0 in all processes — without this, hashes differ across processes and cache lookups silently miss. 2 GPUs (same node)
kv_cache_reuse/share_across_instances/p2p_sharing/ Two vLLM instances transfer KV directly peer-to-peer using NIXL and UCX RDMA (UCX_TLS=rc). 2 GPUs + NIXL + UCX
p2p/ P2P KV cache sharing in multiprocess mode: each node runs an LMCache server, and a server reads a prefix it lacks directly from the peer that holds it over RDMA. A coordinator handles peer discovery. Includes single-node (debug) and multi-node setups and the logs to expect. 2+ GPUs (single- or multi-node) + RDMA fabric

Tier 3 — Production Operations and Observability

Focus: deploying, monitoring, and operating LMCache in production.

Example What it does Hardware
observability/ Full observability stack: OTel → Prometheus + Tempo → Grafana. Pre-provisioned dashboard shows cache hit rate, read/write throughput, and per-request trace waterfalls. Started with docker compose up. 1 GPU + Docker
multi_process/ Kubernetes DaemonSet YAML for deploying the LMCache server as a per-node sidecar (60 GB L1, 4 workers). Includes resource requests/limits calibrated to the L1 size. Kubernetes cluster with GPU nodes
kubernetes/ health_probe.py: readiness/liveness probe script for LMCache in Kubernetes. Complements the DaemonSet config in multi_process/. None
chunk_statistics/ Track chunk reuse rate using a memory Bloom filter or an on-disk hash log. Query via REST (/chunk_statistics/status). Use this to answer "does my workload benefit from caching?" before committing to a full deployment. 1+ GPUs
cache_controller/ REST APIs for cache orchestration: lookup (which instance holds a key), move (migrate a hot context between instances), pin (prevent eviction), clear, and compress. 1 GPU
cache_with_configs/ and cache_interface/ Per-request control: attach tags (lmcache.tag.*), set TTL (lmcache.ttl), or skip caching entirely (lmcache.skip_save: true). Essential for multi-tenant deployments. 1 GPU
remote_config_server/ Flask reference server for centralised LMCache configuration. Workers POST their current config on startup and receive overrides — useful for managing settings across a large fleet. None

Tier 4 — Advanced Features and Ecosystem

Framework Integrations

Example What it does Hardware
sgl_integration/ Using LMCache with SGLang instead of vLLM. 1 GPU
frontend/ Streamlit chat UI demo backed by vLLM + LMCache. Uses the ffmpeg man page as a long shared context to demonstrate TTFT reduction across turns. 1 GPU
disagg_prefill/xpyd/ xP + yD topology: multiple prefill servers feeding multiple decode servers. 3+ GPUs + NIXL

Storage Backends and Serialization

Example What it does Hardware
kv_cache_reuse/remote_backends/ Remote storage backends: InfiniStore, Mooncake, S3, Valkey, Redis. Each subdirectory has its own README with backend-specific setup. 1 GPU + respective backend
serde/fp8/ Quantize KV cache to fp8 before writing to disk (L2 adapter), then dequantize on prefetch. Halves disk storage requirements. Hopper / Ada GPU (H100, RTX 40-series)
redis_lookup/ Shows the Redis key schema used by LMCache (model@world_size@worker_id@chunk_hash) and redis-cli commands for inspecting live cache entries. Redis + 1 GPU

Non-Prefix KV Reuse (CacheBlend)

Example What it does Hardware
blend_kv_v1/ CacheBlend v1: reuse KV cache even when the new prompt is not a prefix of the cached one (e.g., RAG with swapped documents). Requires a small patch to vLLM source. 1 GPU (experimental)
blend_kv/ CacheBlend v0 (legacy): same concept using the old lmcache_vllm integration. Kept for reference. 1+ GPUs (legacy)

Developer Extensibility

Example What it does Hardware
lmc_external_l2_adapter/ and lmc_external_native_connector/ Templates for writing a custom L2 storage adapter (Python) or a native C++ GPU connector plugin. Depends on implementation
runtime_plugins/ and mp_runtime_plugins/ Sidecar scripts (Python or shell) that run alongside LMCache workers: heartbeats, metric reporters, alert hooks. Filename prefix controls which role (scheduler, worker_0, all) runs the script. None
basic_check/ CLI tool for verifying storage backend health and generating test keys. Useful in CI and for on-call diagnostics. Optional GPU
agents/ Script for analyzing prefix-hash distribution of a prompt dataset. Useful for estimating cache efficiency before deployment. None