这类问题我又碰上了一次。一台 24GB 卡上起了四个推理容器,每个都按默认参数加载 7B 模型,第三个容器启动就 OOM,前两个还活着,K8s 里显示资源申请都成功了。

第一反应是「框架默认按可用显存的九成预留」,验证下来不成立。

原因不止一个,得分开看。容器只声明了 GPU 数量,没有显存配额;每个进程各自加载一份权重,无法共享;调度器只看卡数不看剩余显存。

动手时先列出每个容器的实际显存占用

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

给每个容器显式限制显存比例

python -m vllm.entrypoints.openai.api_server --model Qwen2.5-1.5B-Instruct --gpu-memory-utilization 0.22

接着改成一个容器内多模型共享进程

python serve_multi.py --models a,b,c --share-runtime

末了在调度层按显存而不是卡数做约束

python -c "print({'gpu_mem_request':'6Gi','gpu':1})"

怎么算真的好了,看的是同一批现象。四个容器都能稳定运行,显存总和不超物理上限,压测时没有容器被 OOMKilled。

提醒一点。GPU 是整卡调度的,按卡数分配不等于按显存分配,容器化的推理服务必须自己算好每份权重与 KV 的开销。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189