[解决]GPU显存未释放问题

我们在使用tensorflow+pycharm 或者PyTorch写程序的时候, 有时候会在控制台终止掉正在运行的程序,但是有时候程序已经结束了,nvidia-smi也看到没有程序了,但是GPU的内存并没有释放,这是怎么回事呢?
使用PyTorch设置多线程(threads)进行数据读取(DataLoader),其实是假的多线程,他是开了N个子进程(PID都连着)进行模拟多线程工作,所以你的程序跑完或者中途kill掉主进程的话,子进程的GPU显存并不会被释放,需要手动一个一个kill才行,具体方法描述如下:

1.先关闭ssh(或者shell)窗口,退出重新登录
2.查看运行在gpu上的所有程序:

fuser -v /dev/nvidia*

3.kill掉所有(连号的)僵尸进程

具体操作步骤如下:
我们可以用如下命令查看 nvidia-smi看不到的GPU进程。

nvidia-smi         

发现内存泄露问题,即没有进程时,内存被占用


fuser -v /dev/nvidia*      

发现僵尸进程(连号的)


查看具体这个进程调用GPU的情况

pmap -d PID

强行关掉所有当前并未执行的僵尸进程

kill -9 PID

你可能感兴趣的:([解决]GPU显存未释放问题)