out-of-memory - Pytorch RuntimeError: CUDA error: out of memory at loss.backward() , 使用 CPU 时没有错误
问题描述
我正在训练一个全卷积网络 (FCN32),用于在内存超过 11G 的 Tesla K80 上进行语义分割。
输入图像非常大:352x1216。网络结构如下图所示。我使用了batch_size=1,但仍然遇到 out_of_memory 错误。
标准是 nn.BCEWithLogitsLoss()
当我在 CPU 上运行时,网络工作正常。
Layer (type) Output Shape # Param
Conv2d-1 [-1, 64, 352, 1216] 1,792
Conv2d-2 [-1, 64, 352, 1216] 36,928
MaxPool2d-3 [-1, 64, 176, 608] 0
Conv2d-4 [-1, 128, 176, 608] 73,856
Conv2d-5 [-1, 128, 176, 608] 147,584
MaxPool2d-6 [-1, 128, 88, 304] 0
Conv2d-7 [-1, 256, 88, 304] 295,168
Conv2d-8 [-1, 256, 88, 304] 590,080
Conv2d-9 [-1, 256, 88, 304] 590,080
MaxPool2d-10 [-1, 256, 44, 152] 0
Conv2d-11 [-1, 512, 44, 152] 1,180,160
Conv2d-12 [-1, 512, 44, 152] 2,359,808
Conv2d-13 [-1, 512, 44, 152] 2,359,808
MaxPool2d-14 [-1, 512, 22, 76] 0
Conv2d-15 [-1, 512, 22, 76] 2,359,808
Conv2d-16 [-1, 512, 22, 76] 2,359,808
Conv2d-17 [-1, 512, 22, 76] 2,359,808
MaxPool2d-18 [-1, 512, 11, 38] 0
Conv2d-19 [-1, 4096, 11, 38] 102,764,544
Conv2d-20 [-1, 4096, 11, 38] 16,781,312
Conv2d-21 [-1, 1, 11, 38] 4,097 ConvTranspose2d-22 [-1, 1, 352, 1216] 4,096
错误信息:
-------------------------------------------------- ------------------------- RuntimeError Traceback (last last call last) in () 36 print (loss) 37 #torch.cuda.empty_cache() ---> 38 loss.backward() 39 optimizer.step() 40
/anaconda/envs/py35/lib/python3.5/site-packages/torch/tensor.py 在backward(self, gradient, retain_graph, create_graph) 91 个产品中。默认为
False
. 92 """ ---> 93 torch.autograd.backward(self, gradient, retain_graph, create_graph) 94 95 def register_hook(self, hook):/anaconda/envs/py35/lib/python3.5/site-packages/torch/autograd/ init .py 向后(张量,grad_tensors,retain_graph,create_graph,grad_variables)88 Variable._execution_engine.run_backward(89 张量,grad_tensors,retain_graph , create_graph, ---> 90 allow_unreachable=True) #allow_unreachable 标志 91 92
RuntimeError:CUDA错误:内存不足
解决方案
通常这是因为您的 GPU 上的内存而发生的。如果您有更强大的 GPU,则可以解决您的问题(正如您在回答中提到的那样)。
但是,如果您没有,您可以将图像缩小到大约256*x
大小。出于性能考虑,这也是一种很好的做法。
推荐阅读
- php - 加入所有表时从多个表中删除数据php larvel
- typescript - 用于从 Typescript 中的对象中提取属性的类型安全柯里化函数
- java - 使用 Log4j 我的应用程序每天都会生成许多日志文件
- compiler-errors - 编译器未找到库 gtkmm,但已安装
- reactjs - reactjs中如何检测iframe视频已经结束
- android - ActionMode 菜单图标未显示
- sql - 从查询中过滤记录
- javascript - Jest: .toThrow matcher does not pass test on Error
- alfresco - Alfresco 共享定制 - 添加样式
- javascript - connection.disconnected 不是函数