如何防止张量stream分配整个GPU内存?

我在共享计算资源的环境下工作,也就是说,我们有几台服务器机器,每台服务器都配备了几个Nvidia Titan X GPU。

对于中小尺寸的机型,Titan X的12GB通常足以让2-3人在同一个GPU上同时进行训练。 如果模型足够小以至于单个模型不能充分利用Titan X的所有计算单元,那么与一个训练过程相比,这实际上会导致加速。 即使并行访问GPU确实减慢了单独的培训时间,但拥有多个用户同时在GPU上运行的灵活性仍然不错。

TensorFlow的问题在于,默认情况下,它会在GPU启动时为其分配全部可用内存。 即使是一个小型的2层neural network,我也看到Titan X的12 GB已经用完了。

有没有办法让TensorFlow只分配4GB的GPU内存,如果知道这个数量对于给定的模型是足够的?

当你通过传递一个tf.GPUOptions作为可选的config参数的一部分来构造一个tf.Session时,你可以设置要分配的GPU内存的分数:

 # Assume that you have 12GB of GPU memory and want to allocate ~4GB: gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333) sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) 

per_process_gpu_memory_fraction用作同一机器上每个GPU上的进程将使用的GPU内存量的硬上限。 目前,这一部分被统一应用到同一台机器上的所有GPU上, 没有办法在每个GPU的基础上进行设置。

 config = tf.ConfigProto() config.gpu_options.allow_growth=True sess = tf.Session(config=config) 

https://github.com/tensorflow/tensorflow/issues/1578

无耻的插件:如果你安装了支持GPU的Tensorflow,会话将首先分配所有的GPU,无论你是只使用CPU还是GPU。 我可以添加我的提示,即使你设置graphics使用CPU只有你应该设置相同的configuration(以上回答:)),以防止不必要的GPU占用。