コンピューターのクラスターでモデルをトレーニングするために、google cloud ml 分散サンプルを使用しています。入力と出力 (rfrecords、checkpoints、tfevents) はすべて gs:// (Google ストレージ) にあります。
配布されたサンプルと同様に、最後に呼び出される評価ステップを使用し、Cloud 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."