长时间跑推理服务,反复加载卸载模型之后,开始报 OOM。nvidia-smi 显示显存还有空间。

原因:显存碎片。CUDA 的分配器对碎片处理不好,明明总量够,但没有连续的大块。

解法:

  1. 重启进程(最直接)
  2. 设 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,让分配器能合并
  3. 别频繁加载卸载模型,一次加载常驻

我的做法是常驻加定期重启(每天凌晨重启一次),配合健康检查。

另外:多个进程共用一张卡容易互相挤,最好一个进程独占一张卡,用 CUDA_VISIBLE_DEVICES 隔离。

主楼