为什么分布式tensorflow时间轴跟踪将QueueDequeue操作标记为PS操作?

时间:2016-10-03 22:55:08

标签: tensorflow tensorflow-serving

我在AWS ubuntu机器集群上运行tensorflow分布式初始模型,并通过

输出时间线跟踪
# 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)

当我查看工作机器生成的时间轴时,我看到: Timeline Trace for Worker Machine

注意右边的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,仅限CPU。

1 个答案:

答案 0 :(得分:0)

似乎这是正确的,并且在PS上执行出队操作。只是工人依赖于这个操作,这意味着工人基本上等待成功出列。