为了提升并发把 worker 调到四,显存立刻翻了几倍,第二张卡没装却直接崩掉。

这类报错背后常见的原因有几处,逐个排除就行。每个 worker 是独立进程,各自加载一份模型;模型在多进程间无法共享显存;启动方式在 fork 后重复初始化;没有用推理服务器做集中调度。

动手时先把 worker 降到一验证显存峰值

uvicorn app:app --workers 1 --port 8000

接着把模型服务拆成独立进程,接口层只做转发

python -m vllm.entrypoints.openai.api_server --model ./model --port 8001

然后接口层再按需扩容

uvicorn app:app --workers 4 --port 8000

等前面都确认过,再确认显存只被一个进程占用

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

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

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

恢复的判定其实很直接。多个接口进程共用一个模型服务,显存占用稳定,并发能力通过接口层扩展。

补一句。模型加载是重量级操作,多进程复制几乎必然爆显存,把推理做成独立服务是更常规的架构选择。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189