トレーニング ジョブを実行すると、AI Platform Training によって、ジョブの一部である各仮想マシン(VM)インスタンスに TF_CONFIG
という環境変数が設定されます。各 VM で実行されるトレーニング コードは、TF_CONFIG
環境変数を使用して、実行中の VM のトレーニング ジョブとロールの詳細にアクセスできます。
TensorFlow は、分散トレーニングを容易にするために TF_CONFIG
環境変数を使用しますが、トレーニング コードで直接アクセスする必要はありません。このドキュメントでは、分散 TensorFlow ジョブおよびハイパーパラメータ調整ジョブにおける TF_CONFIG
環境変数とその使用方法について説明します。
TF_CONFIG
の形式
AI Platform Training では、TensorFlow が分散トレーニングに要求する仕様に合わせて、すべてのトレーニング ジョブのすべての VM で TF_CONFIG
環境変数を設定します。ただし、AI Platform Training では、TF_CONFIG
環境変数に TensorFlow で必要とするもの以外のフィールドも追加して設定します。
TF_CONFIG
環境変数は、次の形式の JSON 文字列です。
TF_CONFIG フィールド |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
cluster |
TensorFlow クラスタの説明。1 つ以上のタスク名( これは
|
||||||||||
task |
この環境変数が設定されている VM のタスクの説明。特定のトレーニング ジョブでは、この辞書は VM によって違います。この情報を使用して、分散トレーニング ジョブの各 VM で実行するコードをカスタマイズできます。また、この情報を使用して、ハイパーパラメータ調整ジョブのさまざまなトライアルを実行する際に、トレーニング コードの動作を変更することもできます。 この辞書には、次の Key-Value ペアが含まれています。
|
||||||||||
job |
現在のトレーニング ジョブを作成するために提供した |
||||||||||
environment |
文字 |
カスタム コンテナのトレーニング ジョブの場合、AI Platform Training では CLUSTER_SPEC
という環境変数を追加で設定します。この環境変数の形式は TF_CONFIG
に似ていますが、重要な違いがいくつかあります。詳しくは、CLUSTER_SPEC
環境変数をご覧ください。
例
次のサンプルコードでは、TF_CONFIG
環境変数をトレーニング ログに出力します。
import json
import os
tf_config_str = os.environ.get('TF_CONFIG')
tf_config_dict = json.loads(tf_config_str)
# Convert back to string just for pretty printing
print(json.dumps(tf_config_dict, indent=2))
ハイパーパラメータ調整ジョブがランタイム バージョン 2.1 以降で、マスター ワーカー、2 つのワーカー、パラメータ サーバーを使用している場合、このコードでは最初のハイパーパラメータ調整トライアル中に、ワーカーのいずれかで次のログを出力します。出力例では、簡潔にするために job
フィールドを非表示にし、一部の ID を汎用値に置き換えています。
{
"cluster": {
"chief": [
"cmle-training-chief-[ID_STRING_1]-0:2222"
],
"ps": [
"cmle-training-ps-[ID_STRING_1]-0:2222"
],
"worker": [
"cmle-training-worker-[ID_STRING_1]-0:2222",
"cmle-training-worker-[ID_STRING_1]-1:2222"
]
},
"environment": "cloud",
"job": {
...
},
"task": {
"cloud": "[ID_STRING_2]",
"index": 0,
"trial": "1",
"type": "worker"
}
}
chief
対 master
AI Platform Training のマスター ワーカー VM は、TensorFlow の chief
タスクタイプに対応しています。TensorFlow では chief
として機能する worker
タスクを指定できますが、AI Platform Training では常に chief
が明示的に指定されます。
master
は TensorFlow の非推奨のタスクタイプです。master
は同様のロールを chief
として実行したタスクを表していましたが、一部の構成では、evaluator
としても機能しました。TensorFlow 2 では、master
タスクを含む TF_CONFIG
環境変数をサポートしていません。
次のいずれかに該当する場合、AI Platform Training は TF_CONFIG
環境変数の cluster
フィールドと task
フィールドで chief
を使用します。
- ランタイム バージョン 2.1 以降を使用するトレーニング ジョブを実行している。
- 1 つ以上の評価ツールを使用するようにトレーニング ジョブを構成している。つまり、ジョブの
trainingInput.evaluatorCount
を1
以上に設定している。 - ジョブではカスタム コンテナを使用しており、ジョブの
trainingInput.useChiefInTfConfig
をtrue
に設定している。
それ以外の場合は互換性を保つために、AI Platform Training では chief
の代わりに非推奨の master
タスクタイプを使用します。
TF_CONFIG
を使用するタイミング
前のセクションで説明したように、トレーニング コードで TF_CONFIG
環境変数を直接操作する必要はなさそうです。TF_CONFIG
環境変数にアクセスするのは、TensorFlow の分散戦略と AI Platform Training の標準のハイパーパラメータ調整ワークフロー(両方とも以降のセクションで説明します)がジョブで機能しない場合のみです。
分散トレーニング
AI Platform Training では、TensorFlow が分散トレーニングに必要とする仕様を拡張するように、TF_CONFIG
環境変数を設定します。
TensorFlow を使用して分散トレーニングを実行するには、tf.distribute.Strategy
API を使用します。特に、Keras API を MultiWorkerMirroredStrategy
または ParameterServerStrategy
(ジョブのパラメータ サーバーを指定する場合)と組み合わせて使用することをおすすめします。ただし、TensorFlow は現在、これらの戦略に対して試験運用版のサポートのみを提供していることに注意してください。
これらの分散戦略では、環境変数 TF_CONFIG
を使用して、トレーニング ジョブの各 VM にロールを割り当て、VM 間の通信を容易にします。TensorFlow が環境変数 TF_CONFIG
を処理するため、トレーニング コードで直接アクセスする必要はありません。
環境変数 TF_CONFIG
を直接解析するのは、トレーニング ジョブを実行する各 VM の動作をカスタマイズする場合のみです。
ハイパーパラメータ調整
ハイパーパラメータ調整ジョブを実行すると、AI Platform Training から各トライアルのトレーニング コードにさまざまな引数が渡されます。トレーニング コードでは、現在どのトライアルを実行中かということを必ずしも認識する必要はありません。さらに、AI Platform Training には、ハイパーパラメータ調整ジョブの進行状況をモニタリングするためのツールが用意されています。
必要に応じて、コードで TF_CONFIG
環境変数の task
フィールドの trial
フィールドから、現在のトライアル番号を読み取ることができます。
次のステップ
- Keras を使用したマルチワーカー トレーニングについての TensorFlow ドキュメントのチュートリアルで学習する。
- AI Platform Training でカスタム コンテナを使用した分散トレーニングについて学習する。
- トレーニング ジョブのハイパーパラメータ調整を実装する方法を学習する。