首页 >> 综合 > 快讯 >

vLLM 显存不足时把 KV 缓存分层卸载到 CPU 内存与本地存储

2026-10-20 14:33:41 来源:网易 编辑:吕海伟 

vLLM 在 GPU 显存容量不够支撑多并发长文本推理场景时,可以自动把闲置的 KV 缓存块分层卸载到 CPU 内存,还能进一步溢出到本地磁盘存储,以此大幅扩充缓存总容量,不用更换更大显存的显卡就能承载更多请求、更长上下文。整套机制采用主机中心化分层设计,所有缓存数据先从 GPU 转移到 CPU 内存,当 CPU 内存也被占满后,再异步写入本地硬盘;读取缓存时流程反向执行,先从硬盘加载到 CPU 内存,再同步回 GPU 显存,整个数据搬运全程使用异步传输,GPU 显存一旦完成数据拷贝就立刻释放,不会长期占用显存资源,同时依靠 LRU 淘汰策略自动筛选冷数据进行卸载,优先保留正在使用的热缓存块,保证推理速度稳定可控vLLM。

一、分层卸载的运行原理

  1. 缓存淘汰规则 vLLM 会自动识别冷热 KV 缓存块,正在被当前请求调用的热块保留在 GPU 显存,长时间未被访问的冷块优先触发卸载动作,采用 LRU 算法完成块的排序与驱逐。
  2. 两级存储流转流程
  • 卸载流程:GPU 显存满载→冷 KV 块异步拷贝到 CPU 内存→CPU 内存空间用尽→冷块继续异步写入本地磁盘,GPU 显存在拷贝完成后立刻释放,后续磁盘写入不占用 GPU 资源vLLM。
  • 加载流程:请求命中离线缓存→先把磁盘里的缓存块读取到 CPU 内存→再从 CPU 内存传输回 GPU 显存,采用按需即时分配显存的模式,不会提前预留显存等待数据加载。
  1. 数据传输优化 启用专用传输流完成 GPU 与 CPU 之间的数据收发,D2H 下行、H2D 上行分开执行,传输过程不会抢占模型推理的计算资源,保障吞吐效率。

二、两种卸载模式配置清单

模式 1:仅卸载至 CPU 内存(单层卸载)

  1. 核心启动参数配置 表格 46
  2. 命令行启动示例

vllm serve 模型路径 \

--kv-transfer-config '{"kv_connector":"OffloadingConnector","spec_name":"CPUOffloadingSpec","kv_role":"kv_both","cpu_bytes_to_use":32000000000}'

模式 2:CPU + 磁盘双层分层卸载(显存极度不足首选)

  1. 核心参数调整
  • spec_name 修改为 TieringOffloadingSpec,开启多级存储分层;
  • 新增 secondary_tiers 配置项,设置磁盘存储路径与磁盘缓存容量;
  • 先占用 CPU 内存,CPU 内存耗尽后自动溢出到磁盘。
  1. 双层分层完整配置 JSON

{

"kv_connector": "OffloadingConnector",

"spec_name": "TieringOffloadingSpec",

"kv_role": "kv_both",

"cpu_bytes_to_use": 32000000000,

"secondary_tiers": [{"type": "disk", "path": "/data/kv_cache", "size_bytes": 100000000000}]

}

三、精细化自定义配置项

  1. 分请求限制卸载范围 可以针对单条请求设置 max_offload_tokens,只把固定长度的前缀上下文缓存卸载,后续新生成 token 的缓存保留在 GPU 中,避免频繁读写磁盘。
  2. 块打包参数优化 通过 blocks_per_chunk 设置每一批次卸载的缓存块数量,打包批量传输能够减少 IO 次数,降低磁盘读写开销,数值建议设置为 8~32 之间。
  3. 显存占用阈值调节 配合 gpu_memory_utilization 参数,提前预留 10%~15% 的 GPU 显存不参与缓存分配,预留空间用来接收从 CPU 回传回来的缓存块,避免回传时出现显存溢出报错vLLM。

四、部署落地完整操作步骤

  1. 环境准备 升级 vLLM 到最新稳定版本,确保系统 PCIe 带宽正常,磁盘优先选用 NVMe 高速固态盘,减少磁盘 IO 带来的延迟;同时给服务进程分配足够大的 CPU 内存资源。
  2. 编写 KV 传输配置 JSON 文件 把分层卸载配置写入 json 文件,启动服务时直接读取文件,避免命令行参数过长。
  3. 启动 vLLM 推理服务 在启动命令中加入 --kv-transfer-config 配置文件路径,同时设置好 GPU 显存使用率上限。
  4. 验证功能生效 并发发起多条长上下文请求,观察 GPU 显存占用维持在设定上限,冷请求的 KV 缓存会自动下沉到 CPU 与磁盘,新请求不会触发 OOM 显存溢出。
  5. 性能调优 如果回传延迟偏高,适当调高 CPU 内存层级容量,减少磁盘读写频次;如果磁盘 IO 压力大,调大 blocks_per_chunk 批量打包大小。

五、最终落地效果

开启两级 KV 缓存卸载之后,GPU 显存只用来存放当前正在运行请求的热缓存,绝大多数历史冷缓存自动下沉到 CPU 内存与高速磁盘,整体可承载的并发请求数量可以提升 2~5 倍,超长上下文场景下不再受限于单卡显存大小,推理业务可以平稳持续运行,整体吞吐能力得到有效拓展。

【相关 FAQ】

问题 1:vLLM 把 KV 缓存卸载到 CPU 内存后,会不会大幅拉高推理延迟?

回答 1:vLLM 的 KV 缓存 CPU 卸载采用异步传输机制,GPU 显存完成拷贝就立刻释放,仅在缓存命中需要回传时才产生少量数据传输开销;只要把高频共享上下文的缓存保留在 CPU 内存,只把极少部分冷数据下沉到磁盘,整体延迟涨幅可以控制在合理范围,不会影响线上业务稳定性vLLM。

问题 2:vLLM 双层 KV 缓存卸载,CPU 内存和磁盘存储的容量该如何分配?

回答 2:优先把大部分离线缓存容量分配给 CPU 内存,磁盘仅作为兜底溢出层;建议 CPU 内存缓存容量设置为 GPU 显存总容量的 1.5~3 倍,磁盘缓存容量设置为 CPU 内存容量的 2~4 倍,优先利用更快的内存介质,尽量减少磁盘读写操作。

问题 3:vLLM 开启 KV 缓存分层卸载之后,需要额外调整哪些 GPU 显存参数?

回答 3:需要同步调低 gpu_memory_utilization 参数,预留出接收回传缓存块的显存空间;同时不要把 GPU 显存全部划分给 KV 缓存,预留一部分显存用于模型前向计算,防止缓存回传时出现显存资源争抢的情况vLLM。

【数据来源】

[2026-09-10](Tiered KV Cache Offloading in vLLM)vLLM 官方技术博客vLLM

[2026-10-12](vLLM 显存与缓存配置文档)vLLM 官方开发者文档vLLM

[2026-10-20](KV 缓存分层卸载部署指南)vLLM 开源项目文档

免责声明:本文内容仅为 vLLM 技术功能配置说明,仅用于技术测试与业务部署调试;不同硬件环境、模型大小、并发规模下的运行效果存在差异,使用者需要结合自身服务器硬件资源做参数适配;本文不构成任何硬件采购与线上生产环境部署的硬性依据。

 
最新文章
站长推荐