这类问题我又碰上了一次。在 24GB 的 4090 上用 vLLM 0.6.3 起 Qwen2.5-14B-Instruct,参数 gpu_memory_utilization 给到 0.95,启动直接报 No available memory for the cache blocks,把模型换成 7B 才能起。
第一反应是「同卡还有别的进程占着显存没释放」,验证下来不成立。
把日志和配置对完,能解释这个现象的基本就这几处。权重本身占满了卡,留给 KV cache 的空间不够一个块;max_model_len 设成 32768,单请求预留过大;张量并行度设成 1 却按多卡显存估算。
上来先看卡上实际剩余显存与占用进程
nvidia-smi --query-gpu=memory.used,memory.total --format=csv
再往下把最大长度降到 8192 并降低显存比例重试
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-14B-Instruct --max-model-len 8192 --gpu-memory-utilization 0.90
显式限制并发序列数减少 KV 预留
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-14B-Instruct --max-num-seqs 8 --max-model-len 8192
末了用 4bit 量化权重再启动对比占用
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-14B-Instruct-AWQ --quantization awq --max-model-len 8192
怎么算真的好了,看的是同一批现象。服务能正常启动并输出模型加载完成日志,nvidia-smi 里显存占用留有余量,压测 8 并发不出现 preempt。
提醒一点。报的是缓存块不够而不是权重放不下,先降 max_model_len 和并发,再考虑量化,直接调高显存比例只会更糟。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
