python - 内存可用时出现 GPU 运行时错误
问题描述
我目前正在训练一些神经网络模型,我发现由于某种原因,尽管有可用内存,但由于运行时错误,模型有时会在 ~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。
我发现当我找到一个好的种子(只是通过随机搜索),并且模型通过了前几百次迭代,之后它通常会运行良好。似乎模型在训练的早期就没有那么多可用的内存,但我不知道如何解决这个问题。
解决方案
值得注意的是您的这部分错误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
推荐阅读
- java - Java Robot 从 Windows 系统托盘启动
- ios - 未找到 Flutter shared_preferences 模块 - iOS Xcode 构建
- c# - 检查计划是否与 startDay、endDay、startTime 和 endTime 重叠
- scala - 具有共同特征的模式匹配案例类
- docker - 尝试在 RHEL Server 7.8 上安装 Docker 时如何解决“没有可用的包 docker-1.13.1”?
- github - 如何在没有要点的情况下在我的网站中显示 github 代码
- sql - 检查sql server中的字符串中是否存在子字符串
- assembly - 如何在 Linux 程序集上使用定义的频率制作正弦波
- python - 关键路径法
- jmeter - JMeter 中的记录问题 - SSO(桌面应用程序)