☰
vLLM 报 KV cache 不足 / 预分配失败怎么办?3 步解决
2026/10/29 11:05:37 网站建设 项目流程

vLLM 参数随版本更新,以下为常见参数和量级参考,具体以你所用版本的文档为准。

vLLM 启动到一半,直接报no available memory for KV cache,模型加载不起来。显存你看着是够的,怎么就 KV cache 分不出来?这是 vLLM 部署很典型的一个坑。3 个原因逐个查。

原因 1:gpu-memory-utilization 默认值占太满

vLLM 默认会把显存利用率设到比较高的值(常见默认约 0.9,即 90%)。它先装模型权重,再从剩下的显存里划一块给 KV Cache。如果模型一装进去,剩下的空间连一点 KV cache 都凑不出来,就预分配失败。

解决:把--gpu-memory-utilization调低一点,比如先试 0.85,给 KV cache 留出余地:

--gpu-memory-utilization 0.85

注意:这个值不是越低越好——太低了 KV cache 空间不够、并发上不去。调到能正常启动、且并发够用的位置即可。

原因 2:模型太大,权重占满显存

第二个原因:模型本身太大了,权重就把显存吃得七七八八,KV cache 没地方放。典型场景就是小卡跑大模型,比如 4090 跑 70B。

解决:

  • 开量化(AWQ / GPTQ),把权重压小,省出显存给 KV cache:
--quantization awq
  • 如果量化后还是不够,说明这张卡真的扛不住这个模型,换更大显存的卡。

原因 3:batch 相关参数设太大

第三个:你自己把--max-num-batched-tokens或--max-num-seqs设得太大了——vLLM 为了支持这么大的并发,需要预分配一大块 KV cache,显存一下就不够了。

解决:把这两个值调小,先保证能启动,再根据实际并发往上加:

--max-num-seqs 32 --max-num-batched-tokens 8192

这俩值直接决定 KV cache 要准备多大,设太大启动就炸。

你的 KV cache 报错是哪种?

报错现象大概率原因先做什么
一预分配就失败显存利用率占太满调低 gpu-memory-utilization
模型占满显存模型太大开量化 / 换卡
启动到一半失败batch 参数太大调小 max-num-seqs

核心就一句:vLLM 要的显存 = 模型权重 + KV cache,两边要一起算。


你用 vLLM 跑什么模型、报什么 KV cache 错误?把终端报错贴评论区,我帮你看怎么调参数。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询