Machine Learning-CUDA out of memory (training)解决

有关CUDA,Cudnn, Pytorch, Tensorflow, Linux等等的环境配置请看这个专栏:

Envs set up

那么今天就来说一下,如果在使用Pytorch训练的过程中,出现报错CUDA out of memory我们应该怎么办嘞?

1. 显卡

首先,我们要先查看一下自己电脑上的显卡,如果是windows用户,可以直接进入设备管理器,选择显示设备进行查询

1.1 显卡性能

首先是显卡的性能,简单来说,就是你的电脑上起码得有个够用的显卡才可以,关于显卡的具体性能可以看这个大哥的帖子:
深度学习常用显卡介绍
比如说我电脑上的mx250,简单来说就是一个凑数的显卡,爆显存已经是日常了。

1.2 nvidia-smi

好,那么如果你的电脑上的显卡经过查询,基本符合上面帖子的要求计算能力大于5或者是至少有个4G显存,那么请接着往下看。
使用nvidia-smi进行查询,关于这条命令的详细解释请看这里
nvidia-smi命令详解
在这里你可以看到显卡的使用情况

2. 几种可能的解决办法

  • 调小你的batch_size或者换一张显存更大的显卡
  • 在报错的地方前面释放无关的内存:
if hasattr(torch.cuda, 'empty_cache'):
	torch.cuda.empty_cache()

上面两种方法参考自这边博客RuntimeError: CUDA out of memory.Tried to allocate 20.00 MiB
那么如果上面的两个办法没有解决你的问题的话,请接着往下看

3. 如果是服务器或者是多张显卡

那么如果你是在服务器上运行你的代码,并且上面的办法对你没用的话,那么有可能你是下面这个问题:
什么问题嘞?
我举个例子来说哈
比如这个服务器上有两张显卡,分别是cuda:0和cuda:1
而这个时候有人正在用cuda:0
那么如果你的代码中有类似:

data.cuda()
或者是
device = torch.device('cuda:0' if torch.cuda.is_available else 'cpu')
data.to(device)
再或者
device_ids = [0, 1]
data = torch.nn.DataParallel(data, device_ids = device_ids)

就会报错了
什么意思?
简单来说,就是因为现在cuda:0,也就是第一张显卡正在被别人使用,所以你一用就会报错

  • .cuda()这个方法是默认把数据移动到第一张显卡也就是cuda:0上的,所以 报错!
  • 第二种代码会把你的device设置为cuda:0,接下来把数据挪过去,所以 报错!
  • 第三种代码相当于会把数据平分之后,挪到devices_ids上的所有显卡中,所以报错!
    不过在这种情况下,加入你有四张显卡,而只有第一张在被别人使用,如果你把devices_id设置为[1, 2, 3]就不会报错
    因为并没有使用第一张显卡
    那么,针对上面的问题,解决方法是
device = torch.device('cuda:1')
data.to(device)
或者把device设置为任何一张空闲的显卡

那么,这是在训练过程中出现CUDA out of memory的办法,如果是在加载模型的时候报错,请看这里:
Machine Learning-CUDA out of memory (torch.load())解决

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值