#tensorflow #tensorflow-serving
#tensorflow #обслуживание tensorflow
Вопрос:
Я запускаю распределенную начальную модель 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, как показано на изображении, я полагаю, что эта операция соответствует операции оптимизатора синхронизации реплик, в которой рабочий пытается удалить токен из очереди и выполнить обновление scatter: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/sync_replicas_optimizer.py#L412
Но если это так, эту операцию должен выполнять рабочий, а не сервер параметров. Почему временная шкала указывает, что сервер параметров выполняет это?
Я использую tensorflow 0.11, только для процессора.
Ответ №1:
Похоже, что это правильно и что операция удаления из очереди выполняется на PS. Просто рабочий имеет зависимость от этой операции, что означает, что рабочий, по сути, ожидает успешного удаления из очереди.