tensorflow的设备分配

如果安装的是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

    原文作者:徐宁
    原文地址: https://zhuanlan.zhihu.com/p/29620659
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