tensorflow - instalar - ¿Qué significan las opciones en ConfigProto como allow_soft_placement y log_device_placement?
install tensorflow windows (4)
Vemos esto muy a menudo en muchos de los tutoriales de TensorFlow:
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
log_device_placement=True))
¿Qué significa allow_soft_placement
y log_device_placement
?
allow_soft_placement
Esta opción permite la asignación de dispositivos resilientes, pero solo funciona cuando su tensorflow no está compilado por GPU. Si su tensorflow es compatible con GPU, las operaciones siempre se realizan en GPU, sin importar si se ha establecido allow_soft_placement o incluso si configura el dispositivo como CPU. Pero si lo configura como falso y dispositivo como GPU pero no se puede encontrar GPU en su máquina, se genera un error.
log_device_placement
Esta configuración le indica a qué dispositivo se asigna la operación al crear el gráfico. Siempre puede encontrar el dispositivo priorizado con el mejor rendimiento en su máquina. Parece que solo ignoras tus configuraciones.
Además de los comentarios en tensorflow/core/protobuf/config.proto ( allow_soft_placement , log_device_placement ), también se explica en los tutoriales de TF utilizando GPU .
Para averiguar a qué dispositivos están asignados sus operaciones y tensores, cree la sesión con la opción de configuración
log_device_placement
establecida en Verdadero.
Lo que es útil para la depuración. Para cada uno de los nodos de su gráfico, verá el dispositivo al que fue asignado.
Si desea que TensorFlow elija automáticamente un dispositivo existente y compatible para ejecutar las operaciones en caso de que no exista el especificado, puede establecer
allow_soft_placement
en True en la opción de configuración al crear la sesión.
Lo que le ayudará si accidentalmente especificó manualmente el dispositivo incorrecto o un dispositivo que no es compatible con una operación en particular. Esto es útil si escribe un código que puede ejecutarse en entornos que no conoce. Aún puede proporcionar valores predeterminados útiles, pero en el caso de un fallo, un retroceso elegante.
Si observa la API de ConfigProto , en la línea 278, verá esto:
// 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;
Lo que esto significa realmente es que si haces algo como esto sin allow_soft_placement=True
, TensorFlow generará un error.
with tf.device(''/gpu:0''):
# some op that doesn''t have a GPU implementation
Justo debajo, verá en la línea 281:
// Whether device placements should be logged.
bool log_device_placement = 8;
Cuando log_device_placement=True
, obtendrá una salida detallada de algo como esto:
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
Puede ver dónde se asigna cada operación. Para este caso, todos se asignan a /cpu:0
, pero si se encuentra en una configuración distribuida, habría muchos más dispositivos.
allow_soft_placement
permite la asignación dinámica de memoria de GPU,
log_device_placement
imprime la información del dispositivo