背景
在跑OpenGait代码的时候,直接Ctrl+C
终止进程的时候,发现GPU显存没释放,但nvidia-smi
也没看到进程,用gpustat
看到有显存占用,也没看到用户信息。
原因
搜索一圈发现,在使用PyTorch设置多线程(threads)进行数据读取(DataLoader)的时候,其实是假的多线程,他是开了N个子进程(PID都连着)进行模拟多线程工作,所以你的程序跑完或者中途kill掉主进程的话,子进程的GPU显存并不会被释放,需要手动一个一个kill才行。
解决方法
具体解决方法如下:
- 使用
fuser -v /dev/nvidia*
查看nvidia-smi
看不到的进程 - 查看具体进程调用GPU的情况
pmap -d PID
- 杀死进程
kill -9 PID