2016-11-10 10 views
0

私はコンピュータクラスタ上でモデルを訓練するために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."

+0

表示されているエラーメッセージを投稿できますか? – rhaertel80

+0

'sess.run(eval_summary)'を使わなければならないかもしれません。現時点では、スーパーバイザーの作成時にサマリー・ライターが初期化されている必要があります。 'summary_writer = tf.train.Supervisor.USE_DEFAULT'を追加して、それが何か変わるかどうか確認してください。 – drpng

答えて

1

私の推測では、各作業者ごとに別々のサマリーライターを作成して、直接サマリーを直接書き出すことです。

私は、あなたが評価プロセスにスーパーバイザを使用しないと思われます。最新のチェックポイントでevalを実行し、独立した要約を書き出すために、各ワーカーにセッションをロードするだけです。

+0

ありがとう、それは私がしたことを正確にしています。私はちょうど同期の世話をする必要がありました:モデルはまだ保存されていないかもしれません....マスターとワーカーの間でコミュニケーションの方法はありますか?例えば、 "global_step"は共有変数ですか? – MathiasOrtner

+0

いいえ、すぐに通信する方法はありません... gcsオブジェクトのようなものを使ってステータスを伝えることができます。例:evalワーカーが参照するチェックポイントのマニフェストファイル。 –

関連する問題