📌 项目地址:LMCache/LMCache | ⭐ 8,575 颗星 | 🔧 Python | 📜 未标注
为什么要关注这个项目
大模型推理中,长上下文(如整本书、多轮对话)的首Token延迟(TTFT)一直是性能瓶颈。传统方案每次请求都要重新计算前缀的Key-Value缓存,重复劳动吃掉了大量GPU算力和显存。LMCache 提供了一层专门的KV缓存层,让不同请求甚至不同vLLM实例之间能够复用缓存,实测TTFT可以大幅下降——尤其是第二轮及之后的问答,效果立竿见影。
这个项目由CMU、微软等机构的研究者贡献,目前已有8500+ Star,社区活跃。它并非替代vLLM,而是作为插件层“增强”vLLM,对已有服务改动极小。
快速上手:用Docker一分钟跑起
前提:一台带1块GPU的服务器,已安装Docker和nvidia-docker。
Step 1:拉取官方镜像
docker pull apostacyh/vllm:lmcache-0.1.0
Step 2:启动vLLM + LMCache
把下面命令中的 模型名、HF缓存目录 和 HuggingFace Token 替换成你自己的。
model=mistralai/Mistral-7B-Instruct-v0.2 # 可以换其他模型
sudo docker run --runtime nvidia --gpus '"device=0"'
-v /root/.cache/huggingface:/root/.cache/huggingface
-p 8000:8000
--env "HF_TOKEN=你的token"
--ipc=host
--network=host
apostacyh/vllm:lmcache-0.1.0
--model $model --gpu-memory-utilization 0.6 --port 8000
--lmcache-config-file /lmcache/LMCache/examples/example-local.yaml
等待日志显示 Uvicorn running on http://0.0.0.0:8000 就表示服务就绪。
Step 3:运行demo客户端
在服务器上另开终端:
git clone https://github.com/LMCache/LMCache
cd LMCache/examples/
pip install openai
python openai_chat_completion_client.py 8000
这个demo会读取 examples/f.txt 中的长文本进行问答。第一次请求因为要缓存,速度正常;第二次再问同样上下文的问题时,TTFT会显著降低。
独门绝技:跨vLLM实例共享前缀KV
很多场景需要多副本部署(例如对话机器人负载均衡),每个副本都得各自缓存相同的前缀,浪费显存。LMCache 支持启动一个独立的缓存后端服务,多个vLLM实例可以共同读写同一份KV缓存。
前提:服务器至少2块GPU。
Step 1:拉取缓存服务镜像
docker pull apostacyh/lmcache-server:0.1.0
Step 2:启动后端缓存服务器
docker run --name lmcache-server --network host -d apostacyh/lmcache-server:0.1.0 0.0.0.0 65432
Step 3:启动两个vLLM实例,都指向同一个缓存后端
第一个实例,监听8000端口,使用GPU 0
model=mistralai/Mistral-7B-Instruct-v0.2
sudo docker run --runtime nvidia --gpus '"device=0"'
-v /root/.cache/huggingface:/root/.cache/huggingface
-p 8000:8000
--env "HF_TOKEN=你的token"
--ipc=host
--network=host
apostacyh/vllm:lmcache-0.1.0
--model $model --gpu-memory-utilization 0.6 --port 8000
--lmcache-config-file /path/to/config.yaml
(第二个实例只需改GPU编号和端口号,命令结构相同,见README原文)
这样,两个实例共享同一份KV缓存,内存占用降低,且后续请求命中缓存后无需重新计算。
和同类工具的区别
目前市面上加速LLM推理的主流方案包括:
- vLLM 原生缓存:每个进程独立管理自己的KV缓存,进程间不能共享。
- FlashAttention / PageAttention:优化计算和内存访问,但对跨请求缓存复用支持有限。
- KV量化(如KV Cache Quantization):通过降低精度节省显存,但会损失部分精度。
LMCache 的特点是作为独立缓存层叠加在vLLM之上,不修改模型推理逻辑,实现 跨请求、跨实例的KV缓存共享与持久化,同时支持LRU淘汰、分布式缓存后端等特性。它不解决单次推理的延迟极限,而是解决“复用计算”带来的累积加速。
需要注意的事项
- 前提依赖:项目目前依赖Docker和NVIDIA GPU,纯CPU环境无法运行。官方提供的镜像基于vLLM,需要Python 3.10+。
- 配置文件:
example-local.yaml定义了缓存策略(如缓存大小、后端类型),首次使用建议仔细阅读注释,根据实际显存调整。 - Token权限:命令中的
HF_TOKEN是必须的,否则HuggingFace上的模型无法下载。 - 网络模式:多实例共享时使用了
--network=host,生产环境需根据网络拓扑调整端口映射。 - 许可证:项目目前采用Apache 2.0,但部分依赖(如vLLM)使用其他License,部署前需合规检查。
- 模型适配:架构当前针对Mistral、Llama等主流模型验证过,更小众的模型可能需要自行测试。
如果想进一步定制(如使用非Docker部署、对接自己的缓存后端),可以参考官方的Demo仓库中的脚本,以及项目的 examples/ 目录。