0

MLエンジンの実験で分散テンソルフロー実験でこのtutorialを完了しました。config.yamlファイルで使用するSTANDARD_1層の代わりに独自のカスタム層を定義しようとしています。 tf.estimator.Estimator APIを使用している場合は、任意のサイズのカスタム層を作成するために追加のコード変更が必要ですか?たとえば、10個のワーカーノードに10,000バッチを配布すると、各ノードは約1,000バッチで動作します。これは、以下のconfig.yamlファイルがカスタム分散MLエンジン実験に必要なコード変更

trainingInput: 
    scaleTier: CUSTOM 
    masterType: complex_model_m 
    workerType: complex_model_m 
    parameterServerType: complex_model_m 
    workerCount: 10 
    parameterServerCount: 4 

ことが可能になることをお勧めこのカスタム設定を使用できるようにmnistのチュートリアルに必要なコードの変更はありますか?チュートリアルで示唆されているように、10人の作業者にX個のバッチを配布することは可能でしょうか?私は他のMLエンジンのサンプルの一部の周りに突いとreddit_tftは、分散訓練を使用することがわかったが、彼らは彼らのトレーナーのパッケージ内runconfig.cluster_spec独自に定義したように見える。彼らはまた、見積もりの​​APIを使用しているにもかかわらずtask.py。それで、追加の設定が必要ですか?私の現在の理解は、Estimator APIを使用する場合(独自の定義されたモデル内でも)、追加の変更を加える必要はないということです。

config.yamlでGPUを使用するように指定している場合、この変更はありますか?このarticleは、Estimator APIのために提案しています。ClusterSpecが正しく構成されている限り、コードの変更は必要ありません。クラスタがCPUとGPUを混在させている場合は、psジョブ名をCPUに割り当て、ワーカージョブ名をGPUに割り当てます。 "しかし、config.yamlはパラメータサーバとワーカーのマシンタイプを特定しているので、ML-Engineではconfig.yamlファイルに基づいてClusterSpecが適切に設定されることを期待しています。しかし、私は、GPUを利用するために必要な変更がないことを確認するml-engineのドキュメントを見つけることができません。

異なる構成の使用を識別するためのいずれかの方法がある場合は最後に、ML-エンジン内の私は疑問に思って? 「10個のワーカーノードに10,000バッチを配布する場合、各ノードは約1,000バッチで動作します。追加のワーカーの使用はほぼ線形であることを示唆していますが、より多くのパラメータサーバが必要かどうかを判断する方法についての直感はありません。十分な数のパラメータサーバがあるかどうかを判断するには、クラウドダッシュボードまたはテンソルボード内のいずれかをチェックできますか?

答えて

1

は、任意のサイズのカスタム層を作成するために必要な追加のコード変更ですか?

いいえ。異なる数またはタイプの作業者で動作させるためにMNISTサンプルに変更を加える必要はありません。 CloudMLエンジンでtf.estimator.Estimatorを使用するには、プログラムでlearn_runner.runを呼び出し、サンプルにexemplifiedと入力する必要があります。これを行うと、フレームワークはTF_CONFIG環境変数を読み込み、RunConfigオブジェクトにClusterSpecなどの関連情報を設定します。パラメータサーバーノードで自動的に正しいことが実行され、提供された見積もりツールを使用してトレーニングと評価が開始されます。

ほとんどの魔法は、tf.estimator.Estimatorが正しく動作するデバイスセッターを自動的に使用するために発生します。そのデバイスセッターは、コンストラクターがデフォルトでTF_CONFIGを使用してその魔法を実行する(例えばhereRunConfigオブジェクトのクラスター情報を使用します。デバイスセッターが使用されている場所は、hereです。

これはすべて、労働者を追加/削除したり、そのタイプを変更したりするだけで、あなたのconfig.yamlを変更できることを意味します。

カスタムmodel_fnを使用するサンプルコードについては、census/customestimatorの例を参照してください。

これは、ワーカーを追加すると効果的なバッチサイズが増えていることに注意してください(これはtf.estimatorを使用しているかどうかに関係なく適用されます)。つまり、batch_sizeが50で、10人の従業員を使用していた場合、有効なバッチサイズが10 * 50 = 500になるように、各従業員が50のバッチを処理していることを意味します。次に、従業員の数を20人に増やすと、有効なバッチサイズは20 * 50 = 1000になります。あなたはそれに応じてあなたの学習率を下げる必要があるかもしれないことが分かります(線形は一般的にうまくいくようです; ref)。

私は他のMLエンジンのサンプルの一部の周りつついと reddit_tftは、分散訓練を使用することがわかったが、彼らは彼らのトレーナーパッケージ内 自分のrunco​​nfig.cluster_spec定義されているように表示されます。彼らはまたあるけれども task.pyevenをEstimator APIを使用します。そこで、追加の設定が必要な場合は ですか?

追加の設定は必要ありません。 reddit_tftサンプルではRunConfigがインスタンス化されますが、RunConfigのコンストラクタでは、TF_CONFIGを使用してインスタンス化時に明示的に設定されていないプロパティが取得されます。そしてそれは、いくつのパラメータサーバとそこにいる作業者がどれだけあるか把握するための便宜のためにのみです。

config.yamlでGPUを使用するように指定している場合、これは変更されますか?

あなたはおそらく、手動でGPUにOPSを割り当てるために必要とする以外に、GPUを搭載したtf.estimator.Estimatorを使用するために何かを変更する必要はありません(それがCloudMLエンジンに固有ではありません)。詳細はthis articleを参照してください。私はその文書を明確にすることに目を向けます。

+0

私は、MNISTの例でコードを変更する必要はないことを理解しています。しかし、 'tf.estimator.Estimator'を使って自分のmodel_fnを定義するとどうなりますか?あなたの応答は 'tf.estimator'を参照し続けますが、これはすべて私の質問のようにtf.estimator.Estimatorにも当てはまるかどうかは分かりません。彼らのドキュメントには、 "分散バージョン作業を行う主な変更点はTF_CONFIG環境変数の使用です。環境変数はgcloudを使用して生成され、ClusterSpecを作成するために解析されます。"それは変化が必要であることを示唆しているようです。 – reese0106

+0

投稿をtf.estimator.Estimatorを参照するように更新しました。また、デバイスセッターについての情報も追加されました。なぜなら、これは魔法を実行するもので、RunConfigのコンシューマーであり、これはTF_CONFIG変数を解析するものです。 – rhaertel80

関連する問題