跳到主要内容
← 返回研究笔记
论文笔记 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生效。生产场景下:

  1. 同一个 system prompt(数千 token)被几十个推理实例反复算 prefill
  2. RAG 文档块在多查询里重复出现,每次都重算
  3. 同一用户被 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 + 多后端”。我们要做的增量:

  1. 把”块”扩展到多类型:KV 块 + 向量索引片段 + 多模态对象,共用一套 key/backend 抽象
  2. 语义级 key:不只是 token hash,加入 embedding 相似度去重(可能命中”相似 prefix”)
  3. 跨层级一致性:LMCache 没解决”远端缓存被更新本地怎么知道”——长记忆 Agent 必须考虑这个
  4. token 成本反馈调度:把”块该放哪一级”写成在线优化,而不是固定 LRU

横向对比

维度vLLM 内置 prefix cacheLMCache本项目目标
跨实例
跨层级仅 HBMHBM/DRAM/Remote/SSD+ GPU Direct Storage
数据类型仅 KV仅 KVKV + 向量 + 多模态
调度LRULRU + cost-aware(部分)模型驱动 + 成本最优

待补

  • 读 LMCache 最新 paper(2024/2025 多篇),看它内部的 cost model 长什么样
  • 跑一次实测:RAG 场景下接 / 不接 LMCache 的 token 单位成本对比