请帮我找到解决问题的方法。首先要说明的是,我已经成功创建了自己的自定义数据集,并且已经在我自己的计算机上使用resnet101成功训练了该数据集(16GB RAM和4GB NVIDIA 980)。
当我尝试使用inception-resnet和nasnet切换主干时出现问题。我收到以下错误
"ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape ..."
我认为我的计算机上没有足够的资源,因此我在AWS EC2上创建了具有60GB RAM和12GB NVIDIA Tesla K80(我的工作场所仅提供此服务)的实例并在那里训练了网络。
对inception-resnet的培训运作良好,但是对于nasnet来说并非如此。即使有100GB内存,我仍然会收到OOM错误
我在issue #1817的github tensorflow模型网页上找到了一个解决方案,我按照说明将以下代码行添加到nasnet配置文件中
train_config: {
batch_size: 1
batch_queue_capacity: 50
num_batch_queue_threads: 8
prefetch_queue_capacity: 10
...
并且代码运行了一段时间(the following is "top" screenshot)。但是,在运行6000步后我仍然遇到OOM错误
INFO:tensorflow:global step 6348: loss = 2.0393 (3.988 sec/step)
INFO:tensorflow:Saving checkpoint to path /home/ubuntu/crack-detection/structure-crack/models/faster_rcnn_nas_coco_2017_11_08/train/model.ckpt
INFO:tensorflow:global step 6349: loss = 0.9803 (3.980 sec/step)
2018-01-25 05:51:25.959402: W tensorflow/core/common_runtime/bfc_allocator.cc:273] Allocator (GPU_0_bfc) ran out of memory trying to allocate 79.73MiB. Current allocation summary follows.
...
ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[64,17,17,4032]
[[Node: MaxPool2D/MaxPool = MaxPool[T=DT_FLOAT, data_format="NHWC", ksize=[1, 1, 1, 1], padding="VALID", strides=[1, 1, 1, 1],
...
在没有任何OOM错误的情况下,我还能做些什么来顺利运行吗?谢谢你的帮助
编辑#1 :现在错误更频繁,1000-1500步后会显示错误。
编辑#2 :基于issue #2668和issue #3014,我们还可以通过添加{{{}来执行一项无需OOM错误即可运行代码的操作1}}(默认为50)在配置文件的模型部分。因此,该文件应如下所示
second_stage_batch_size: 25
希望这可以提供帮助。
答案 0 :(得分:1)
我想指出你耗尽的内存是GPU中的一个,所以我担心这些100GB只对训练目的之外的数据争用有用。此外,如果没有代码,很难找出错误的来源。
话虽如此,如果你可以用权重初始化神经网络架构,训练6000次迭代并突然耗尽GPU内存,那么我猜你要么以某种方式将值存储在GPU内存中,或者如果你有可变长度输入,你可能会在那次迭代中传递一个序列,这个记忆太大了。