首先使用nvidia-smi命令检查GPU的使用情况,如果发现程序已经关闭了但是还有显存占用,说明有残留进程占用了显存,那么按以下方式释放:
从截图中能看出有程序占用了2392MiB的显存,此时要释放显存,那么首先找到进程ID:
使用ps -ef命令
可以看到PID、PPID、CMD 3列重要信息,分别是进程ID、父进程ID、进程的启动命令。
通过命令可以判断哪些进程是自己程序启动的进程,比如上方的python dp_res18.py就是我启动的进程,其他的均为系统进程或无关显存占用的进程。接下来杀死进程:
从截图中看到python dp_res18.py程序的进程ID是3732、3860、3988、4116、4244、4372、4500、4628,那么可以使用kill -9 3732 3860 3988 4116 4244 4372、4500 4628命令来结束进程。 但是常常占用显存的进程会很多,特别是在多卡并行时,按此方法会比较繁琐,以下介绍一种更强大的方式结束进程:
通过ps -ef能看出,我自己的进程都包含了dp_res18关键字(并且其他无关的系统进程没有包含,防止误杀),那么使用grep命令可以过滤出我自己的进程,例如:
接下来是获取进程的ID,此时可以使用awk命令,awk命令用法复杂,这里简单记住以下命令即可:
最后再通过kill命令,即可完整的结束进程。完整命令为ps -ef | grep dp_res18 | awk '{print $2}' | xargs kill -9
以上输出中会多出来一个No such process的错误,可以忽略,出现原因是grep dp_res18 也会产生一个进程,被自己过滤出来。