LMCache 项目深度研究报告

LLM 推理缓存加速框架 — 架构分析与技术深度解读

版本 v0.4.5
License Apache-2.0
发起方 Tensormesh
日期 2026-05-18

1. 项目概述与市场定位

LMCache 是一个面向 LLM 推理场景的 KV Cache 加速框架,通过在 GPU/CPU/磁盘/远程存储各层缓存 KV Cache 来降低首 token 延迟 (TTFT) 并提升吞吐量。它不是一个独立的推理引擎,而是作为 vLLM、SGLang、TensorRT-LLM 等推理引擎的扩展层存在,专注于解决长上下文场景下 KV Cache 重复计算的性能瓶颈。

3-10x
延迟节省
1826
Commits
10
维护者
4
学术论文
21
CI 工作流
80+
配置参数

市场定位

LMCache 定位于 LLM 推理基础设施层,填补了推理引擎与存储系统之间的空白。其核心价值主张体现在三个维度:

采用情况

云服务商
Google Cloud、CoreWeave、GMI Cloud 等
存储基础设施
Redis、Weka、PliOps 等
学术支撑
CacheGen (SIGCOMM 2024)、CacheBlend (EuroSys 2025) 等 4 篇论文
维护团队
UChicago、IBM、ByteDance、Tencent、Samsung

2. 核心架构深度解析

2.1 分层缓存架构

LMCache 采用 L1/L2 分层缓存架构,将数据访问热度与存储成本进行权衡:

GPU KV Cache
CUDA kernel 直接操作,9 种 GPU 格式支持
↕ GPUConnector (batched_from_gpu / batched_to_gpu)
L1: CPU Pinned Memory
默认 5GB,TTLLock 保护,LRU/LFU/FIFO/MRU 策略
↕ StoreController (异步复制) / PrefetchController (预取加载)
L2: Local Disk
NVMe/SSD,按 GPU 分片避免争用
↕ RemoteBackend / L2Adapter
L3: Remote Storage
Redis / S3 / NIXL / Mooncake / CXL / DAX

2.2 核心模块关系

Integration Layer (vllm_v1_adapter, sglang_adapter, tensorrt_adapter)
    │
    ▼
LMCacheManager (lmcache/v1/manager.py)
    │
    ▼
LMCacheEngine (cache_engine.py, 2089 行)  ← 中央协调器
    ├──→ TokenDatabase (token_database.py)      ← 键生成 (前缀哈希)
    ├──→ GPUConnectorInterface (gpu_connector/) ← GPU 数据传输
    ├──→ StorageManager (storage_manager.py)    ← 后端编排
    │       ├── LocalCPUBackend   ← L1 热缓存
    │       ├── LocalDiskBackend  ← L2 磁盘缓存
    │       ├── RemoteBackend     ← L3 远程缓存
    │       ├── P2PBackend        ← P2P 传输
    │       ├── PDBackend         ← 预填充-解码分离
    │       ├── GdsBackend        ← GPU Direct Storage
    │       └── MaruBackend       ← CXL 共享内存
    ├──→ EventManager             ← 异步事件跟踪
    ├──→ PinMonitor               ← 内存 pin 超时管理
    └──→ HealthMonitor            ← 系统健康检查

2.3 数据流全景

Store 路径 (GPU KV → 缓存)

vLLM Adapter → TokenDatabase.process_tokens() → StorageManager.allocate() → GPUConnector.batched_from_gpu() → StorageManager.batched_put()

Retrieve 路径 (缓存 → GPU KV)

vLLM Adapter → TokenDatabase.process_tokens() → StorageManager.batched_get() → GPUConnector.batched_to_gpu() → 返回命中掩码

Lookup 路径 (检查存在性)

vLLM Scheduler → LMCacheEngine.lookup() → batched_contains() → 返回连续前缀长度
逐层流式传输 (Layerwise):store_layer() 和 retrieve_layer() 使用 Python 生成器交错数据传输和存储操作,减少峰值内存使用。对大模型(70B+)的 KV Cache(数十 GB)尤为重要。

3. 缓存策略与驱逐机制

3.1 传统策略对比

