【vLLM 学习】Disaggregated Prefill Lmcache

【vLLM 学习】Disaggregated Prefill Lmcache
最新回答
姐很高也很傲

2026-10-23 01:10:19

Disaggregated Prefill Lmcache(解耦预填充LMCache)是vLLM框架中一种优化内存管理的技术,通过将预填充(Prefill)和解码(Decode)阶段的KV缓存分离存储,实现内存的高效利用。

  • 核心机制

    预填充阶段(GPU 0):处理输入提示词(Prompt),生成初始KV缓存并上传至LMCache服务器。

    解码阶段(GPU 1):从LMCache服务器获取KV缓存,继续生成后续文本。

    KV缓存传输路径:vLLM预填充节点 → LMCache服务器 → vLLM解码节点,避免显存重复存储。

  • 关键代码解析

    LMCache服务器启动

    def run_lmcache_server(port): server_proc = subprocess.Popen(["python", "-m", "lmcache.experimental.server", "localhost", str(port)]) return server_proc

    通过子进程启动LMCache服务,监听指定端口(默认8100)。

    预填充节点配置

    ktc = KVTransferConfig.from_cli('{"kv_connector":"LMCacheConnector","kv_role":"kv_producer","kv_rank":0,"kv_parallel_size":2}')llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2", kv_transfer_config=ktc, ...)

    指定角色为kv_producer,将KV缓存上传至LMCache。

    使用kv_parallel_size=2支持多GPU并行。

    解码节点配置

    ktc = KVTransferConfig.from_cli('{"kv_connector":"LMCacheConnector","kv_role":"kv_consumer","kv_rank":1,"kv_parallel_size":2}')prefill_done.wait() # 等待预填充完成llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2", kv_transfer_config=ktc, ...)

    指定角色为kv_consumer,从LMCache拉取KV缓存。

    通过Event同步预填充和解码流程。

  • 环境变量配置

    LMCache_CHUNK_SIZE=256:分块传输KV缓存,每块256个token。

    LMCache_REMOTE_SERDE=naive:使用无压缩的原始张量传输。

    LMCache_MAX_LOCAL_CPU_SIZE=5.0:限制本地CPU缓存大小为5GB,避免内存溢出。

  • 优势与适用场景

    内存优化:减少显存占用,适合大模型或多GPU部署。

    解耦设计:预填充和解码可独立扩展,提升资源利用率。

    长文本生成:通过LMCache服务器共享KV缓存,支持超长上下文处理。

  • 注意事项

    需安装LMCache库:pip install lmcache。

    实验性功能需启用:LMCache_USE_EXPERIMENTAL=True。

    多进程管理需确保资源隔离(如CUDA_VISIBLE_DEVICES)。

总结:Disaggregated Prefill Lmcache通过分离KV缓存的存储与计算,解决了vLLM在内存管理上的瓶颈,尤其适合需要高效利用显存或处理长文本的场景。