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 错误?把终端报错贴评论区,我帮你看怎么调参数。