TensorFlow CUDA_ERROR_OUT_OF_MEMORY。

13

我正在尝试在TensorFlow中构建一个大型的CNN,并打算在多GPU系统上运行它。我采用了“塔”系统,将批次分为两个GPU,同时保持变量和其他计算在CPU上。我的系统有32GB的内存,但当我运行我的代码时,出现以下错误:

E tensorflow/stream_executor/cuda/cuda_driver.cc:924] failed to alloc 17179869184 bytes on host: CUDA_ERROR_OUT_OF_MEMORY
W ./tensorflow/core/common_runtime/gpu/pool_allocator.h:195] could not allocate pinned host memory of size: 17179869184
Killed
我看到代码能够工作(虽然非常非常慢),如果我将CUDA设备隐藏到TensorFlow中,因此它不使用cudaMallocHost()...
谢谢您的时间。
2个回答

13

以下是一些选项:

1- 减少批次大小

2- 使用内存增长:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)

3- 不要分配整个GPU内存(只需90%):

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9
session = tf.Session(config=config, ...)

3
感谢您的回答,但是两种解决方案都无法解决我的问题,因为它们只涉及GPU内存...而我的错误是关于主机内存的... - Alexandre Vieira
我进一步发现,在sess.run(tf.global_variables_initializer())之后立即出现了错误。 - Alexandre Vieira
如果您的最后一层是全连接层,则减少该层的过滤器数量(通道),至少尝试一下。 - Ali Abbasi
1
结果发现我的模型不正确,在第一个全连接层上得到了大量的输入,使网络空间增加了很多。但还是感谢你的建议! - Alexandre Vieira

0
将您的代码中的batch_size减少为100,它就可以工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接