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)
ワーカー マシンによって生成されたタイムラインを表示すると、次のように表示されます: ワーカー マシンのタイムライン トレース
右側の 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
ただし、その場合、パラメーター サーバーではなく、ワーカーがこの操作を実行する必要があります。パラメータサーバーがこれを実行しているとタイムラインに表示されるのはなぜですか?
CPUのみでtensorflow 0.11を使用しています。