A100 40GB 上开了 MIG,切出一个 1g.10gb 实例给推理用,vLLM 0.6.3 启动报 ValueError: Free memory on device cuda:0 (9.2/10.0 GiB) on startup is less than desired GPU memory utilization (0.9, 8.99 GiB),模型是 Qwen2.5-7B-Instruct 的 fp16 权重。

这类报错背后常见的原因有几处,逐个排除就行。7B 的 fp16 权重约 14GB,1g.10gb 切片本身就放不下;gpu_memory_utilization 按切片总显存算,0.9 只留不到 1GB 给 KV cache;MIG 实例编号与 CUDA_VISIBLE_DEVICES 的序号不一致,进程看到的是别的切片;驱动把切片可用显存报成 10GB,实际扣掉上下文只剩 9.2GB。

上来先确认切片编号与可用显存

nvidia-smi -L; nvidia-smi --query-gpu=name,memory.total,mig.mode.current --format=csv

随后换成 4bit 量化权重再试

python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-7B-Instruct-AWQ --quantization awq --max-model-len 4096

接着把显存比例压到切片能承受的值

python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-1.5B-Instruct --gpu-memory-utilization 0.85 --max-model-len 2048

限制进程可见的 MIG 实例

CUDA_VISIBLE_DEVICES=MIG-3f2a1b0c python -c "import torch;print(torch.cuda.get_device_properties(0).total_memory/1024**3)"

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

改完先别撤,确认这几项。服务能正常起来并响应 /v1/models,日志里 KV cache 块数大于零,压测时不再出现显存不足导致的退出。

容易忽略的是,MIG 切的是显存和算力,切完先按切片容量重新算模型大小,别拿整卡的参数直接套。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189