策略实现时间复杂度适用场景特点
LRUOrderedDict + move_to_end()O(1)时间局部性强跟踪 chunk 重用时间戳
LFUSortedDict 频率桶O(log N)频率局部性强避免新数据饥饿
FIFOPython dict 插入顺序O(1)无明显局部性最简单实现
MRUOrderedDict + reversed()O(1)特定访问模式与 LRU 相反
IsolatedLRU每租户独立 LRUO(1)多租户环境配额管理

3.2 分布式驱逐策略

分布式 LRU
OrderedDict + 全局 threading.Lock,支持 key_eligible_filter 跳过锁定键
IsolatedLRU
每 cache_salt (每用户/租户) 独立 LRU 列表 + QuotaManager 配额管理
驱逐控制器
后台守护线程监控水位线,L1 每秒检查,L2 统一控制器支持全局和 per-salt 驱逐

3.3 Pin 机制与生命周期管理

驱逐条件:can_evict = (ref_count == 0) AND (pin_count == 0)
双重条件确保:正在被使用的对象不会被驱逐(ref_count 保护),关键数据不会被意外驱逐(pin 保护),超时机制防止永久锁定(PinMonitor)。

4. 分布式与多进程架构

4.1 对象生命周期状态机

None ──reserve_write()──→ write_locked ──finish_write()──→ ready
                                                          │
ready ──reserve_read()──→ read_locked(count=1) ───────────┘
         │                        │
         │                finish_read() → ready (or None if temporary)
         │
         └──reserve_write()──→ write_locked (覆盖写入)

4.2 四个后台控制器

StoreController
监听 L1 写完成事件,按 shape 分组后异步提交到 L2。不阻塞主路径。
PrefetchController
接受预取请求,查找 + 锁定 + 加载三步操作。与 vLLM 调度器集成实现预测性预取。
L1EvictionController
每秒监控 L1 内存使用,超过水位线触发驱逐。
L2EvictionController
统一控制器,支持全局和 per-salt 驱逐。IsolatedLRU 模式下按 quota 驱逐。

4.3 L2 适配器生态系统

适配器用途延迟持久性适用场景
fs本地文件系统低 (μs)是最简单的 L2 实现
respRedis/Valkey中 (ms)可选低延迟远程缓存
s3AWS S3高 (10ms+)是持久化存储,成本低
nixl_storeNIXL 分布式低 (μs)是高性能分布式存储
mooncakeMooncake Store低 (μs)是字节跳动内部存储
daxDAX/CXL极低 (ns)是持久内存,字节寻址
raw_block原生块存储极低 (μs)是Rust 实现,最高性能
plugin自定义插件可变可变用户自定义后端

5. 性能优化技术矩阵

优化类别技术实现位置效果
GPU 传输CUDA kernel 批量 KV 传输csrc/mem_kernels.cuh9 种 GPU 格式支持
异步 memcpycsrc/mem_kernels.cuhIO 与计算重叠
CacheGen GPU 压缩csrc/避免 CPU-GPU 传输
内存管理NUMA 感知分配memory_management.py减少跨 NUMA 延迟
分页分配器memory_management.py减少内存碎片
固定 CPU 内存local_cpu_backend.py避免页面换出
并发控制TTLLock 原子锁csrc/storage_manager/ttl_lock.h崩溃安全,微秒延迟
AffinityThreadPoolmultiprocess/affinity_pool.py消除 GPU 传输锁
事件驱动 IOdistributed/避免忙等待
压缩FP8 量化distributed/serde/fp8.py4x 存储缩减
CacheGen 算术编码csrc/高压缩比
KiVi KV 压缩serde/可插拔压缩
IO 优化逐层流式传输cache_engine.py减少峰值内存
批量操作storage_manager.py减少调用开销
异步 Serdemultiprocess/序列化与主路径分离

TTLLock 性能基准

100K
锁对象
10K+
ops/sec
μs
P50/P95/P99 延迟
300s
默认 TTL

6. 可靠性与容错设计

6.1 TTLLock 机制

C++ 原子锁 + TTL 防止崩溃进程永久锁。std::atomic<int64_t> 计数器使用 memory_order_seq_cst,TTL 机制确保锁持有者崩溃时自动过期。

6.2 健康监控与降级

策略行为适用场景
RECOMPUTE跳过缓存,直接计算缓存不可用时
LOCAL_CPU回退到本地 CPU 缓存L2 不可用时

