tensorflow:CUDA_ERROR_OUT_OF_MEMORY总是发生

时间:2017-04-18 08:45:42

标签: tensorflow

我将使用{ti(11GB)GPU使用tf-seq2seq包来训练seq2seq模型。我总是使用不同的网络大小(甚至nmt_small)得到以下错误:

I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties: 
name: Graphics Device
major: 6 minor: 1 memoryClockRate (GHz) 1.582
pciBusID 0000:03:00.0
Total memory: 10.91GiB
Free memory: 10.75GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:03:00.0)
E tensorflow/stream_executor/cuda/cuda_driver.cc:1002] failed to allocate 10.91G (11715084288 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator: After 12337 get requests, put_count=10124 evicted_count=1000 eviction_rate=0.0987752 and unsatisfied allocation rate=0.268542
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] Raising pool_size_limit_ from 100 to 110
INFO:tensorflow:Saving checkpoints for 1 into ../model/model.ckpt.
INFO:tensorflow:step = 1, loss = 5.07399

似乎tensorflow试图占用GPU内存的总量(10.91GiB),但显然只有10.75GiB可用。

2 个答案:

答案 0 :(得分:2)

你应该注意一些提示:

1-使用来自tensorflow文档的内存增长:“在某些情况下,进程只需要分配可用内存的子集,或者只增加进程所需的内存使用量.TensorFlow提供两个在Session上配置选项来控制它。“

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)
你是否使用批次进行培训?或立即提供整个数据?如果是,则减少批量大小

答案 1 :(得分:1)

除了有关内存增长的两个建议之外,您还可以尝试:

sess_config = tf.ConfigProto()
sess_config.gpu_options.per_process_gpu_memory_fraction = 0.90

with tf.Session(config=sess_config) as sess:
   ...

通过这种方式,您可以限制程序分配的GPU内存量,在这种情况下可用于可用GPU内存的90%。也许这足以解决您尝试分配比可用内存更多的网络问题。 如果这还不够,则必须减小批量大小或网络大小。