全网最全RuntimeError: CUDA error: out of memory解决方法

第一种情况

如果这个报错后面跟了想要占用多少显存但是不够这样的字眼,如下:

解决办法就很简单了:

  • 改小batchsize,batchsize砍半可以差不多省掉一半的显存
  • 推理阶段加上with torch.no_grad(),这个可以将修饰的代码段不要梯度,可以省掉很多显存
  • 改小input的shape,例如(224,224)->(112,112)这样可以省掉一半的显存
  • 换小的网络结构
  • 用多卡训练,torch可以用model = nn.DataParallel(model)启用多卡训练,终端用CUDA_VISIBLE_DEVICES=0,1 python3 train.py启动即可,这样会将batchsize等份的分给n张卡,这里的示例是2张卡,这样相当于减小了单卡的batchsize,就不会OOM了。
  • 开启FP16,就是浮点数截断,可以省一大部分显存
  • 钞能力
  • 第二种情况

    直接报错OOM没有说申请多少显存而不够的字眼。如下:

    这个情况比较特殊,有多种原因:

  • 原因一:linux下某个用户存在了显存泄露,如果是自己的账号有显存泄露,执行fuser -v /dev/nvidia*然后将提示的进程kill掉即可,如果是其他用户显存泄露,需要管理员权限,执行以下命令,执行前最好跟所有用户通知下,不然再跑的任务会被杀了。但是出现这样显存泄露的情况,所有的用户都会用不了显卡,所以应该不会有任务在跑(猜测):
  • sudo fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sudo sh
    
  • 原因二:网上看到的,据说模型加载的参数和自己pytorch的版本不匹配就会报错这个,例如你的pretrain使用torch1.1.0训的,你用torch1.2.0的代码加载这个参数就有可能报错。这个没经历过,仅仅看到记录下。
  • 来源:只会git clone的程序员

    物联沃分享整理
    物联沃-IOTWORD物联网 » 全网最全RuntimeError: CUDA error: out of memory解决方法

    发表评论