当我们使用 Nvidia GPU 训练深度学习模型时,特别是使用分布式多 GPU 时,因认为的终端程序,导致子线程(其实是子进程加载数据等)无法关闭,使得 GPU 显存一直占用,但是使用 nvidia-smi 却无法显示进程名等信息。本篇介绍如何彻底恢复 GPU 显存。

释放显存方案

通过找到真正占用显存的进程,然后杀死进程后达到是否显存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 指定第 0 号 GPU 进程占用
fuser -v /dev/nvidia0

# 指定所有 GPU 进程占用
fuser -v /dev/nvidia*

# 根据进程 PID 查看程序内容
sudo ls -l /proc/PID

# 如果是 PYTHON 程序,会有 exe,cwd 等信息
sudo ls -l /proc/PID | grep exe
sudo ls -l /proc/PID | grep cwd

# 如果查询发现该进程就是占用显存的进程,那么直接杀死
sudo kill -9 PID

# 清除进程后,再次查看显存占用
# 一般会有多个进程占用 GPU 显存,可以都查看下,是否需要杀死,然后在查看显存情况
nvidia-smi

参考文献

  1. Linux Ubuntu释放指定GPU的显存占用