繁体   English   中英

Why do I get CUDA out of memory when running PyTorch model [with enough GPU memory]?

[英]Why do I get CUDA out of memory when running PyTorch model [with enough GPU memory]?

我问这个问题是因为我成功地在具有 8GB VRAM 的笔记本电脑上的 GTX 2070 上训练了一个分段网络,并且我使用完全相同的代码和完全相同的软件库安装在带有 GTX 1080TI 的台式 PC 上,它仍然抛出memory。

为什么会发生这种情况,考虑到:

  1. 相同的 Windows 10 + CUDA 10.1 + CUDNN 7.6.5.32 + Nvidia 驱动程序 418.96(随 ZA33B7755E5F9B504D2D0381ZA33B7755E5F9B504D2D0381ZA4FF 一起出现在 PC 上的笔记本电脑和 8D 上)。

  2. The fact that training with TensorFlow 2.3 runs smoothly on the GPU on my PC, yet it fails allocating memory for training only with PyTorch.

  3. PyTorch 通过以下命令识别 GPU(打印 GTX 1080 TI): print(torch.cuda.get_device_name(0))

  4. PyTorch 在运行此命令时分配 memory: torch.rand(20000, 20000).cuda() #allocated 1.5GB of VRAM.

解决方案是什么?

大多数人(甚至在下面的线程中)都跳到建议减少 batch_size 将解决这个问题。 事实上,在这种情况下并非如此。 例如,考虑到在具有 11GB VRAM 的系统上没有其他应用程序消耗视频 memory 并且安装了完全相同的配置,因此网络在 8GB VRAM 上训练但在 11GB VRAM 上训练失败是不合逻辑的。用过的。

在我的案例中发生这种情况的原因是,在使用DataLoader object 时,我为workers参数设置了一个非常高的(12)值。 在我的情况下,将此值减小到4解决了这个问题。

事实上,尽管在线程的底部,Yurasyk 在https://github.com/pytorch/pytorch/issues/16417#issuecomment-599137646提供的答案为我指明了正确的方向。

解决方案:减少 PyTorch DataLoader中的workers数量。 虽然我不完全理解为什么这个解决方案有效,但我认为它与在后台产生的用于数据获取的线程有关; 在某些处理器上,可能会出现这样的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM