我将使用{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可用。
答案 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%。也许这足以解决您尝试分配比可用内存更多的网络问题。 如果这还不够,则必须减小批量大小或网络大小。