场景
要把约 70B 的指令/蒸馏模型以较高精度拉起来,单卡 80G 不够(BF16 量级大约要翻倍显存)。两张 A100,tensor-parallel-size 2,NVLink 同岛的一对。
问题
容器默认 --shm-size 太小(常见 64MB)。多卡 NCCL 通信一上来就异常退出,日志不一定直说「shm」,有时包装成 worker 挂了、引擎重启循环。
修法很具体:
docker run --gpus '"device=0,1"' --shm-size=16g \
-v /data/models:/models \
-p 127.0.0.1:8000:8000 \
vllm/vllm-openai:your-tag \
--model /models/xxx-70b \
--tensor-parallel-size 2 \
--max-model-len 8192 \
--gpu-memory-utilization 0.90
16g 不是玄学数字,太小必炸;再大也要看宿主机内存。K8s 里对应调 emptyDir.medium: Memory 的 sizeLimit。
还有两个容易误判的点
加载完成前就接流量。 70B TP 冷启动能到分钟级。就绪探针如果只查进程端口,会把「还在加载」的实例加进负载均衡,用户一波超时。探针改成打真实 /v1/models 或自定义 ready,并且 initialDelaySeconds 给够。
OOM 不一定是权重。 max-model-len 过大时,KV 在两卡上同样膨胀。先降上下文,再升并发。
量化档的取舍
同系列 AWQ/FP8 单卡或更少卡也能跑时,先确认业务:工具调用、长推理是否可接受轻微质量波动。能接受就少占卡;不能接受再上 TP=2 高精度。卡是公共资源,70B 全精度常驻两张 A100,意味着少两个 14B 高并发实例——这笔账要讲清楚。
多卡不是加一个参数的事:shm、拓扑、就绪、上下文,四件事任一没做,都会表现成「vLLM 不稳」。


