私はコンピュータクラスタ上でモデルを訓練するためにgoogle cloud ml distributedサンプルを使用しています。入力と出力(つまり、rfrecords、checkpoints、tfevents)はすべてgs://(Googleストレージ)分散型テンソルフローでは、従業員から要約に書き込む方法
分散サンプルと同様に、私は最後に呼び出される評価ステップを使用し、結果はクラウドML内でパラメータのハイパーチューニングを使用するため、または独自のツールスタックを使用するための要約。
大きなバッチのデータに対して単一の評価を実行するのではなく、パフォーマンス基準に関する統計を取得するために、いくつかの評価ステップを実行しています。単一の値に限定したくないためです。私はパフォーマンスの間隔に関する情報を得たいと思っています。特に、パフォーマンスのばらつきは私にとって重要です。むしろ平均的なパフォーマンスは低いが、最悪のケースではモデルを選ぶだろう。
したがって、いくつかの評価ステップを実行します。私がしたいのは、今ではマスターが評価しているため、これらの評価ステップを並列化することです。大規模なクラスタを使用する場合は、非効率の原因となり、タスクワーカーも評価します。私は要約ライターを呼び出す研修の終わりに
self.sv = tf.train.Supervisor(
graph,
is_chief=self.is_master,
logdir=train_dir(self.args.output_path),
init_op=init_op,
saver=self.saver,
# Write summary_ops by hand.
summary_op=None,
global_step=self.tensors.global_step,
# No saving; we do it manually in order to easily evaluate immediately
# afterwards.
save_model_secs=0)
:
基本的には、監督者は次のように作成されます。 :
# only on master, this is what I want to remove
if self.is_master and not self.should_stop:
# I want to have an idea of statistics of accuracy
# not just the mean, hence I run on 10 batches
for i in range(10):
self.global_step += 1
# I call an evaluator, and extract the accuracy
evaluation_values = self.evaluator.evaluate()
accuracy_value = self.model.accuracy_value(evaluation_values)
# now I dump the accuracy, ready to use within hptune
eval_summary = tf.Summary(value=[
tf.Summary.Value(
tag='training/hptuning/metric', simple_value=accuracy_value)
])
self.sv.summary_computed(session, eval_summary, self.global_step)
私はワーカーからも要約を書き込もうとしましたが、エラーが発生しました。基本的に要約はマスターからのみ作成できます。回避策には簡単な方法はありますか?エラーは次のとおりです。"Writing a summary requires a summary writer."
表示されているエラーメッセージを投稿できますか? – rhaertel80
'sess.run(eval_summary)'を使わなければならないかもしれません。現時点では、スーパーバイザーの作成時にサマリー・ライターが初期化されている必要があります。 'summary_writer = tf.train.Supervisor.USE_DEFAULT'を追加して、それが何か変わるかどうか確認してください。 – drpng