如何避免PyTorch中的CUDA内存不足 [英] How to avoid "CUDA out of memory" in PyTorch

查看:30
本文介绍了如何避免PyTorch中的CUDA内存不足的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我认为对于低GPU内存的PyTorch用户来说,这是一个非常常见的信息:

RuntimeError: CUDA out of memory. Tried to allocate 😊 MiB (GPU 😊; 😊 GiB total capacity; 😊 GiB already allocated; 😊 MiB free; 😊 cached)

我想为我的课程研究对象检测算法。而且许多深度学习架构需要大容量的GPU内存,所以我的机器无法训练这些模型。我试图通过将每个层加载到GPU,然后再将其加载回来来处理图像:

for m in self.children():
   m.cuda()
   X = m(X)
   m.cpu()
   torch.cuda.empty_cache()

但它似乎不是很有效。我想知道有什么技巧和诀窍可以在使用少量GPU内存的情况下训练大型深度学习模型。提前感谢!

编辑:我是深度学习的初学者。如果这是一个虚假的问题,请道歉:)

推荐答案

虽然,

    import torch
    torch.cuda.empty_cache()

为清除已占用的CUDA内存提供了一个很好的选择,我们还可以使用,

手动清除不使用的变量
    import gc
    del variables
    gc.collect()
但在使用这些命令之后,错误可能会再次出现,因为pytorch实际上并不清除内存,而是清除对变量占用的内存的引用。 因此,在重新启动内核后减小Batch_Size并找到最佳的Batch_Size是最好的选择(但有时不是非常可行)。

更深入地了解GPU中内存分配的另一种方法是使用:

    torch.cuda.memory_summary(device=None, abbreviated=False)

其中,这两个参数都是可选的。这提供了可读的内存分配摘要,并允许您找出CUDA内存不足的原因,并重新启动内核以避免再次发生错误(就像我在本例中所做的那样)。

反复传递数据可能会有所帮助,但更改网络层的大小或分解它们也会被证明是有效的(因为有时模型也会占用大量内存,例如,在进行迁移学习时)。

这篇关于如何避免PyTorch中的CUDA内存不足的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