ConfigProto中的选项如allow_soft_placement和log_device_placement是什么意思?

时间:2017-07-02 17:10:46

标签: tensorflow

我们在许多TensorFlow教程中都经常看到这一点:

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

allow_soft_placementlog_device_placement的含义是什么?

4 个答案:

答案 0 :(得分:29)

如果你看一下第278行的API of ConfigProto,你会看到:

  // Whether soft placement is allowed. If allow_soft_placement is true,
  // an op will be placed on CPU if
  //   1. there's no GPU implementation for the OP
  // or
  //   2. no GPU devices are known or registered
  // or
  //   3. need to co-locate with reftype input(s) which are from CPU.
  bool allow_soft_placement = 7;

这实际意味着如果你在没有allow_soft_placement=True的情况下做这样的事情,TensorFlow会抛出一个错误。

with tf.device('/gpu:0'):
    # some op that doesn't have a GPU implementation

在它下面,你会看到第281行:

  // Whether device placements should be logged.
  bool log_device_placement = 8;

log_device_placement=True时,你会得到类似这样的详细输出:

2017-07-03 01:13:59.466748: I tensorflow/core/common_runtime/simple_placer.cc:841] Placeholder_1: (Placeholder)/job:localhost/replica:0/task:0/cpu:0
Placeholder: (Placeholder): /job:localhost/replica:0/task:0/cpu:0
2017-07-03 01:13:59.466765: I tensorflow/core/common_runtime/simple_placer.cc:841] Placeholder: (Placeholder)/job:localhost/replica:0/task:0/cpu:0
Variable/initial_value: (Const): /job:localhost/replica:0/task:0/cpu:0
2017-07-03 01:13:59.466783: I tensorflow/core/common_runtime/simple_placer.cc:841] Variable/initial_value: (Const)/job:localhost/replica:0/task:0/cpu:0

您可以查看每个操作的映射位置。对于这种情况,它们都映射到/cpu:0,但如果您处于分布式设置,则会有更多设备。

答案 1 :(得分:10)

tensorflow/core/protobuf/config.protoallow_soft_placementlog_device_placement)中的评论外,还会在TF using GPUs tutorial中解释。

  

要了解您的操作和张量分配到哪些设备,   使用log_device_placement配置选项集创建会话   真实。

这有助于调试。对于图表中的每个节点,您将看到分配给它的设备。

  

如果您希望TensorFlow自动选择现有的和   支持的设备在指定的情况下运行操作   不存在,您可以将allow_soft_placement设置为True   创建会话时的配置选项。

如果您不小心手动指定了错误的设备或不支持特定操作的设备,这将对您有所帮助。如果编写可以在您不知道的环境中执行的代码,这将非常有用。您仍然可以提供有用的默认值,但在失败的情况下可以提供优雅的回退。

答案 2 :(得分:2)

allow_soft_placement

此选项允许弹性设备分配,但仅在您的Tensorflow未经过GPU编译时才有效。如果您的tensorflow受GPU支持,则无论是否设置allow_soft_placement甚至将设备设置为CPU,操作始终在GPU上执行。但是,如果将其设置为false,将设备设置为GPU,但是在您的计算机中找不到GPU,则会引发错误。

log_device_placement

此配置告诉您在构建图形时分配了哪个设备的操作。它始终可以在您的计算机上找到具有最佳性能的优先设备。似乎只是忽略您的设置。

答案 3 :(得分:2)

简单地说:

allow_soft_placement允许动态分配GPU内存,

log_device_placement打印出设备信息