マルチノードの並列ジョブ - AWS Batch

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

マルチノードの並列ジョブ

マルチノードの並列ジョブでは、複数の Amazon EC2 インスタンスにまたがる単一のジョブを実行できます。AWS Batch マルチパートの並列ジョブでは、Amazon EC2 リソースを直接起動、設定、管理する必要なく、ラージスケールで密結合された高パフォーマンスのコンピューティングアプリケーションよ分散された GPU モデルトレーニングを実行できます。AWS Batch マルチノードの並列ジョブは、IP ベースのノード間通信をサポートするフレームワークのすべて (Apache MXNet、TensorFlow, Caffe2 や Message Passing Interface (MPI) など) と互換性があります。

マルチノードの並行ジョブは、単一のジョブとして送信されます。ただし、ジョブ定義 (あるいは、ジョブ送信ノードの上書き) は、ジョブに作成するノードの数および作成するノードグループを指定します。各マルチノードの並列ジョブには主要なノードが含まれ、まずこれが起動されます。主要なノードが確立したら、子ノードが起動されて開始します。主要なノードが終了すると、ジョブは完了したと見なされ、子ノードは停止します。詳細については、「ノードグループ」を参照してください。

マルチノードの並列ジョブはシングルテナントです。つまり、各 Amazon EC2 インスタンスごとに単一のジョブコンテナのみが実行されます。

最終的なジョブステータス (SUCCEEDED あるいは FAILED) は、主要なノードの最終的なジョブステータスによって決定されます。マルチノードの並列ジョブのステータスを取得するには、ジョブの送信時に返されるジョブ ID を使用して、ジョブを記述できます。子ノードの詳細が必要な場合には、各子ノードごとに個別に記述する必要があります。ノードは #N 表記を使用して対処されます。たとえば、ジョブの 2 番目のノードの詳細にアクセスするには、AWS Batch DescribeJobs API アクションを使用して、aws_batch_job_id#2 と記述する必要があります。マルチノードの並列ジョブの startedstoppedAtstatusReasonexit 情報は、主要なノードから入力されます。

ジョブの再試行を指定すると、主要なノードの失敗によって別の試行がトリガーされますが、子ノードの失敗ではトリガーされません。マルチノードの並列ジョブの新しい試行ごとに、関連付けられた子ノードに対応する試行が更新されます。

AWS Batch でマルチノードの並列ジョブを実行するには、アプリケーションコードに分散された通信に必要なフレームワークとライブラリが含まれている必要があります。

環境変数

ランタイム時に、すべての AWS Batch ジョブが受信する標準的な環境変数に加えて、各ノードは、マルチノードの並列ジョブに特定の以下の環境変数で設定されます。

AWS_BATCH_JOB_MAIN_NODE_INDEX

この変数は、ジョブの主要なノードのインデックス番号に設定されます。アプリケーションコードは、AWS_BATCH_JOB_MAIN_NODE_INDEXAWS_BATCH_JOB_NODE_INDEX を単一ノードで比較して、これが主要なノードであるかを確認できます。

AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS

この変数は、マルチノードの並列ジョブの子ノードのみに設定されます (主要なノードには存在しません)。この変数は、ジョブの主要なノードのプライベート IPv4 アドレスに設定されます。子ノードのアプリケーションコードは、このアドレスを使用して主要なノードと通信できます。

AWS_BATCH_JOB_NODE_INDEX

この変数は、ノードのノードインデックス番号に設定されます。ノードインデックスは 0 で始まり、各ノードは一意のインデックス番号を受け取ります。たとえば、10 の子を持つマルチノードの並列ジョブのインデックス値は 0 〜 9 です。

AWS_BATCH_JOB_NUM_NODES

この変数は、マルチノードの並列ジョブにリクエストしたノードの数に設定されます。

ノードグループ

ノードグループとは、同じコンテナプロパティを共有するジョブノードの同一グループです。AWS Batch では、ジョブごとに 5 つまでの個別のノードグループを指定できます。

各グループでは、独自のコンテナイメージ、コマンド、環境変数などを持つことができます。たとえば、主要なノードに単一の c4.xlarge インスタンス、子ノードには 5 つの c4.xlarge インスタンスを必要とするジョブを送信できます。それぞれのノードグループでは、各ジョブで別々のコンテナイメージやコマンドを指定することができます。

また、ジョブのすべてのノードで単一のノードグループを使用でき、AWS_BATCH_JOB_MAIN_NODE_INDEX 環境変数を AWS_BATCH_JOB_NODE_INDEX の独自の値で比較することで、アプリケーションコードではノードロール (主要なノードに対する子ノード) を差別化できます。単一のジョブでは最大で 1000 までのノードを使用できます。これは、Amazon ECS クラスターのインスタンスのデフォルト制限です。この制限はリクエストに応じて増やすことができます。

