问题出现得很突然,日志倒是留得挺全。为了省成本在 24GB 卡上跑了 4 个 7B 推理容器,每个声明 8GB 显存,实际峰值各自到 9GB,第三个容器启动就 OOM,Pod 反复重启。
刚开始盯着「模型加载阶段显存瞬时翻倍未被计算」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。K8s 的 GPU 资源是整数申请,无法按显存切片。也可能是容器没有显存上限,峰值互相挤占。
另外,调度器只看申请值不看实际占用。
动手时先记录每个容器的真实峰值
nvidia-smi --query-compute-apps=pid,used_memory --format=csv -l 2
然后改用 MIG 或时间片做硬隔离
nvidia-smi mig -cgi 1g.10gb,1g.10gb -C
给推理进程加显存上限参数
python -m vllm.entrypoints.openai.api_server --model Qwen2.5-7B-Instruct --gpu-memory-utilization 0.35
剩下的就是按隔离后的配额重新排布副本数
kubectl describe node gpu-node-1 | Select-String nvidia.com/gpu
改完先别撤,确认这几项。按 MIG 切出 2 个 10GB 实例后各跑一个容器,峰值不再互相影响,连续压测 6 小时无 OOM 与重启。
这里还有个坑。显存不能靠声明值超卖,K8s 的整数 GPU 申请管不住进程内的分配,要么 MIG 硬切,要么在进程里设上限。这类问题最好一次改到位,反复小改反而容易把原因搅混。
