报错:RuntimeError: CUDA out of memory. Tried to allocate 560.00 MiB (GPU 0; 23.70 GiB total capacity; 3.57 MiB already allocated; 516.56 MiB free; 4.00 MiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
查看显存:
nvidia-smi
显存Memory Usage被占用,但是显存利用率GPU-Util是0%,且看不到进程名
原因:显存利用率为0%,说明现在没有进程在跑;显存使用率占满,说明有进程跑完之后,没有释放掉,一直静静地占着地儿。
方法一:
1.使用下面的命令,查看详细的pid进程号和占用的显存
nvidia-smi --query-compute-apps=pid,used_memory --format=csv
2.sudo kill pid,kill指定pid进程,本文案例为60547,则为以下命令
sudo kill 60547
报错 :No Such Process
原因:这个命令查询到的进程ID(PID) 是 nvidia-smi 自己维护的,而不是操作系统维护的真实PID
或者直接执行以下命令
方法二:
1.查看正在运行的与 "python" 相关的进程
ps aux | grep python
2.其中62363是进程的进程号(PID),使用kill -9 PID1 PID2 PID3 ... PIDn 将占内存的进程(非系统的进程,应该是你自己之前执行过的程序)全kill掉
kill -9 62363
方法三(未验证):
fuser 命令来查找哪些进程正在使用 /dev/nvidia* 文件
awk 命令来处理 fuser 的输出,遍历每一行输出,以 "kill -9 " 开头,后面跟着每个进程的PID
执行前面生成的命令
sudo fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sudo sh
参考:
终止进程后,GPU显存仍被占用问题 | kill -9彻底杀死进程 | ps aux|grep python_进程中途断开,显存未释放-优快云博客