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

jks*_*hin 28 tensorflow

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

sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True, 
                                        log_device_placement=True))
Run Code Online (Sandbox Code Playgroud)

是什么allow_soft_placementlog_device_placement意味着什么?

jks*_*hin 30

如果你看看ConfigProtoAPI,在第278行,你会看到:

  // 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;
Run Code Online (Sandbox Code Playgroud)

这真正意味着如果你不做这样的事情allow_soft_placement=True,TensorFlow会抛出一个错误.

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

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

  // Whether device placements should be logged.
  bool log_device_placement = 8;
Run Code Online (Sandbox Code Playgroud)

什么时候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
Run Code Online (Sandbox Code Playgroud)

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


Sal*_*ali 10

除了tensorflow/core/protobuf/config.proto(allow_soft_placement,log_device_placement)中的注释之外,TF还使用GPU教程解释了它.

要找出分配了操作和张量的设备,请创建log_device_placement配置选项设置为True 的会话.

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


如果您希望TensorFlow自动选择现有且受支持的设备来运行操作,以防指定的设备不​​存在,则可以allow_soft_placement在创建会话时在配置选项中将其设置为True.

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


Ler*_*ang 7

allow_soft_placement

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

log_device_placement

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