caffe报错(3)Check failed: error == cudaSuccess (2 vs. 0) out of memory

在这里插入图片描述
在使用caffe进行训练测试的时候,提示如下错误:
Check failed: error == cudaSuccess (2 vs. 0) out of memory

这一报错是内存溢出,而且是cuda报出的,那么就是gpu的缓存溢出了。
遇到这种情况,一般解决步骤可有如下:

查看占用内存程序

打开终端输入:

nvidia-smi

上面那个是当时内存占用情况,如果想在训练中实时看到占用内存情况,终端内输入:

watch -n 0.1 nvidia-smi

在这里插入图片描述
当发现有残留程序占用GPU内存时,如上图实例,想删除运行的caffe,对应的PID为3264,使用如下命令删除:

kill -9 pid 3264

如果没有其他占用内存的程序时,继续往下查找

batch_size大小

一般这个问题都是由于batch_size大小设置太大(训练时train_val中的TRAIN和TEST),导致内存不够用,但是若训练网络很深,需要的内存也很大。

如果图片过大,需要适当缩小batch_size的值,否则使用GPU时可能超出其缓存大小而报错。

  • 首先要看的就是训练与测试的batch_size了:
    如图1例子中训练过程没有问题,说明训练的batch_size没有问题;
    测试过程出现的这个问题,说明测试的batch_size有问题;将train.prototxt中的文件test的batch_size调小一点。(一般将test阶段的batch_szie定为1)
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    mirror: false
    mean_file: "D:/caffe/yingli03/yingli_test_mean.binaryproto"
  }
  data_param {
    source: "D:/caffe/yingli03/yingli_test_lmdb"
    batch_size: 1
    backend: LMDB
  }
}
  • 还有一种情况就是训练阶段直接报错,说明训练的batch_size太大了,一次性读入的图片太多,所以就超出了显存。因此需要将train.prototxt中的文件train阶段的batch_size调小一点。
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    mean_file: "D:/caffe/yingli03/yingli_train_mean.binaryproto"
  }
  data_param {
    source: "D:/caffe/yingli03/yingli_train_lmdb"
    batch_size: 16
    backend: LMDB
  }
}

但是当两个阶段的batch_size都改为1时,内存溢出仍然报错,这就要考虑图片resize的大小。

resize

resize的具体详解可见https://blog.csdn.net/weixin_42535423/article/details/103720514

当怀疑是不是使用的原图太大,占用空间多,就需要将原数据集进行resize了

  • 1、同时也会遇到过这样一种情况
    .
    只有在train的batch_size和test的batch_size都设置为1的时候才能跑通。
    但在测试阶段却爆出错误,那只能和deploy文件有关系。

deploy文件

下图是输入层的设置,问题可能就出现在这儿。

首先分析每个参数的意义:

dim:10 #表示对待识别样本进行数据增广的数量,该值的大小可自行定义。但一般会进行5次crop,将整幅图像分为多个flip。该值为10则表示会将待识别的样本分为10部分输入到网络进行识别。如果相对整幅图像进行识别而不进行图像数据增广,则可将该值设置为1.
dim:3 #该值表示处理的图像的通道数,图像为RGB图像则通道数为3,设置该值为3
dim:224 #图像的长度
dim:224 #图像的宽度

问题一般出现在第一个dim:10
有的网络并不需要进行数据增广,因此不需要设置,只需要设置为1
当改完之后,再次进行测试!

  • 2、 还遇到过之前忘记具体更改了哪些参数,但将所有参数都改回来后,之前能够运行过去的程序再次运行居然也爆出这个错误,上面参数都未改动,查看了内存占用也没有残留程序,啥也没变愣是不能运行训练了,很苦恼,想起万能的 开机重启 了,果然问题完美的解决了,哈哈,果然神器。当然之前发生那个情况的具体原因仍然不知道,有小伙伴遇到过可以继续探讨哈!
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值