请帮助我找到解决问题的方法。首先要说明的是,我已经成功地创建了自己的自定义数据集,并且我已经在自己的计算机(16GB RAM 和 4GB NVIDIA 980)上使用 resnet101 成功地训练了该数据集,这对我来说很重要。
当我尝试使用 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 错误
我在问题 #1817的 github tensorflow 模型网页上找到了一种解决方案 ,我按照说明将以下代码行添加到 nasnet 配置文件中
train_config: {
batch_size: 1
batch_queue_capacity: 50
num_batch_queue_threads: 8
prefetch_queue_capacity: 10
...
并且代码运行了一段时间(以下是“顶部”屏幕截图)。但是,我在运行大约 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:基于问题 #2668和问题 #3014,我们还可以通过second_stage_batch_size: 25
在配置文件的模型部分添加(默认为 50)来运行代码而不会出现 OOM 错误。因此,该文件应如下所示
model{
faster_rcnn {
...
second_stage_localization_loss_weight: 2.0
second_stage_classification_loss_weight: 1.0
second_stage_batch_size: 25
}
}
希望这能有所帮助。