Я запускаю распределенную начальную модель tensorflow на кластере машин AWS ubuntu и вывожу трассировку временной шкалы через
# Track statistics of the run using Timeline
run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()
# Run
loss_value, step = sess.run([train_op, global_step], options=run_options, run_metadata=run_metadata)
# Create timeline and write it to a json file
tl = timeline.Timeline(run_metadata.step_stats)
ctf = tl.generate_chrome_trace_format()
with open('timeline%d.json' % FLAGS.task_id, 'w') as f:
f.write(ctf)
Когда я просматриваю временную шкалу, сгенерированную рабочей машиной, я вижу следующее: Трассировка временной шкалы для рабочей машины
Обратите внимание на операцию QueueDequeue справа, которая, как указано на временной шкале, является частью /job:ps/replica:0/task:0/cpu:0, сервера параметров.
Поскольку ScatterUpdate находится сразу после QueueDequeue, как показано на изображении, я считаю, что эта операция соответствует операции оптимизатора реплик синхронизации, когда рабочий процесс пытается удалить токен из очереди и выполнить обновление разброса: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/sync_replicas_optimizer.py#L412
Но если это так, то эту операцию должен выполнять работник, а не сервер параметров. Почему временная шкала говорит, что сервер параметров выполняет это?
Я использую tensorflow 0.11, только процессор.