Pytorch:GPU内存泄漏

问题描述 投票:0回答:1

我推测在使用PyTorch框架进行Conv网络训练时,我面临GPU内存泄漏。下图

enter image description here

为了解决它,我添加了-

os.environ['CUDA_LAUNCH_BLOCKING'] = "1"

解决了内存问题,如下所示-enter image description here

但是当我使用torch.nn.DataParallel时,所以我希望我的代码能够使用所有GPU,但现在它仅使用GPU:1

enter image description here

在使用os.environ['CUDA_LAUNCH_BLOCKING'] = "1"之前,GPU利用率低于(同样糟糕)-

enter image description here

[挖掘further时,我知道,当我们使用torch.nn.DataParallel时,应该不使用CUDA_LAUNCH_BLOCKING',因为它使网络陷入某种死锁机制。因此,现在我又回到了GPU内存问题上,因为我认为我的代码没有利用未设置CUDA_LAUNCH_BLOCKING=1的内存量。我的代码使用torch.nn.DataParallel-

device =  torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
if torch.cuda.device_count() > 1:
  print("Let's use", torch.cuda.device_count(), "GPUs!")
  # dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs
  model_transfer = nn.DataParallel(model_transfer.cuda(),device_ids=range(torch.cuda.device_count()))


model_transfer.to(device)

如何解决GPU内存问题?

deep-learning parallel-processing pytorch conv-neural-network gpu-programming
1个回答
0
投票

因此,解决某些CUDA内存不足问题的方法是,确保删除无用的张量并修剪由于某些隐藏原因可能仍被引用的张量。问题可能是由于请求的内存超出了您的能力,或者是由于垃圾数据的积累而不必要的,但是某种程度上却留在了内存中。

此内存管理最重要的方面之一就是如何加载数据。与其读取整个数据集,不如从磁盘读取(读取npy时使用memmap)或批量加载(一次只读取一批图像或一次拥有的任何数据),可能会提高内存效率。尽管这可能会在计算上变慢,但它确实为您提供了灵活性,使您可以不外出并购买更多的GPU来存储您的内存以运行代码。

我们不确定在读取数据或训练您的CNN方面代码的结构,所以这是我所能提供的建议。

© www.soinside.com 2019 - 2024. All rights reserved.