6.3 可观测性

EventBus
统一 pub/sub 分发器,最大队列 10K,限速丢弃
OpenTelemetry
L1 内存使用、L1 使用率、in-flight L2 存储等指标
Tracing
@enable_tracing() 装饰器实现函数级追踪

7. 扩展性与生态系统

7.1 多推理引擎支持

vLLM V2/V3
VLLMPagedMemGPUConnectorV2/V3,实现 KVConnectorBase_V1 接口
SGLang
SGLangGPUConnector,适配 SGLang 的 KV Cache 格式
TensorRT-LLM
TRTLLMGPUConnector,支持 MLA 和 MHA 变体

7.2 多硬件平台

平台构建标志依赖状态
CUDA 12.9/13默认cupy, nixl稳定
ROCm (HIP)BUILD_WITH_HIP=1ROCm 工具链稳定
Intel XPU (SYCL)BUILD_WITH_SYCL=1Intel oneAPI实验性
平台抽象:pre-commit hook 禁止直接使用 torch.cuda/xpu/hpu,强制使用 torch_dev/torch_device_type,保证代码可移植性。

7.3 插件系统

8. 技术亮点总结

精密的 L1/L2 分层架构
L1 固定 CPU 内存提供最低延迟,L2 多种后端提供可扩展存储。事件驱动 IO 实现非阻塞访问。
C++ TTLLock 防崩溃永久锁
std::atomic + TTL 机制,进程崩溃时自动释放锁。100K 锁对象下 10K+ ops/sec。
Per-Tenant 隔离与配额管理
IsolatedLRU 为每用户/租户维护独立 LRU 列表,QuotaManager 强制配额。
9 种 GPU 格式支持
覆盖 vLLM、SGLang、TRT-LLM 的 MLA 和 MHA 变体,统一缓存层。
AffinityThreadPool 消除 GPU 传输锁
按 affinity_key 路由,同一客户端总是命中同一 worker,消除锁需求。
事件驱动架构
select.poll() + eventfd,避免忙等待。跨平台抽象(Linux eventfd, macOS pipe)。
逐层流式传输
Python 生成器交错数据传输和存储,减少峰值内存使用。
学术与工程双重驱动
4 篇学术论文 + 1826 commits + 21 个 CI 工作流 + OpenSSF 认证。

9. 已知局限与改进空间

技术债务

问题影响改进方向
LFU O(log N)SortedDict 实现,理论上可优化到 O(1)计数器 + 双向链表
单锁争用L1Manager 单一全局锁,高并发瓶颈分段锁或无锁数据结构
LRU Chunk Hash 限制超过 12.5M 条目时清空时间戳字典改进哈希表实现
Python GILAsyncSerdeProcessor 受 GIL 限制GPU 加速原生异步 serde
懒分配器禁用LazyMixedMemoryAllocator 暂不可用修复稳定性问题

改进机会

  1. 热路径无锁数据结构
  2. 基于访问模式的自适应驱逐水位线
  3. 跨层一致性协议
  4. ML 驱动的预测性预取策略
  5. GPU 加速的原生异步 serde

10. 未来演进方向

架构演进

更细粒度的并发控制
从单锁演进为分段锁或无锁数据结构,支持更高并发
跨层一致性增强
引入写入确认机制、版本向量、因果一致性保证
多级缓存融合
统一缓存视图、自动热度迁移、跨层级预取优化

功能演进

ML 驱动的缓存策略
基于历史访问的预取、自适应驱逐策略、个性化配置
更多压缩算法
混合精度压缩、基于注意力模式的压缩、稀疏 KV Cache 支持
多模态缓存扩展
图像/音频特征缓存、跨模态关联缓存

项目演进时间线

2024-05-29
项目初始化
Tensormesh 发起,创建缓存层
2024-06-10
CacheGen 编码器实现
KV 缓存压缩,后发表于 SIGCOMM 2024
2024-09-03
v0.1.0-alpha 发布
首个公开版本
2025-04-22
v0.4.0: LMCache Controller V2
控制器架构重大升级
2025-05-28
v0.4.5: Weka Storage Backend
新增 Weka 存储后端
2026-05-14
最新: NIXL, SYCL/XPU, DeepSeek V4
多硬件平台支持、最新模型适配

