如果安装的是GPU版本的tensorflow,即,tensorflow-gpu。则在没有特别指定设备的情况下,会优先将变量等分配给GPU;如果显式指派了设备,且设备不存在,则会报错:
Cannot assign a device to node 'Variable': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available.
另外,显示指定时,即便存在指定的设备,如:
g = tf.Graph()
with g.as_default(), g.device('/gpu:0'):
...
有时候也会报同样的错误。
无论上边哪种情况导致的,都可以在会话开启的时候指定allow_soft_placement = True
config = tf.ConfigProto(log_device_placement=True, allow_soft_placement = True)
with tf.Session(graph=g, config=config) as sess:
...
这样,对于第一种导致报错的情况,tf会分配一个可用的设备;对于第二种导致报错的情况,tf会不再报错。
第二种导致报错的情况,应该是一个 bug。
参考:使用 GPUs – TensorFlow 官方文档中文版 – 极客学院Wiki
Bug on specifying GPU to tutorial example minist · Issue #2292 · tensorflow/tensorflow