ConfigProto中的诸如allow_soft_placement和log_device_placement之类的选项是什么意思?
tensorflow
5
0

我们在许多TensorFlow教程中经常看到这种情况:

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

allow_soft_placementlog_device_placement是什么意思?

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

简单来说:

allow_soft_placement允许动态分配GPU内存,

log_device_placement打印出设备信息

收藏
评论

除了tensorflow / core / protobuf / config.proto中的注释( allow_soft_placementlog_device_placement )之外,TF的使用GPU教程还对此进行了说明。

要找出将您的操作和张量分配给哪些设备,请在将log_device_placement配置选项设置为True的情况下创建会话。

这对调试很有帮助。对于图形的每个节点,您将看到为其分配的设备。


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

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

收藏
评论

如果在278行上查看ConfigProtoAPI ,您将看到以下内容:

  // 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情况下执行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 ,但是如果您处于分布式设置中,将会有更多的设备。

收藏
评论

allow_soft_placement

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

log_device_placement

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号