11. 配置参数详解

LMCache 提供 80+ 配置参数,通过 YAML 文件、环境变量(LMCACHE_ 前缀)或命令行覆盖三种方式配置。配置源优先级:YAML 文件 > 环境变量 > 命令行覆盖。

11.1 配置文件示例

# lmcache_config.yaml
chunk_size: 256          # Token 分块大小
local_cpu: true          # 启用 L1 CPU 缓存
max_local_cpu_size: 5.0  # L1 最大内存 (GB)
local_disk: "/mnt/nvme/lmcache"  # L2 本地磁盘路径
max_local_disk_size: 100  # L2 最大磁盘 (GB)
remote_url: "redis://localhost:6379"  # L3 远程存储
cache_policy: "LRU"      # 缓存策略 (LRU/LFU/FIFO/MRU)
use_layerwise: true      # 逐层流式传输
enable_p2p: true         # P2P 缓存共享
enable_pd: true          # 分离式预填充

11.2 核心配置参数

参数类型默认值说明
chunk_sizeint256Token 分块大小,影响缓存粒度和前缀匹配效率
local_cpubooltrue是否启用 L1 CPU 缓存
max_local_cpu_sizefloat5.0L1 CPU 缓存最大内存 (GB)
local_diskstrnullL2 本地磁盘路径,如 "/mnt/nvme/lmcache"
max_local_disk_sizefloat0L2 本地磁盘最大容量 (GB)
remote_urlstrnull远程存储 URL,如 "redis://host:port"
remote_serdestr"naive"远程序列化方式 (naive/fp8/cachegen)
cache_policystr"LRU"缓存策略: LRU, LFU, FIFO, MRU
use_layerwiseboolfalse逐层流式传输,减少峰值内存
save_decode_cacheboolfalse是否缓存 decode 阶段的 KV
enable_blendingboolfalse启用混合检索模式
enable_p2pboolfalse启用 P2P 缓存共享
enable_pdboolfalse启用分离式预填充 (Prefill-Decode)
pd_rolestrnullPD 角色: "prefill" 或 "decode"
enable_controllerboolfalse启用 LMCache Controller
numa_modestrnullNUMA 感知模式
lookup_timeout_msint3000查找超时 (毫秒)
min_retrieve_tokensint0最小检索 token 数,低于此值跳过检索
extra_configdictnull扩展配置(用于 Mooncake 等插件)

11.3 在 vLLM 中使用 LMCache

方式一:环境变量配置

# 设置配置文件路径
export LMCACHE_CONFIG_FILE="/path/to/lmcache_config.yaml"

# 或通过环境变量覆盖
export LMCACHE_CHUNK_SIZE=512
export LMCACHE_MAX_LOCAL_CPU_SIZE=10.0
export LMCACHE_REMOTE_URL="redis://localhost:6379"

# 启动 vLLM
vllm serve meta-llama/Llama-3.1-8B-Instruct

方式二:vLLM 集成配置

# vLLM 启动时自动加载 LMCache
# LMCache 通过 KVConnectorBase_V1 接口集成到 vLLM 调度器
# 无需修改 vLLM 代码,只需设置环境变量

# 1. 基础配置 (仅 L1 CPU 缓存)
export LMCACHE_CONFIG_FILE="lmcache_basic.yaml"
# lmcache_basic.yaml:
#   chunk_size: 256
#   local_cpu: true
#   max_local_cpu_size: 5.0

# 2. 带远程存储的配置
export LMCACHE_CONFIG_FILE="lmcache_remote.yaml"
# lmcache_remote.yaml:
#   chunk_size: 256
#   local_cpu: true
#   max_local_cpu_size: 5.0
#   remote_url: "redis://localhost:6379"

# 3. 分离式预填充配置 (Prefill 节点)
export LMCACHE_CONFIG_FILE="lmcache_prefill.yaml"
# lmcache_prefill.yaml:
#   enable_pd: true
#   pd_role: "prefill"
#   pd_peer_host: "decode-node-ip"
#   pd_peer_init_port: [5555]
#   pd_peer_alloc_port: [5556]

