指定GPU运算 - Tensorflow

半兽人 发表于: 2019-04-13   最后更新时间: 2019-04-13 00:07:54  
{{totalSubscript}} 订阅, 2,888 游览

指定GPU运算

如果下载的是GPU版本,在运行过程中TensorFlow能自动检测。如果检测到GPU,TensorFlow会尽可能地利用找到的第一个GPU来执行操作。

如果机器上有超过一个可用的GPU,除第一个之外的其他GPU默认是不参与计算的。为了让TensorFlow使用这些GPU,必须将OP明确指派给它们执行。with……device语句能用来指派特定的CPU或GPU执行操作:

with tf.Session() as sess:
with tf.device("/gpu:1"):
a = tf.placeholder(tf.int16)
b = tf.placeholder(tf.int16)
add = tf.add(a, b)
……

设备用字符串进行标识。目前支持的设备包括以下几种。

  • cpu:0:机器的CPU。
  • gpu:0:机器的第一个GPU,如果有的话。
  • gpu:1:机器的第二个GPU,依此类推。

类似的还有通过tf.ConfigProto来构建一个config,在config中指定相关的GPU,并且在session中传入参数config="自己创建的config"来指定GPU操作。

#tf.ConfigProto函数的参数如下。

  • log_device_placement=True:是否打印设备分配日志。
  • allow_soft_placement=True:如果指定的设备不存在,允许TF自动分配设备。

使用举例:

config = tf.ConfigProto(log_device_placement=True,allow_soft_placement=True)
session = tf.Session(config=config, ...)

设置GPU使用资源

上文的tf.ConfigProto函数生成config之后,还可以设置其属性来分配GPU的运算资源。如下代码就是按需分配的意思:

config.gpu_options.allow_growth = True

使用allow_growth option,刚开始会分配少量的GPU容量,然后按需慢慢地增加,由于不会释放内存,所以会导致碎片。

同样,上述代码也可以放在config创建的时指定,例如:

gpu_options = tf.GPUOptions(allow_growth=True)
config=tf.ConfigProto(gpu_options=gpu_options)

以下代码还可以给GPU分配固定大小的计算资源。

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)

代表分配给tensorflow的GPU显存大小为:GPU实际显存×0.7。

更新于 2019-04-13

查看TensorFlow更多相关的文章或提一个关于TensorFlow的问题,也可以与我们一起分享文章