论文笔记 open-source production system 2024
02. LMCache — 跨实例 / 跨层级 KV 复用池
University of Chicago 开源 production system + 配套多篇论文(CacheGen 是其压缩组件)
02. LMCache — 跨实例 / 跨层级 KV 复用池
元数据
- 项目:LMCache(University of Chicago + production deployments)
- 类型:开源 production system + 多篇配套论文(CacheGen 是其压缩组件)
- GitHub:LMCache/LMCache(活跃维护)
- 关键词:cross-engine KV reuse、prefix cache pool、CPU/SSD offload
一句话精髓
把 KV cache 从”单引擎单实例”的私有内存,变成”集群共享、跨层级、可复用”的资源池——任何一台机器算过的 KV,其它机器复用。
解决的问题
vLLM / TGI 的 prefix cache 只在单实例 HBM生效。生产场景下:
- 同一个 system prompt(数千 token)被几十个推理实例反复算 prefill
- RAG 文档块在多查询里重复出现,每次都重算
- 同一用户被 LB 切到不同实例,KV 全丢
LMCache 把 KV 抽象成”块”,跨实例、跨层级共享。
关键 idea
| 设计 | 内容 |
|---|---|
| KV 块寻址 | 用 token hash(或语义 hash)作为 key,块大小可调 |
| 多级后端 | HBM(本卡) → DRAM(本机) → 远端(网络) → SSD |
| CacheGen 压缩 | KV 张量的可调压缩,跨网络/SSD 时做编码,加载时解码(见笔记 04) |
| 引擎适配 | 通过 hook 接进 vLLM / SGLang / TGI,对模型代码近乎透明 |
| 冲突处理 | 不同模型/不同 tokenizer 用 namespace 区分,避免错误复用 |
关键架构图
┌──────────┐ ┌──────────┐ ┌──────────┐
│ vLLM #1 │ │ vLLM #2 │ │ vLLM #3 │
└─────┬────┘ └─────┬────┘ └─────┬────┘
│ │ │
┌─────▼─────────────▼─────────────▼─────┐
│ LMCache Connector │
└─────┬─────────────┬─────────────┬─────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Local │ │ Remote │ │ SSD │
│ DRAM │ │ KV pool │ │ (cold) │
└──────────┘ └──────────┘ └──────────┘
│
└── 命中即直接拷回 HBM,跳过 prefill
关键数据(公开 benchmark)
- 长 system prompt + RAG 场景下,首 token 延迟降低 3-10×
- 同一份 RAG 文档跨多查询的 KV 复用命中率经常 > 80%
- 跨实例池化让小集群在并发突增时避免 prefill 雪崩
局限
- 主要针对 prefix 类的可复用 KV,对话历史 / agent 长记忆复用率没那么高
- 跨实例传输需要 RDMA 或快网,普通以太网下 P99 抖动大
- 块粒度对 KV 压缩 / 命中率是个 trade-off,没有自动调参
对本项目的启示
🌟 第一模块”统一抽象”的现成原型——LMCache 已经把 KV 抽象成”块 + key + 多后端”。我们要做的增量:
- 把”块”扩展到多类型:KV 块 + 向量索引片段 + 多模态对象,共用一套 key/backend 抽象
- 语义级 key:不只是 token hash,加入 embedding 相似度去重(可能命中”相似 prefix”)
- 跨层级一致性:LMCache 没解决”远端缓存被更新本地怎么知道”——长记忆 Agent 必须考虑这个
- token 成本反馈调度:把”块该放哪一级”写成在线优化,而不是固定 LRU
横向对比
| 维度 | vLLM 内置 prefix cache | LMCache | 本项目目标 |
|---|---|---|---|
| 跨实例 | ❌ | ✅ | ✅ |
| 跨层级 | 仅 HBM | HBM/DRAM/Remote/SSD | + GPU Direct Storage |
| 数据类型 | 仅 KV | 仅 KV | KV + 向量 + 多模态 |
| 调度 | LRU | LRU + cost-aware(部分) | 模型驱动 + 成本最优 |
待补
- 读 LMCache 最新 paper(2024/2025 多篇),看它内部的 cost model 长什么样
- 跑一次实测:RAG 场景下接 / 不接 LMCache 的 token 单位成本对比