# 4. 分离式预填充配置 (Decode 节点)
export LMCACHE_CONFIG_FILE="lmcache_decode.yaml"
# lmcache_decode.yaml:
#   enable_pd: true
#   pd_role: "decode"
#   pd_peer_host: "prefill-node-ip"
#   pd_peer_init_port: [5555]
#   pd_peer_alloc_port: [5556]

方式三:分离式预填充完整示例

# 终端 1: 启动 Prefill 节点
CUDA_VISIBLE_DEVICES=0 vllm serve meta-llama/Llama-3.1-8B-Instruct \
  --port 8100 \
  --kv-transfer-config '{"kv_connector":"LMCacheConnectorV1","kv_role":"kv_producer"}'

# 终端 2: 启动 Decode 节点
CUDA_VISIBLE_DEVICES=1 vllm serve meta-llama/Llama-3.1-8B-Instruct \
  --port 8200 \
  --kv-transfer-config '{"kv_connector":"LMCacheConnectorV1","kv_role":"kv_consumer"}'

# 终端 3: 启动代理服务器
python disagg_proxy_server.py --host 0.0.0.0 --port 9000
vLLM 集成原理:LMCache 实现 vLLM 的 KVConnectorBase_V1 接口,通过 get_num_new_matched_tokens() 告知调度器缓存命中数,start_load_kv() 启动异步检索,save_kv_layer() 逐层卸载 KV Cache。整个过程对 vLLM 透明,无需修改推理引擎代码。

12. LMCache 与 Mooncake 的关系

12.1 项目定位对比

LMCache 和 Mooncake 是 LLM 推理缓存领域的两个重要项目,定位互补而非竞争:

维度LMCacheMooncake
发起方Tensormesh (UChicago 团队)Moonshot AI (Kimi)
核心定位推理引擎缓存扩展层KVCache-centric 分离式推理平台
架构重心多层缓存管理 (L1/L2/L3)分布式传输引擎 + 全局调度
核心组件CacheEngine + StorageManagerTransfer Engine + Mooncake Store + Conductor
传输层CUDA kernel + eventfdTransfer Engine (14+ 协议, RDMA/TCP/CXL)
学术论文CacheGen (SIGCOMM), CacheBlend (EuroSys)Mooncake (FAST 2025 Best Paper)
生产规模Google Cloud, CoreWeave 等Kimi 日处理 100B+ token, 数千节点

12.2 集成方式

LMCache 通过 MooncakeStoreConnector 将 Mooncake Store 作为远程存储后端集成。这意味着:

12.3 集成架构

vLLM / SGLang / TRT-LLM
    │
    ▼
LMCache (缓存管理层)
    ├── L1: LocalCPUBackend (进程内 CPU 缓存)
    ├── L2: LocalDiskBackend (本地磁盘)
    └── L3: RemoteBackend
            ├── Redis / Valkey
            ├── AWS S3
            ├── NIXL Store
            └── Mooncake Store ← 通过 MooncakeStoreConnector
                    │
                    ▼
            Mooncake Transfer Engine (RDMA/TCP/CXL 传输)
                    │
                    ▼
            分布式 KVCache 池 (多节点 DRAM/SSD)

12.4 MooncakeStoreConnector 实现细节

LMCache 的 mooncakestore_connector.py 实现了与 Mooncake Store 的集成:

零拷贝传输
通过 put_from()/batch_get_into() 直接操作内存指针,避免数据拷贝。CPU buffer 注册到 Mooncake 实现 RDMA 零拷贝。
NUMA 感知
检测 GPU-NUMA 映射,调用 bind_to_numa_node() 绑定到正确 NUMA 节点,减少跨 NUMA 访问延迟。
批量操作
支持 batched_get() 和 batched_put(),单次 RPC 传输多个 chunk,减少网络往返。
多副本配置
通过 ReplicateConfig 配置副本数量和首选 segment,支持 prefer_local_alloc 优先本地分配。

12.5 配置 LMCache 使用 Mooncake

# lmcache_config.yaml
chunk_size: 256
local_cpu: true
max_local_cpu_size: 5.0

# 方式一: 通过 MOONCAKE_CONFIG_PATH 环境变量
# export MOONCAKE_CONFIG_PATH="/path/to/mooncake_config.json"

