TensorFlow——tensorflow指定CPU与GPU运算

1.指定GPU运算
如果安装的是GPU版本,在运行的过程中能够自动检测 。如果检测到GPU,会尽可能的利用找到的第一个GPU来执行操作 。
如果机器上有超过一个可用的GPU,除了第一个之外的其他的GPU默认是不参与计算的 。为了让使用这些GPU,必须将OP明确指派给他们执行 。with......语句能够用来指派特定的CPU或者GPU执行操作:
import tensorflow as tfimport numpy as npwith tf.Session() as sess:with tf.device('/cpu:0'):a = tf.placeholder(tf.int32)b = tf.placeholder(tf.int32)add = tf.add(a, b)sum = sess.run(add, feed_dict={a: 3, b: 4})print(sum)
设备的字符串标识,当前支持的设备包括以下的几种:
cpu:0 机器的第一个cpu 。
gpu:0 机器的第一个gpu,如果有的话
gpu:1 机器的第二个gpu,依次类推

TensorFlow——tensorflow指定CPU与GPU运算

文章插图
类似的还有tf.来构建一个,在中指定相关的GPU,并且在中传入参数=“自己创建的”来指定gpu操作
其中,tf.函数的参数如下:
=True: 是否打印设备分配日志
=True: 如果指定的设备不存在,允许TF自动分配设备
import tensorflow as tfimport numpy as npconfig = tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)with tf.Session(config=config) as sess:a = tf.placeholder(tf.int32)b = tf.placeholder(tf.int32)add = tf.add(a, b)sum = sess.run(add, feed_dict={a: 3, b: 4})print(sum)
2.设置GPU使用资源
上文的tf.函数生成的之后,还可以设置其属性来分配GPU的运算资源,如下代码就是按需分配
import tensorflow as tfimport numpy as npconfig = tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)config.gpu_options.allow_growth = Truewith tf.Session(config=config) as sess:a = tf.placeholder(tf.int32)b = tf.placeholder(tf.int32)add = tf.add(a, b)sum = sess.run(add, feed_dict={a: 3, b: 4})print(sum)
TensorFlow——tensorflow指定CPU与GPU运算

文章插图
【TensorFlow——tensorflow指定CPU与GPU运算】使用,刚开始会分配少量的GPU容量,然后按需要慢慢的增加,有与不会释放内存,随意会导致内存碎片 。
同样,上述的代码也可以在创建时指定,
import tensorflow as tfimport numpy as npgpu_options = tf.GPUOptions(allow_growth=True)config = tf.ConfigProto(gpu_options=gpu_options)with tf.Session(config=config) as sess:a = tf.placeholder(tf.int32)b = tf.placeholder(tf.int32)add = tf.add(a, b)sum = sess.run(add, feed_dict={a: 3, b: 4})print(sum)
我们还可以给gpu分配固定大小的计算资源 。
gpu_options = tf.GPUOptions(allow_growth=True, per_process_gpu_memory_fraction=0.5)
上述代码的含义是分配给的GPU显存大小为:GPU的实际显存*0.5
TensorFlow——tensorflow指定CPU与GPU运算

文章插图