Tensorflow 内存不足和 CPU/GPU 使用率



我正在使用Tensorflow和Keras来训练用于对象识别(YOLO(的神经网络。

我编写了模型,并尝试使用 keras model.fit_generator(( 进行训练,批量包含 32 张 416x416x3 图像。

我使用的是具有8GB内存的NVIDIA GEFORCE RTX 2070 GPU(Tensorflow使用约6.6 GB(。

但是,当我开始训练模型时,我收到如下消息:

tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM when allocating tensor with shape
2019-02-11 16:13:08.051289: W tensorflow/core/common_runtime/bfc_allocator.cc:267] Allocator (GPU_0_bfc) ran out of memory trying to allocate 338.00MiB.  Current allocation summary follows.
2019-02-11 16:13:08.057318: I tensorflow/core/common_runtime/bfc_allocator.cc:597] Bin (256):   Total Chunks: 1589, Chunks in use: 1589. 397.3KiB allocated for chunks. 397.3KiB in use in bin. 25.2KiB client-requested in use in bin.
2019-02-11 16:13:08.061222: I tensorflow/core/common_runtime/bfc_allocator.cc:597] Bin (512):   Total Chunks: 204, Chunks in use: 204. 102.0KiB allocated for chunks. 102.0KiB in use in bin. 100.1KiB client-requested in use in bin.
...
2019-02-11 16:13:08.142674: I tensorflow/core/common_runtime/bfc_allocator.cc:597] Bin (268435456):     Total Chunks: 11, Chunks in use: 11. 5.05GiB allocated for chunks. 5.05GiB in use in bin. 4.95GiB client-requested in use in bin.
2019-02-11 16:13:08.148149: I tensorflow/core/common_runtime/bfc_allocator.cc:613] Bin for 338.00MiB was 256.00MiB, Chunk State:
2019-02-11 16:13:08.150474: I tensorflow/core/common_runtime/bfc_allocator.cc:632] Chunk at 000000070B400000 of size 1280
2019-02-11 16:13:08.152627: I tensorflow/core/common_runtime/bfc_allocator.cc:632] Chunk at 000000070B400500 of size 256
2019-02-11 16:13:08.154790: I tensorflow/core/common_runtime/bfc_allocator.cc:632] Chunk at 000000070B400600 of size 256
....
2019-02-11 16:17:38.699526: I tensorflow/core/common_runtime/bfc_allocator.cc:645] Sum Total of in-use chunks: 6.11GiB
2019-02-11 16:17:38.701621: I tensorflow/core/common_runtime/bfc_allocator.cc:647] Stats:
Limit:                  6624727531
InUse:                  6557567488
MaxInUse:               6590199040
NumAllocs:                    3719
MaxAllocSize:           1624768512
2019-02-11 16:17:38.708981: W tensorflow/core/common_runtime/bfc_allocator.cc:271] ****************************************************************************************************
2019-02-11 16:17:38.712172: W tensorflow/core/framework/op_kernel.cc:1412] OP_REQUIRES failed at conv_ops_fused.cc:734 : Resource exhausted: OOM when allocating tensor with shape[16,256,52,52] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc

我只报告了该消息的几行,但似乎很明显这是内存使用问题。

也许我应该在我的生成器函数中使用 CPU 从文件中读取图像和标签?在这种情况下,我该怎么办?

谢谢。

416x416 对于神经网络来说是一个相当大的尺寸。

在这种情况下,解决方案是减小批大小。

您可能不喜欢的其他解决方案是:

  • 减少模型容量(减少层中的单元/过滤器(
  • 减小图像大小
  • 如果您使用的是 float64,请尝试 float32(这在 Keras 中可能非常困难,具体取决于您使用的图层(

Keras/Tensorflow在分配内存时有一个奇怪的行为。我不知道它是如何工作的,但我似乎相当大的模型通过了,而较小的模型失败了。然而,这些较小的模型具有更复杂的操作和分支。

一件重要的事情:

如果此问题发生在您的第一个 conv 层中,则在模型的其余部分无法执行任何操作,您需要减少第一层的过滤器(或图像大小(

最新更新