我正在尝试在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()......
感谢您的时间。
答案 0 :(得分:10)
有一些选择:
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, ...)
答案 1 :(得分:0)
将代码中的batch_size减小到100,然后就可以使用