RuntimeError: CUDA out of memory. Tried to allocate 14.00 MiB linux跑深度学习爆显存问题

出现这条信息就说明当前环境中可分配给跑训练的显存不够了,有两种可能原因:
1、显卡的显存确实太小,训练网络的要求高于这张显卡。解决办法只有换大显存显卡。
2、系统的进程太多,有可能跑之前调试的代码进程没有结束,还在占用显存,需要清理。
清理办法:注:方法参考 https://www.autodl.com/docs/qa4/ 移植到我的个人博客仅仅是出于方便个人的学习,如有侵权请告知删除。
首先使用nvidia-smi命令检查GPU的使用情况,如果发现程序已经关闭了但是还有显存占用,说明有残留进程占用了显存,那么按以下方式释放:
在这里插入图片描述
从截图中能看出有程序占用了4388MiB的显存,此时要释放显存,那么首先找到进程ID:
使用ps -ef命令
在这里插入图片描述
可以看到PID、PPID、CMD 3列重要信息,分别是进程ID、父进程ID、进程的启动命令。

通过命令可以判断哪些进程是自己程序启动的进程,比如上方的python train.py就是我启动的进程,其他的均为系统进程或无关显存占用的进程。接下来杀死进程:

从截图中看到python train.py程序的进程ID是594797,那么可以使用kill -9 594 797命令来结束进程。 但是常常占用显存的进程会很多,特别是在多卡并行时,按此方法会比较繁琐,以下介绍一种更强大的方式结束进程:

通过ps -ef能看出,我自己的进程都包含了train关键字(并且其他无关的系统进程没有包含,防止误杀),那么使用grep命令可以过滤出我自己的进程,例如:
在这里插入图片描述
接下来是获取进程的ID,此时可以使用awk命令,awk命令用法复杂,这里简单记住以下命令即可:
在这里插入图片描述
最后再通过kill命令,即可完整的结束进程。完整命令为ps -ef | grep train | awk '{print $2}' | xargs kill -9
在这里插入图片描述
以上输出中会多出来一个No such process的错误,可以忽略,出现原因是grep train也会产生一个进程,被自己过滤出来。
更多说明:|
Linux命令中的|符号称之为管道,作用是把前一个命令的输出作为下一个命令的输入(一般为stdout,stderr要做其他处理),管道的功能非常实用,在很多场景下都可以使用到,比如某个文件夹下有几万个文件,但是有一个文件是txt文件,其他均为图片,需要将此文件找出来。如果使用ls获取文件列表后人工排查非常麻烦,因此可以使用:
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值