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