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在内存管理上的瓶颈,尤其适合需要高效利用显存或处理长文本的场景。