# 方式二: 通过 extra_config 直接配置
extra_config:
  # Mooncake setup 参数 (mooncake_ 前缀会自动去除)
  mooncake_local_hostname: "node-1"
  mooncake_metadata_server: "etcd://localhost:2379"
  mooncake_global_segment_size: "3355443200"  # 3.2GB
  mooncake_local_buffer_size: "1073741824"    # 1GB
  mooncake_protocol: "rdma"                   # 或 "tcp"
  mooncake_device_name: "mlx5_0"
  # LMCache 专用参数
  transfer_timeout: 5
  prefer_local_alloc: true

12.6 Mooncake 的独特优势

相比其他远程后端(Redis、S3),Mooncake 提供了独特的优势:

12.7 在 SGLang 中的三级缓存

SGLang 的 HiCache 实现了与 Mooncake 深度集成的三级缓存架构:

L1: GPU HBM     ← 最快,容量最小 (显存)
L2: Host DRAM   ← 中速,容量中等 (LMCache L1)
L3: Mooncake Store ← 分布式,容量最大 (LMCache L3)

实测效果:6x 吞吐提升、80% TTFT 降低。蚂蚁集团 DeepSeek-R1-671B 部署中,缓存命中 TTFT 降低 84%。

13. vLLM 中的 KV Connector 对比

13.1 Connector 全景

vLLM 通过 KVConnectorBase_V1 接口抽象 KV Cache 传输。当前注册了以下 connector(见 factory.py):

Connector来源传输方式适用场景
LMCacheConnectorV1lmcache 包CUDA kernel + eventfd单实例多级缓存 (L1/L2/L3)
LMCacheMPConnectorlmcache 包ZMQ + 共享内存多实例共享 LMCache 缓存池
MooncakeConnectorvLLM 内置Transfer Engine (RDMA/TCP)P2P 分离式 Prefill/Decode
MooncakeStoreConnectorvLLM 内置MooncakeDistributedStore共享 KVCache 池 + 前缀去重
NixlConnectorvLLM 内置NIXL (UCX/RDMA)高性能 P2P 传输
MultiConnectorvLLM 内置组合多个 connector多层级/多后端策略
FlexKVConnectorV1vLLM 内置FlexKV灵活 KV 管理

13.2 LMCache 系列 Connector 详解

LMCacheConnectorV1 — 单进程模式

这是 LMCache 的标准 connector,适用于单个 vLLM 实例配合 LMCache 使用的场景。

工作原理
内部委托给 LMCacheConnectorV1Impl,通过 LMCache 的 CacheEngine 管理多级缓存。支持 use_layerwise 模式逐层异步传输 KV Cache。
缓存层级
L1 (CPU pinned memory, 默认 5GB) → L2 (本地磁盘) → L3 (远程: Redis/S3/NIXL/Mooncake Store)。自动管理数据在层级间的流动。
前缀缓存
基于 TokenDatabase 的前缀哈希匹配,支持 chunk 级别的缓存命中。与 vLLM 的 APC (Automatic Prefix Caching) 协同工作。
CUDA Graph
启用 use_layerwise 时需要 PIECEWISE CUDA Graph 模式,因为逐层异步同步无法被完整 CUDA Graph 捕获。

LMCacheMPConnector — 多进程模式

多进程版本的 LMCache connector,适用于多个 vLLM 实例共享同一个 LMCache 缓存池的场景。

架构差异
LMCache 引擎运行在独立进程中,通过 ZMQ 消息队列与 vLLM 的 Scheduler 和 Worker 通信。支持多个 vLLM 实例连接同一个 LMCache 服务器。
状态机
请求经历 PREFETCHING → WAITING_FOR_LOAD → READY 三个状态。Lookup 和 Retrieve 分离,支持异步加载与计算重叠。
MLA 支持
对 DeepSeek MLA 模型做特殊处理:排除 TP 对 KV Cache 的影响(MLA 中 TP 不改变 KV Cache),只在 PP group 的第一个 rank 保存。
APC 协同
精确处理 vLLM APC 命中和 LMCache 命中的边界对齐,避免跨流数据竞争。使用 skip_first_n_tokens 跳过 APC 共享块。

13.3 Mooncake 系列 Connector 详解

MooncakeConnector — P2P 直传模式

用于 Disaggregated Prefill/Decode 场景,Prefill 实例直接将 KV Cache 推送到 Decode 实例。

