1. 项目概述与市场定位
LMCache 是一个面向 LLM 推理场景的 KV Cache 加速框架,通过在 GPU/CPU/磁盘/远程存储各层缓存 KV Cache 来降低首 token 延迟 (TTFT) 并提升吞吐量。它不是一个独立的推理引擎,而是作为 vLLM、SGLang、TensorRT-LLM 等推理引擎的扩展层存在,专注于解决长上下文场景下 KV Cache 重复计算的性能瓶颈。
市场定位
LMCache 定位于 LLM 推理基础设施层,填补了推理引擎与存储系统之间的空白。其核心价值主张体现在三个维度:
- 延迟优化:与 vLLM 结合可实现 3-10 倍延迟节省,对交互式对话、RAG、多轮 QA 等场景至关重要
- 成本降低:通过复用已计算的 KV Cache 减少 GPU 计算周期,直接降低推理成本
- 多租户隔离:IsolatedLRU + QuotaManager 实现 per-tenant 配额管理,满足生产环境多用户共享需求
采用情况
2. 核心架构深度解析
2.1 分层缓存架构
LMCache 采用 L1/L2 分层缓存架构,将数据访问热度与存储成本进行权衡:
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 → 缓存)
Retrieve 路径 (缓存 → GPU KV)
Lookup 路径 (检查存在性)
store_layer() 和 retrieve_layer() 使用 Python 生成器交错数据传输和存储操作,减少峰值内存使用。对大模型(70B+)的 KV Cache(数十 GB)尤为重要。
3. 缓存策略与驱逐机制
3.1 传统策略对比
| 策略 | 实现 | 时间复杂度 | 适用场景 | 特点 |
|---|---|---|---|---|
| LRU | OrderedDict + move_to_end() | O(1) | 时间局部性强 | 跟踪 chunk 重用时间戳 |
| LFU | SortedDict 频率桶 | O(log N) | 频率局部性强 | 避免新数据饥饿 |
| FIFO | Python dict 插入顺序 | O(1) | 无明显局部性 | 最简单实现 |
| MRU | OrderedDict + reversed() | O(1) | 特定访问模式 | 与 LRU 相反 |
| IsolatedLRU | 每租户独立 LRU | O(1) | 多租户环境 | 配额管理 |
3.2 分布式驱逐策略
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 四个后台控制器
4.3 L2 适配器生态系统
| 适配器 | 用途 | 延迟 | 持久性 | 适用场景 |
|---|---|---|---|---|
| fs | 本地文件系统 | 低 (μs) | 是 | 最简单的 L2 实现 |
| resp | Redis/Valkey | 中 (ms) | 可选 | 低延迟远程缓存 |
| s3 | AWS S3 | 高 (10ms+) | 是 | 持久化存储,成本低 |
| nixl_store | NIXL 分布式 | 低 (μs) | 是 | 高性能分布式存储 |
| mooncake | Mooncake Store | 低 (μs) | 是 | 字节跳动内部存储 |
| dax | DAX/CXL | 极低 (ns) | 是 | 持久内存,字节寻址 |
| raw_block | 原生块存储 | 极低 (μs) | 是 | Rust 实现,最高性能 |
| plugin | 自定义插件 | 可变 | 可变 | 用户自定义后端 |
5. 性能优化技术矩阵
| 优化类别 | 技术 | 实现位置 | 效果 |
|---|---|---|---|
| GPU 传输 | CUDA kernel 批量 KV 传输 | csrc/mem_kernels.cuh | 9 种 GPU 格式支持 |
| 异步 memcpy | csrc/mem_kernels.cuh | IO 与计算重叠 | |
| 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 | 崩溃安全,微秒延迟 |
| AffinityThreadPool | multiprocess/affinity_pool.py | 消除 GPU 传输锁 | |
| 事件驱动 IO | distributed/ | 避免忙等待 | |
| 压缩 | FP8 量化 | distributed/serde/fp8.py | 4x 存储缩减 |
| CacheGen 算术编码 | csrc/ | 高压缩比 | |
| KiVi KV 压缩 | serde/ | 可插拔压缩 | |
| IO 优化 | 逐层流式传输 | cache_engine.py | 减少峰值内存 |
| 批量操作 | storage_manager.py | 减少调用开销 | |
| 异步 Serde | multiprocess/ | 序列化与主路径分离 |
TTLLock 性能基准
6. 可靠性与容错设计
6.1 TTLLock 机制
C++ 原子锁 + TTL 防止崩溃进程永久锁。std::atomic<int64_t> 计数器使用 memory_order_seq_cst,TTL 机制确保锁持有者崩溃时自动过期。
6.2 健康监控与降级
| 策略 | 行为 | 适用场景 |
|---|---|---|
| RECOMPUTE | 跳过缓存,直接计算 | 缓存不可用时 |
| LOCAL_CPU | 回退到本地 CPU 缓存 | L2 不可用时 |
6.3 可观测性
7. 扩展性与生态系统
7.1 多推理引擎支持
7.2 多硬件平台
| 平台 | 构建标志 | 依赖 | 状态 |
|---|---|---|---|
| CUDA 12.9/13 | 默认 | cupy, nixl | 稳定 |
| ROCm (HIP) | BUILD_WITH_HIP=1 | ROCm 工具链 | 稳定 |
| Intel XPU (SYCL) | BUILD_WITH_SYCL=1 | Intel oneAPI | 实验性 |
torch.cuda/xpu/hpu,强制使用 torch_dev/torch_device_type,保证代码可移植性。
7.3 插件系统
- 运行时插件启动器:启动 .py 和 .sh 插件作为子进程,atexit 清理
- 存储后端插件:StoragePluginInterface 通过配置加载,支持热插拔
- L2 适配器工厂:注册式懒加载,添加新后端只需实现接口并注册
- Serde 工厂:register_serde_factory() 支持自定义压缩算法
8. 技术亮点总结
9. 已知局限与改进空间
技术债务
| 问题 | 影响 | 改进方向 |
|---|---|---|
| LFU O(log N) | SortedDict 实现,理论上可优化到 O(1) | 计数器 + 双向链表 |
| 单锁争用 | L1Manager 单一全局锁,高并发瓶颈 | 分段锁或无锁数据结构 |
| LRU Chunk Hash 限制 | 超过 12.5M 条目时清空时间戳字典 | 改进哈希表实现 |
| Python GIL | AsyncSerdeProcessor 受 GIL 限制 | GPU 加速原生异步 serde |
| 懒分配器禁用 | LazyMixedMemoryAllocator 暂不可用 | 修复稳定性问题 |
改进机会
- 热路径无锁数据结构
- 基于访问模式的自适应驱逐水位线
- 跨层一致性协议
- ML 驱动的预测性预取策略
- GPU 加速的原生异步 serde
10. 未来演进方向
架构演进
功能演进
项目演进时间线
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_size | int | 256 | Token 分块大小,影响缓存粒度和前缀匹配效率 |
local_cpu | bool | true | 是否启用 L1 CPU 缓存 |
max_local_cpu_size | float | 5.0 | L1 CPU 缓存最大内存 (GB) |
local_disk | str | null | L2 本地磁盘路径,如 "/mnt/nvme/lmcache" |
max_local_disk_size | float | 0 | L2 本地磁盘最大容量 (GB) |
remote_url | str | null | 远程存储 URL,如 "redis://host:port" |
remote_serde | str | "naive" | 远程序列化方式 (naive/fp8/cachegen) |
cache_policy | str | "LRU" | 缓存策略: LRU, LFU, FIFO, MRU |
use_layerwise | bool | false | 逐层流式传输,减少峰值内存 |
save_decode_cache | bool | false | 是否缓存 decode 阶段的 KV |
enable_blending | bool | false | 启用混合检索模式 |
enable_p2p | bool | false | 启用 P2P 缓存共享 |
enable_pd | bool | false | 启用分离式预填充 (Prefill-Decode) |
pd_role | str | null | PD 角色: "prefill" 或 "decode" |
enable_controller | bool | false | 启用 LMCache Controller |
numa_mode | str | null | NUMA 感知模式 |
lookup_timeout_ms | int | 3000 | 查找超时 (毫秒) |
min_retrieve_tokens | int | 0 | 最小检索 token 数,低于此值跳过检索 |
extra_config | dict | null | 扩展配置(用于 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
KVConnectorBase_V1 接口,通过 get_num_new_matched_tokens() 告知调度器缓存命中数,start_load_kv() 启动异步检索,save_kv_layer() 逐层卸载 KV Cache。整个过程对 vLLM 透明,无需修改推理引擎代码。
12. LMCache 与 Mooncake 的关系
12.1 项目定位对比
LMCache 和 Mooncake 是 LLM 推理缓存领域的两个重要项目,定位互补而非竞争:
| 维度 | LMCache | Mooncake |
|---|---|---|
| 发起方 | Tensormesh (UChicago 团队) | Moonshot AI (Kimi) |
| 核心定位 | 推理引擎缓存扩展层 | KVCache-centric 分离式推理平台 |
| 架构重心 | 多层缓存管理 (L1/L2/L3) | 分布式传输引擎 + 全局调度 |
| 核心组件 | CacheEngine + StorageManager | Transfer Engine + Mooncake Store + Conductor |
| 传输层 | CUDA kernel + eventfd | Transfer 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 作为远程存储后端集成。这意味着:
- Mooncake Store 是 LMCache 的 L3 后端之一:与 Redis、S3、NIXL 并列,作为可选的远程存储
- LMCache 利用 Mooncake 的分布式 KVCache 池:通过 Mooncake 的 RDMA 传输能力实现高性能远程缓存访问
- 两者共享 KV Cache 概念:都使用分块 + 哈希键的方式管理 KV Cache
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 零拷贝。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 提供了独特的优势:
- RDMA 零拷贝:通过 GPUDirect RDMA 实现 GPU-远程内存直接传输,TCP 810ms vs RDMA 14ms(58x 加速)
- 拓扑感知:自动发现 NUMA 拓扑,选择最近的 HCA 设备,避免跨 NUMA 传输
- 多 NIC 聚合:8x400Gbps RoCE 网络上实现 190 GB/s 聚合带宽
- 分布式 KVCache 池:将集群中闲置的 CPU/DRAM/SSD 整合为统一存储池
- Cache-aware 调度:全局前缀树 + 重叠评分,将请求路由到具有最长前缀缓存的节点
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 | 来源 | 传输方式 | 适用场景 |
|---|---|---|---|
LMCacheConnectorV1 | lmcache 包 | CUDA kernel + eventfd | 单实例多级缓存 (L1/L2/L3) |
LMCacheMPConnector | lmcache 包 | ZMQ + 共享内存 | 多实例共享 LMCache 缓存池 |
MooncakeConnector | vLLM 内置 | Transfer Engine (RDMA/TCP) | P2P 分离式 Prefill/Decode |
MooncakeStoreConnector | vLLM 内置 | MooncakeDistributedStore | 共享 KVCache 池 + 前缀去重 |
NixlConnector | vLLM 内置 | NIXL (UCX/RDMA) | 高性能 P2P 传输 |
MultiConnector | vLLM 内置 | 组合多个 connector | 多层级/多后端策略 |
FlexKVConnectorV1 | vLLM 内置 | FlexKV | 灵活 KV 管理 |
13.2 LMCache 系列 Connector 详解
LMCacheConnectorV1 — 单进程模式
这是 LMCache 的标准 connector,适用于单个 vLLM 实例配合 LMCache 使用的场景。
LMCacheConnectorV1Impl,通过 LMCache 的 CacheEngine 管理多级缓存。支持 use_layerwise 模式逐层异步传输 KV Cache。use_layerwise 时需要 PIECEWISE CUDA Graph 模式,因为逐层异步同步无法被完整 CUDA Graph 捕获。LMCacheMPConnector — 多进程模式
多进程版本的 LMCache connector,适用于多个 vLLM 实例共享同一个 LMCache 缓存池的场景。
skip_first_n_tokens 跳过 APC 共享块。13.3 Mooncake 系列 Connector 详解
MooncakeConnector — P2P 直传模式
用于 Disaggregated Prefill/Decode 场景,Prefill 实例直接将 KV Cache 推送到 Decode 实例。
batch_transfer_sync_write(),Prefill 端主动推送到 Decode 端。支持 RDMA 和 TCP 协议。MooncakeStoreConnector — 共享存储池模式
使用 MooncakeDistributedStore 作为共享 KV Cache 池,支持前缀缓存去重。
KVConnectorKVEvents 接口,上报 BlockStored 事件,支持与 vLLM 的前缀缓存系统集成。enable_cross_layers_blocks 配置支持跨层 KV 块,优化内存使用。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 串联,按优先级依次尝试:
- LMCache + Mooncake Store:LMCacheConnectorV1 使用 Mooncake Store 作为 L3 后端(通过 LMCache 的
remote_url配置)。这不是 MultiConnector,而是 LMCache 内部的后端选择。 - MultiConnector 组合:可以组合 LMCacheConnectorV1 + NixlConnector 等,实现本地缓存 + 高速 P2P 传输。
- MooncakeConnector vs LMCache:两者设计理念不同——MooncakeConnector 是 P2P Push,LMCache 是多级缓存管理。通常选择其一,而非组合。
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"}'
依赖对比
| Connector | Python 包 | 外部服务 | 硬件要求 |
|---|---|---|---|
LMCacheConnectorV1 | lmcache | 无(可选 Redis/S3) | 无特殊要求 |
LMCacheMPConnector | lmcache | LMCache 服务器进程 | 无特殊要求 |
MooncakeConnector | mooncake | Bootstrap Server (内置) | 推荐 RDMA 网络 |
MooncakeStoreConnector | mooncake | Mooncake Store 集群 + etcd | 推荐 RDMA 网络 |
13.7 关键澄清:两层 Mooncake,三条独立路径
一个容易引起困惑的问题:vLLM 有 MooncakeStoreConnector,LMCache 也有自己的 MooncakestoreConnector(注意大小写差异),它们冲突吗?答案是不冲突——它们是不同层的东西,走的是完全独立的路径。
两个同名 Connector 的区别
| 维度 | vLLM 的 MooncakeStoreConnector | LMCache 的 MooncakestoreConnector |
|---|---|---|
| 代码位置 | vllm/.../mooncake/store/connector.py | lmcache/.../connector/mooncakestore_connector.py |
| 层级 | vLLM KV Connector 层(推理引擎层) | LMCache StorageBackend 层(缓存管理层) |
| 角色 | vLLM 直接与 Mooncake Store 交互 | LMCache 的 L3 远程后端适配器 |
| 是否经过 LMCache | 否,绕过 LMCache | 是,LMCache 内部组件 |
| 类名 | MooncakeStoreConnector | MooncakestoreConnector |
三条独立的 Mooncake 使用路径
路径 A: vLLM ──LMCacheConnectorV1──→ LMCache ──MooncakestoreConnector──→ Mooncake Store
(多级缓存管理) (L3 远程后端)
路径 B: vLLM ──MooncakeStoreConnector────────────────────────→ Mooncake Store
(直接访问,无 LMCache)
路径 C: vLLM ──MooncakeConnector────────────────────────────→ 另一个 vLLM 实例
(P2P 直传,无 Store)
LMCacheConnectorV1 使用 LMCache。LMCache 管理多级缓存(L1 CPU → L2 磁盘 → L3 远程),其中 L3 选择 Mooncake Store 作为远程后端。LMCache 负责缓存策略(LRU/LFU)、chunk 管理、前缀哈希匹配等。Mooncake Store 只是 LMCache 的一个存储后端选项(与 Redis、S3 并列)。MooncakeStoreConnector 直接与 Mooncake Store 交互,完全绕过 LMCache。适合已有 Mooncake Store 集群、不需要 LMCache 多级缓存管理的场景。功能较简单,没有 L1/L2 缓存层、没有 LRU 淘汰策略。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 后端) |