【问题标题】:GPU Runtime Error when memory is available内存可用时出现 GPU 运行时错误
【发布时间】:2023-03-10 20:47:02
【问题描述】:

我目前正在训练一些神经网络模型,我发现由于某种原因,尽管有可用内存,但由于运行时错误,模型有时会在大约 200 次迭代之前失败。错误是:

RuntimeError: CUDA out of memory. Tried to allocate 2.00 MiB (GPU 0; 10.76 GiB total capacity; 1.79 GiB already allocated; 3.44 MiB free; 9.76 GiB reserved in total by PyTorch)

这显示了在应该有 9.76GB 可用内存的情况下仅使用了约 1.8GB 的​​ RAM。

我发现,当我找到一个好的种子(仅通过随机搜索),并且模型经过前几百次迭代后,它通常会运行良好。似乎模型在训练的早期就没有那么多可用的内存,但我不知道如何解决这个问题。

【问题讨论】:

  • 尝试在训练运行时监控 GPU 分配,例如使用watch -n 0.5 nvidia-smi。您可能会看到 GPU 内存使用量增长超出您的限制。我还建议在培训之前/之后致电torch.cuda.reset_peak_memory_stats()。如果你想深入挖掘,这可能是相关的:github.com/pytorch/pytorch/issues/35901
  • 您在微调模型吗?尝试减少您正在训练的层数,以查看架构的特定部分是否导致问题。从头开始训练?尝试提高辍学率。我怀疑这些具体建议是否会直接解决您的问题,但您可能会更深入地了解导致内存占用增加的原因。只是一个想法
  • 对我来说,上述错误通常要求减少批量大小(尤其是对于计算机视觉或其他大型矩阵)。
  • 我不认为这是一个批量大小问题,因为它不是真正的内存问题,因为模型在前几次迭代后训练良好
  • 你在哪里运行这段代码?本地还是云服务?

标签: python pytorch gpu ram


【解决方案1】:

值得注意的是您的错误9.76 GiB reserved in total by PyTorch 的这一部分,这意味着该内存不一定可用。我之前也遇到过类似的问题,我会尝试使用torch.cuda.empty_cache() 清空缓存。您也可以尝试torch.cuda.clear_memory_allocated() 清除分配的内存。之后使用nvidia-smi CLI 进行测试。最大化内存的一个常见问题是批量大小。我倾向于使用这种方法来计算合理的批量大小https://stackoverflow.com/a/59923608/10148950

还有一些方法可以使用 PyTorch 库根据这个答案调查内存使用情况:https://stackoverflow.com/a/58216793/10148950

【讨论】:

  • torch.cuda.empty_cache() 不应供最终用户使用。
猜你喜欢
  • 2020-11-08
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
相关资源
最近更新 更多