注記

現在のところ、マルチノードの並列ジョブのすべてのノードグループでは、同じインスタンスタイプを使用する必要があります。

ジョブのライフサイクル

マルチノードの並列ジョブを送信するとき、ジョブは SUBMITTED ステータスを入力し、ジョブの依存関係が終了するまで待機します。次に、ジョブは RUNNABLE ステータスに移行し、AWS Batch はジョブの実行に必要なインスタンスの容量をプロビジョンして、これらのインスタンスを起動します。

各マルチノードの並列ジョブには主要なノードが含まれます。主要なノードとは、送信したマルチノードジョブの結果を決定するために AWS Batch が監視する単一のサブタスクです。主要なノードと最初に起動され、STARTING ステータスに移行します。

主要なノードが RUNNING ステータスに到達すると (ノードのコンテナが実行されてから)、子ノードが起動され、これもまた STARTING ステータスに移行します。子ノードはランダムな順序で始まります。子ノードの起動のタイミングや順序は保証できません。ジョブのすべてのノードが RUNNING ステータスにあること (ノードのコンテナが実行されたあと) を確認するには、アプリケーションコードで AWS Batch API をクエリして主要なノードおよび子ノードの情報を取得するか、あるいはアプリケーションコード内で整合して、分散された処理タスクを開始する前にすべてのノードがオンラインになるまで待機することができます。主要なノードのプライベート IP アドレスは、子ノードごとの AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS 環境変数で利用可能です。アプリケーションコードでは、この情報を各タスク間の整合と通信に使用できます。

個別のノードが存在する場合、これらは終了コードに応じて SUCCEEDED あるいは FAILED に移行します。主要なノードが終了すると、ジョブは完了したと見なされ、すべての子ノードは停止します。子ノードが消失した場合、AWS Batch はこのジョブの他のノードで何らかのアクションも実行しません。ノード数を減らしてジョブを続行しない場合、これをアプリケーションコードに組み来み、ジョブを終了あるいはキャンセルする必要があります。

コンピューティング環境に関する考慮事項

AWS Batch でマルチノードの並列ジョブを実行するためのコンピューティング環境を設定するときに、いくつかの考慮事項があります。

  • マルチノードの並列ジョブをコンピューティング環境に送信する場合、単一のアベイラビリティゾーンでクラスタープレースメントグループを作成して、これをコンピューティングリソースに関連付けることを検討します。これにより、論理的グループ化されたインスタンス上のマルチノードの並列ジョブが、潜在的に高度なネットワークフローにより近くなります。詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「プレースメントグループ」を参照してください。

  • マルチノードの並列ジョブは、スポットインスタンスを使用するコンピューティング環境ではサポートされていません。

  • AWS Batch のマルチノードの並列ジョブは Amazon ECS awsvpc ネットワークモードを使用して、マルチノードの並列ジョブコンテナに Amazon EC2 インスタンスと同じネットワークプロパティを付与します。各マルチノードの並列ジョブコンテナは、独自の Elastic Network Interface、プライマリプライベート IP アドレス、および内部の DNS ホスト名を取得します。ネットワークインターフェイスは、ホストコンピューティングリソースと同じ VPC サブネットで作成されます。コンピューティングリソースに適用されるすべてのセキュリティグループも同じく適用されます。詳細については、『Amazon Elastic Container Service Developer Guide』の「タスクネットワーキングと awsvpc ネットワークモード」を参照してください 。

  • コンピューティング環境には、最大で 5 つまでのセキュリティグループが関連付けられている場合があります。

  • 作成されてコンピューティングリソースにアタッチされた Elastic Network Interface は、手動でデタッチしたり、ユーザーのアカウントを使用して変更することはできません。これは、実行中のジョブに関連付けられている Elastic Network Interface が誤って削除されることを回避するためです。Elastic Network Interface を解放するには、ジョブを終了します。

  • コンピューティング環境には、マルチノードの並列ジョブをサポートするために十分な最大数の vCPU があることが必要です。

  • Amazon EC2 インスタンスの制限は、ジョブを実行するために必要なインスタンスの数を満たしている必要があります。たとえば、30 個のインスタンスを必要とするジョブで、リージョンではアカウントが 20 個のインスタンスのみを実行できる場合、このジョブは RUNNABLE ステータスで停止します。

  • マルチノードの並列ジョブでノードグループにインスタンスタイプを指定する場合、コンピューティング環境がそのインスタンスタイプを起動できることが必要です。