Featured image of post 显存释放

显存释放

解决显卡显存不释放问题

背景

在跑OpenGait代码的时候,直接Ctrl+C终止进程的时候,发现GPU显存没释放,但nvidia-smi也没看到进程,用gpustat看到有显存占用,也没看到用户信息。

原因

搜索一圈发现,在使用PyTorch设置多线程(threads)进行数据读取(DataLoader)的时候,其实是假的多线程,他是开了N个子进程(PID都连着)进行模拟多线程工作,所以你的程序跑完或者中途kill掉主进程的话,子进程的GPU显存并不会被释放,需要手动一个一个kill才行。

解决方法

具体解决方法如下:

  1. 使用 fuser -v /dev/nvidia* 查看 nvidia-smi 看不到的进程
  2. 查看具体进程调用GPU的情况 pmap -d PID
  3. 杀死进程 kill -9 PID