RuntimeError: CUDA out of memory 解决办法

服务器的gpu内存不够,导致程序运行失败。
问题如下:

RuntimeError: CUDA out of memory. Tried to allocate 38.15 GiB (GPU 0; 31.75 GiB total capacity; 1.07 GiB already allocated; 26.18 GiB free; 3.45 GiB cached)

内存不足的解决方法:

1.不使用梯度方法

在test过程中,在dataloader循环前加入,

with torch.no_grad():

即不使用梯度回程,节省了计算量。

2.torch.nn.DataParallel()

对于多卡的方法,可以使用这个功能,让每张卡上的内存更加均匀,而不是只用一张卡计算。
声明是:

device = 'cuda' if torch.cuda.is_available() else 'cpu'
net = net.to(device)
if device == 'cuda':
    net = torch.nn.DataParallel(net)
    cudnn.benchmark = True

3.减少batch_size

有时一个batch的size过大,会导致一个batch的训练过于冗余,减少batch_size的大小能省很多内存。

parser.add_argument('--batch_size', default=256, type=int, help='Number of images in each mini-batch')

如以上,从1024减小到256,训练模型效果没有降低太多,但保证在当前gpu环境下可以很好运行。

4.释放无关内存

在报错行前后添加:

if hasattr(torch.cuda, 'empty_cache'):
	torch.cuda.empty_cache()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年4月2日
下一篇 2022年4月2日

相关推荐