先把当时的情况摆出来。nvidia-smi 显示显存已用 22G,但进程列表里一个都没有,新任务一起就报显存不足,重启业务进程也没用。

真正麻烦的地方在于,几个原因的现象几乎一样。上一次训练异常退出,显存没有归还。还有一种是僵尸进程处于不可中断状态,nvidia-smi 列不出来。

还有一种情况,多个容器共享显卡,占用发生在别的命名空间。另外,显卡进入异常状态,需要复位才能恢复。

动手时先找出所有持有显卡句柄的进程

fuser -v /dev/nvidia*

随后确认进程状态后逐个结束

ps -ef | grep python

接着清理僵尸进程并确认显存回落

nvidia-smi --query-gpu=memory.used --format=csv

仍不释放时尝试复位设备

nvidia-smi --gpu-reset -i 0

恢复的判定其实很直接。显存占用回落到基线水平,新任务可以正常申请显存并开始训练。

提醒一点。复位会中断该卡上的所有任务,多用户机器上务必先确认没有别人的作业,否则一次复位可能毁掉几小时的训练。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189