我们在许多TensorFlow教程中经常看到这一点:
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
log_device_placement=True))
Run Code Online (Sandbox Code Playgroud)
是什么allow_soft_placement和log_device_placement意味着什么?
jks*_*hin 30
如果你看看ConfigProto的API,在第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.
如果您不小心手动指定了错误的设备或不支持特定操作的设备,这将对您有所帮助.如果编写可以在您不知道的环境中执行的代码,这将非常有用.您仍然可以提供有用的默认值,但在失败的情况下可以提供优雅的回退.
此选项允许弹性设备分配,但仅当您的 tensorflow 不是 GPU 编译时才有效。如果您的 tensorflow 支持 GPU,则无论是否设置 allow_soft_placement,即使您将设备设置为 CPU,操作始终在 GPU 上执行。但是,如果您将其设置为 false 并将设备设置为 GPU,但在您的机器中找不到 GPU,则会引发错误。
此配置会告诉您在构建图形时将操作分配给哪个设备。它始终可以在您的机器上找到性能最佳的优先设备。似乎只是忽略了您的设置。
| 归档时间: |
|
| 查看次数: |
23146 次 |
| 最近记录: |