1、tensorflow支持的设备及选择方式
一般系统中有多种计算设备,tensorflow使用CPU和GPU,这些设备通过如下名称标识:
“/cpu:0” "/gpu:0" "/gpu:1"
如果一个操作tensorflow既有CPU版本又有GPU版本实现,则tensorflow将会优先选择GPU来执行操作,如matmul支持CPU和GPU内核,在一个系统上有cpu:0和gpu:0,则gpu:0将会被选择执行matmul
2、查看你的操作和张量被分配到哪个设备上计算,可以创建一个session,session的log_device_placement配置项设置为True
import tensorflow as tf
a = tf.constant([1.,2.,3.,4.,5.,6.], shape=[2,3], name='a')
b = tf.constant([1.,2.,3.,4.,5.,6.], shape=[3,2], name='b')
c = tf.matmul(a,b)
with tf.Session(config= tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(c))
你可能得到如下输出信息:
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Tesla K40c, pci bus
id: 0000:05:00.0
b: /job:localhost/replica:0/task:0/gpu:0
a: /job:localhost/replica:0/task:0/gpu:0
MatMul: /job:localhost/replica:0/task:0/gpu:0
[[ 22. 28.]
[ 49. 64.]]
不过也可能得到如下输出信息:
Device mapping: no known devices.
I tensorflow/core/common_runtime/direct_session.cc:255] Device mapping:
MatMul: (MatMul): /job:localhost/replica:0/task:0/cpu:0
I tensorflow/core/common_runtime/simple_placer.cc:827] MatMul: (MatMul)/job:localhost/replica:0/task:0/cpu:0
b: (Const): /job:localhost/replica:0/task:0/cpu:0
I tensorflow/core/common_runtime/simple_placer.cc:827] b: (Const)/job:localhost/replica:0/task:0/cpu:0
a: (Const): /job:localhost/replica:0/task:0/cpu:0
I tensorflow/core/common_runtime/simple_placer.cc:827] a: (Const)/job:localhost/replica:0/task:0/cpu:0