这个坑值得记一笔。启动 7B 模型时提示 The model’s max seq len (32768) is larger than the maximum number of tokens that can be stored in KV cache,估算只有 9000 多的容量。
刚开始盯着「并发序列数偏高,每条都要预留空间」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。默认按模型最大长度预分配 KV cache,显存不够;gpu-memory-utilization 设得太保守;模型权重本身占掉了大半显存。
上来先按实际业务长度下调最大上下文
vllm serve Qwen/Qwen2.5-7B-Instruct --max-model-len 8192
适度提高显存占用比例
vllm serve Qwen/Qwen2.5-7B-Instruct --max-model-len 8192 --gpu-memory-utilization 0.9
限制并发序列数,避免超额预留
vllm serve Qwen/Qwen2.5-7B-Instruct --max-num-seqs 8
末了观察启动日志里报告的 KV cache 容量
nvidia-smi --query-gpu=memory.used --format=csv
隔了一天再看,现象没变,说明不是偶发。
那几天正好在做别的变更,先把时间线对齐才敢动手。
别只看报错消失,验证要多做一步。启动日志出现 KV cache size 且大于设定的最大长度,服务能接收请求,长文本任务不再被拒绝。
max-model-len 调小会让超出部分直接被截断,业务上要确认最长输入的真实分布,别为了启动成功把上限压得过低。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。