传输机制
使用 Mooncake Transfer Engine 的 batch_transfer_sync_write(),Prefill 端主动推送到 Decode 端。支持 RDMA 和 TCP 协议。
异构 TP
支持 Prefill 和 Decode 使用不同的 TP size。自动计算 TP ratio,处理 replicated cache 和分片映射。
协调机制
Bootstrap Server 负责 worker 注册和发现。ZMQ DEALER/ROUTER 模式处理异步传输请求。支持超时和中止。
KV Cache 布局
强制设置 KV Cache 布局为 HND(非 MLA 模型),确保异构 TP 传输安全。MLA 模型不改变布局。

MooncakeStoreConnector — 共享存储池模式

使用 MooncakeDistributedStore 作为共享 KV Cache 池,支持前缀缓存去重。

与 MooncakeConnector 的区别
MooncakeConnector 是 P2P 直传(Push 模式),MooncakeStoreConnector 是共享存储池(Read/Write 模式)。后者支持基于哈希的前缀去重。
KV 事件
实现 KVConnectorKVEvents 接口,上报 BlockStored 事件,支持与 vLLM 的前缀缓存系统集成。
跨层块
通过 enable_cross_layers_blocks 配置支持跨层 KV 块,优化内存使用。
LMCache 集成
当 LMCache 使用 Mooncake Store 作为 L3 后端时,底层通过 MooncakeStoreConnector(LMCache 内部的)与 Mooncake Store 交互。

13.4 如何选择 Connector

根据部署场景选择合适的 connector:

场景推荐 Connector说明
单实例 + 多级缓存 LMCacheConnectorV1 单个 vLLM 实例,利用 CPU/磁盘/远程多级缓存减少重复计算。适合大多数场景。
多实例共享缓存 LMCacheMPConnector 多个 vLLM 实例共享 LMCache 缓存池。需要启动独立的 LMCache 服务器进程。
P/D 分离 (简单) MooncakeConnector Prefill 实例直接推送到 Decode 实例。需要 Mooncake Transfer Engine。适合小规模 P/D 分离。
P/D 分离 + 前缀去重 MooncakeStoreConnector 使用 Mooncake Store 共享池,支持跨请求前缀去重。需要 Mooncake Store 集群。
多层级组合 MultiConnector 组合多个 connector,如本地缓存 + 远程传输。适合复杂部署拓扑。

13.5 能否组合使用?

可以,通过 MultiConnector 实现。MultiConnector 将多个 connector 串联,按优先级依次尝试:

选择建议:如果你需要多级缓存(CPU → 磁盘 → 远程)和前缀缓存管理,选 LMCache 系列。如果你需要 P/D 分离且已有 Mooncake 基础设施,选 Mooncake 系列。两者可以共存于同一部署中(通过 MultiConnector),但通常选择一个即可满足需求。

13.6 使用前提与安装

LMCache Connector 前提

# 安装 LMCache
pip install lmcache

# 或从源码安装
git clone https://github.com/LMCache/LMCache.git
cd LMCache && pip install -e .

# vLLM 配置 (环境变量方式)
export LMCACHE_CONFIG_FILE="/path/to/lmcache_config.yaml"

# vLLM 启动示例 (LMCacheConnectorV1)
vllm serve meta-llama/Llama-3-8B \
  --kv-transfer-config '{"kv_connector":"LMCacheConnectorV1","kv_role":"kv_both"}'

# vLLM 启动示例 (LMCacheMPConnector)
# 需要先启动 LMCache 服务器
python -m lmcache.server --port 5555
vllm serve meta-llama/Llama-3-8B \
  --kv-transfer-config '{"kv_connector":"LMCacheMPConnector","kv_role":"kv_both","kv_connector_extra_config":{"lmcache.mp.port":5555}}'

Mooncake Connector 前提

# 安装 Mooncake Transfer Engine
# 参考: https://github.com/kvcache-ai/Mooncake/blob/main/doc/en/build.md
pip install mooncake  # 或从源码编译

# vLLM 启动示例 (MooncakeConnector - P/D 分离)
# Prefill 实例
vllm serve meta-llama/Llama-3-8B \
  --kv-transfer-config '{"kv_connector":"MooncakeConnector","kv_role":"kv_producer"}'

