Solution尝试用gpu_options.allow_growth = True
查看消耗了多少默认内存tf.Session
创建。那段记忆将是always无论值如何分配。
根据您的结果,它应该小于 500MB。所以如果你希望每个进程truly每个有 1GB 内存,计算:
(1GB minus default memory)/total_memory
Reason
当您创建一个tf.Session
,无论您的配置如何,Tensorflow 设备都是在 GPU 上创建的。和这个device需要一些最小内存。
import tensorflow as tf
conf = tf.ConfigProto()
conf.gpu_options.allow_growth=True
session = tf.Session(config=conf)
Given allow_growth=True
,不应该有GPU分配。但实际上,它会产生:
2019-04-05 18:44:43.460479:我tensorflow/core/common_runtime/gpu/gpu_device.cc:1053]创建了TensorFlow设备(/job:localhost/replica:0/task:0/device:GPU:0 with 15127 MB内存)->物理GPU(设备:0,名称:Tesla P100-PCIE-16GB,pci总线id:0000:03:00.0,计算能力:6.0)
它占用内存的一小部分(根据我过去的经验,内存量因 GPU 型号而异)。NOTE:环境allow_growth
占用与设置几乎相同的内存per_process_gpu_memory=0.00001
,但后者将无法正确创建会话。
在这种情况下,它是345MB :
这就是您正在经历的偏移。让我们看看如果出现以下情况per_process_gpu_memory
:
conf = tf.ConfigProto()
conf.gpu_options.per_process_gpu_memory_fraction=0.1
session = tf.Session(config=conf)
由于 GPU 有16,276MB记忆、设置per_process_gpu_memory_fraction = 0.1
probably让您认为只会分配大约 1,627MB。但事实是:
1,971MB已分配,但这与默认内存 (345MB) 和预期内存 (1,627MB) 的总和一致。