python - 不了解 CUDA 资源并不断耗尽内存
问题描述
我想我正在运行 Tensor PyTorch。
我是 python 新手,并试图用它来试验卷积神经网络和处理更大的图像。但是我一直遇到这个错误,即使我请求较小的图像输出。我刚刚注册了 Colab Pro。虽然它肯定更快,但它仍然与 CUDA 出错。如果我知道怎么做,我会重新分配内存,但我不知道。还有其他方法可以访问/管理 GPU 内存吗?
文件“/usr/local/lib/python3.7/dist-packages/torch/_tensor.py”,第 255 行,后向 torch.autograd.backward(self,gradient,retain_graph,create_graph,inputs=inputs)文件“/ usr/local/lib/python3.7/dist-packages/torch/autograd/ init .py",第 149 行,向后允许_unreachable=True,accumulate_grad=True) #allow_unreachable flag RuntimeError: CUDA out of memory。尝试分配 114.00 MiB(GPU 0;15.78 GiB 总容量;13.27 GiB 已分配;4.75 MiB 空闲;PyTorch 总共保留 14.43 GiB) VGG-19 架构检测到成功加载模型/vgg19-d01eb7cb.pth conv1_1:64 3 3 3 转换 1_2:64 64 3 3 转换 2_1:128 64 3 3 转换 2_2:
解决方案
我在下面展示了在 pytorch 中管理 GPU 内存的方法,但这些方法通常不是处理像你这样的 CUDA 错误的建议方法。
您收到此错误的原因与输出的大小无关,而是与输入的大小有关。您可能需要使用太大的图像进入您的网络,transforms.Resize()
或者您的批量大小太大,因此您需要大量的并行计算,因此需要在数据加载器中降低该数量。
从 gpu 内存中删除张量的方法可以通过使用来完成
a = torch.tensor(1)
del a
# Though not suggested and not rlly needed to be called explicitly
torch.cuda.empty_cache()
将张量分配给 cuda 内存的方法是简单地将张量移动到设备使用
a = torch.tensor(1)
a = a.cuda()
# OR
device = torch.device("cuda")
a = a.to(device)
萨塔克耆那教
推荐阅读
- swift - Swift 5 转换对使用感到困惑?
- javascript - React TypeScript 从 ref 中选择节点内容
- python - 添加与其他两列匹配的列,其中一列包含代表值
- python - 如何将抓取的结果保存在 CSV 中?
- javascript - 如何获取计算样式列表,包括与检查元素设置相同但使用包含@查询的 JavaScript 的类或 ID
- laravel - 有没有办法在 laravel octane 中指定主机名
- php - 如果在 PHPSpreadSheet 中为空,则用文本填充单元格
- java - 如何用 Spring MVC 重写
- django - Django从视图执行shell脚本而不是等到执行的脚本完成
- javascript - 我正在尝试制作一个下拉侧边栏菜单