# Decode 实例
vllm serve meta-llama/Llama-3-8B \
  --kv-transfer-config '{"kv_connector":"MooncakeConnector","kv_role":"kv_consumer"}'

# vLLM 启动示例 (MooncakeStoreConnector - 共享存储池)
vllm serve meta-llama/Llama-3-8B \
  --kv-transfer-config '{"kv_connector":"MooncakeStoreConnector","kv_role":"kv_both"}'

依赖对比

ConnectorPython 包外部服务硬件要求
LMCacheConnectorV1lmcache无(可选 Redis/S3)无特殊要求
LMCacheMPConnectorlmcacheLMCache 服务器进程无特殊要求
MooncakeConnectormooncakeBootstrap Server (内置)推荐 RDMA 网络
MooncakeStoreConnectormooncakeMooncake Store 集群 + etcd推荐 RDMA 网络

13.7 关键澄清:两层 Mooncake,三条独立路径

一个容易引起困惑的问题:vLLM 有 MooncakeStoreConnector,LMCache 也有自己的 MooncakestoreConnector(注意大小写差异),它们冲突吗?答案是不冲突——它们是不同层的东西,走的是完全独立的路径。

两个同名 Connector 的区别

维度vLLM 的 MooncakeStoreConnectorLMCache 的 MooncakestoreConnector
代码位置vllm/.../mooncake/store/connector.pylmcache/.../connector/mooncakestore_connector.py
层级vLLM KV Connector 层(推理引擎层)LMCache StorageBackend 层(缓存管理层)
角色vLLM 直接与 Mooncake Store 交互LMCache 的 L3 远程后端适配器
是否经过 LMCache否,绕过 LMCache是,LMCache 内部组件
类名MooncakeStoreConnectorMooncakestoreConnector

三条独立的 Mooncake 使用路径

路径 A: vLLM ──LMCacheConnectorV1──→ LMCache ──MooncakestoreConnector──→ Mooncake Store
                                    (多级缓存管理)      (L3 远程后端)

路径 B: vLLM ──MooncakeStoreConnector────────────────────────→ Mooncake Store
                                    (直接访问,无 LMCache)

路径 C: vLLM ──MooncakeConnector────────────────────────────→ 另一个 vLLM 实例
                                    (P2P 直传,无 Store)
路径 A: LMCache + Mooncake 后端
vLLM 通过 LMCacheConnectorV1 使用 LMCache。LMCache 管理多级缓存(L1 CPU → L2 磁盘 → L3 远程),其中 L3 选择 Mooncake Store 作为远程后端。LMCache 负责缓存策略(LRU/LFU)、chunk 管理、前缀哈希匹配等。Mooncake Store 只是 LMCache 的一个存储后端选项(与 Redis、S3 并列)。
路径 B: 直接使用 Mooncake Store
vLLM 通过 MooncakeStoreConnector 直接与 Mooncake Store 交互,完全绕过 LMCache。适合已有 Mooncake Store 集群、不需要 LMCache 多级缓存管理的场景。功能较简单,没有 L1/L2 缓存层、没有 LRU 淘汰策略。
路径 C: P2P 直传
vLLM 通过 MooncakeConnector 在 Prefill 和 Decode 实例之间直接传输 KV Cache。不经过任何存储层,Prefill 端 Push 到 Decode 端。适合简单的 P/D 分离场景。

选择哪条路径?

需求推荐路径vLLM connector
多级缓存 + Mooncake 远程存储 路径 A LMCacheConnectorV1(LMCache 内部配 Mooncake 后端)
已有 Mooncake Store,不需要 LMCache 路径 B MooncakeStoreConnector
P/D 分离,简单直传 路径 C MooncakeConnector
多实例共享缓存 + Mooncake 路径 A (MP 模式) LMCacheMPConnector(LMCache 内部配 Mooncake 后端)
核心结论:vLLM 选择哪个 connector 决定了走哪条路径,它们互斥但不冲突——你只能选一个 connector,但选了之后 Mooncake 在不同层的角色是清晰分离的。路径 A 中 Mooncake 是 LMCache 的"下属存储",路径 B 中 Mooncake 直接面对 vLLM,路径 C 中 Mooncake 只负责传输。