Что означают опции в ConfigProto, такие как allow_soft_placement и log_device_placement?

Мы видим это довольно часто во многих учебниках TensorFlow:

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

Что означают allow_soft_placement и log_device_placement?

Ответ 1

Если вы посмотрите на API ConfigProto в строке 278, вы увидите следующее:

  // Whether soft placement is allowed. If allow_soft_placement is true,
  // an op will be placed on CPU if
  //   1. there 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 does not 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, но если вы находитесь в распределенной настройке, будет гораздо больше устройств.

Ответ 2

В дополнение к комментариям в tensorflow/core/protobuf/config.proto (allow_soft_placement, log_device_placement) также объясняется в TF с помощью учебного пособия по графическим процессорам.

Чтобы узнать, какие устройства назначены вашим операциям и тензорам, создать сеанс с настройкой конфигурации log_device_placementк True.

Это полезно для отладки. Для каждого из узлов вашего графика вы увидите устройство, которому оно было присвоено.


Если вы хотите, чтобы TensorFlow автоматически выбирал существующие и поддерживающее устройство для запуска операций в случае, если указанный не существует, вы можете установить allow_soft_placement в значение True в конфигурации при создании сеанса.

Это поможет вам, если вы случайно указали вручную неправильное устройство или устройство, которое не поддерживает конкретную операционную систему. Это полезно, если вы пишете код, который может быть выполнен в средах, которые вы не знаете. Вы по-прежнему можете предоставить полезные значения по умолчанию, но в случае отказа - изящный резерв.

Ответ 3

allow_soft_placement

Эта опция позволяет назначать гибкие устройства, но работает только тогда, когда ваш тензор потока не скомпилирован с помощью графического процессора. Если ваш тензор потока поддерживается графическим процессором, операции всегда выполняются на графическом процессоре, независимо от того, установлен параметр allow_soft_placement или нет, и даже если вы установите устройство в качестве ЦП. Но если вы установите его как false, а устройство - как GPU, но GPU не будет найден на вашем компьютере, это вызовет ошибку.

log_device_placement

Этот конфиг сообщает, какому устройству распределена операция при построении графика. Он всегда может найти приоритетное устройство с лучшей производительностью на вашей машине. Кажется, просто игнорировать ваши настройки.

Ответ 4

Простыми словами:

allow_soft_placement позволяет динамически распределять память графического процессора,

log_device_placement распечатывает информацию об устройстве