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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

マルチノードの並列ジョブを使用して、複数の Amazon EC2インスタンスにまたがる単一のジョブを実行できます。マルチノードの並列ジョブ (ギャングスケジューリングとも呼ばれます) AWS Batch を使用すると、Amazon EC2リソースを直接起動、設定、管理することなく、大規模で高性能なコンピューティングアプリケーションと分散GPUモデルトレーニングを実行できます。 AWS Batch マルチノードの並列ジョブは、IP ベースのノード間通信をサポートする任意のフレームワークと互換性があります。例としてはMXNet、Apache TensorFlow、、Caffe2、Message Passing Interface () などがありますMPI。

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

マルチノードの並列ジョブは、シングルテナントです。つまり、各 Amazon EC2インスタンスで実行されるジョブコンテナは 1 つだけです。

最終的なジョブステータス (SUCCEEDED あるいは FAILED) は、主要なノードの最終的なジョブステータスによって決定されます。マルチノードの並列ジョブのステータスを取得するには、ジョブの送信時に返されるジョブ ID を使用して、ジョブを記述できます。子ノードの詳細が必要な場合には、各子ノードごとに個別に記述する必要があります。ノードは #N 表記を使用して対処されます (0 から開始)。例えば、ジョブの 2 番目のノードの詳細にアクセスするには、aws_batch_job_idAPI オペレーションを使用した AWS Batch DescribeJobs #1。マルチノードの並列ジョブの 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

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

ノードグループ

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

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

あるいは、ジョブ内のすべてのノードで 1つのノードグループを使用することもできます。さらに、アプリケーションコードではメインノードや子ノードなどのノードロールを区別できます。そのためには、AWS_BATCH_JOB_MAIN_NODE_INDEX 環境変数を AWS_BATCH_JOB_NODE_INDEX の独自の値と比較します。単一のジョブでは最大で 1000 までのノードを使用できます。これは、Amazon ECSクラスター内のインスタンスのデフォルトの制限です。この制限の引き上げをリクエストすることができます

注記

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

ジョブのライフサイクル

マルチノードの並列ジョブを送信すると、ジョブは SUBMITTED ステータスになります。その後、ジョブは、ジョブの依存関係がすべて終了するのを待ちます。ジョブも RUNNABLE ステータスに移行します。最後に、 はジョブの実行に必要なインスタンス容量を AWS Batch プロビジョニングし、これらのインスタンスを起動します。

各マルチノードの並列ジョブには主要なノードが含まれます。メインノードは、 が AWS Batch モニタリングして、送信されたマルチノードジョブの結果を決定する単一のサブタスクです。主要なノードと最初に起動され、STARTING ステータスに移行します。attemptDurationSeconds パラメータで指定されたタイムアウト値は、ジョブ全体に適用され、ノードには適用されません。

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

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

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

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

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

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

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

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

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

  • awsvpc ネットワークモードでは、マルチノードの並列ジョブ用にパブリック IP アドレスを使用する Elastic Network Interface を用意していません。インターネットにアクセスするには、コンピューティングリソースをNATゲートウェイを使用するように設定されたプライベートサブネットで起動する必要があります。詳細については、「Amazon VPCユーザーガイドNAT」の「ゲートウェイ」を参照してください。ノード間通信では、ノードのプライベート IP アドレスまたはDNSホスト名を使用する必要があります。パブリックサブネット内のコンピューティングリソースで実行されるマルチノードの並列ジョブには、アウトバウンドのネットワークアクセスがありません。プライベートサブネットとNATゲートウェイVPCを使用して を作成するには、「」を参照してください仮想プライベートクラウド (VPC) の作成

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

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

  • Amazon EC2インスタンスのクォータには、ジョブの実行に必要なインスタンスの数が含まれます。たとえば、30 個のインスタンスを必要とするジョブで、リージョンではアカウントが 20 個のインスタンスのみを実行できる場合、このジョブは ステータスで停止します。そうなると、RUNNABLE ジョブは、ステータスのままになります。

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