AWS Batch のよくある質問

一般情報

AWS Batch には、一連のバッチ管理機能が含まれています。これらの機能により、デベロッパー、科学者、およびエンジニアは、数十万件におよぶバッチコンピューティングジョブを、AWS で簡単かつ効率的に実行できるようになります。AWS Batch では、コンピューティングリソース (CPU、メモリに最適化されたコンピューティングリソースなど) の最適な数量とタイプが、送信されたバッチジョブの規模と具体的なリソース要件に基づいて、動的にプロビジョニングされます。AWS Batch を使用すると、バッチコンピューティングソフトウェアやサーバークラスターをインストールして管理する必要がなく、結果の分析や問題の解決に集中できます。AWS Batch は、Amazon ECSAmazon EKSAWS Fargate を使用し、スポットインスタンスを活用するオプションで、バッチコンピューティングワークロードを計画、スケジュール、および実行します。

バッチコンピューティングとは、連続したプログラム (「ジョブ」) を、手動での介入なしに 1 台または複数台のコンピュータで実行することです。入力パラメータはスクリプト、コマンドライン引数、制御ファイル、またはジョブ制御言語によりあらかじめ定義しておきます。指定されるバッチジョブは、先行ジョブの完了または特定の入力のアベイラビリティに基づいて決定されるため、複数ジョブのシーケンシングやスケジューリングが重要です。また、インタラクティブな処理には対応できません。

  • ジョブを処理する時間を、より多くのキャパシティまたはより安価なキャパシティが使用可能な時間に移動させることができます。
  • これにより、頻繁な手動による介入や監督で、コンピューティングリソースを使用しない時間が発生することを防ぎます。
  • コンピューティングリソースの使用率を高めることで、効率も高まります。
  • ジョブの優先度付けが可能になり、ビジネスの目的に応じてリソースを割り当てられます。

ECS インフラストラクチャから完全に抽象化された、コンピューティングのプロビジョニングを AWS Batch により処理させたい場合に、Fargate 上でジョブを実行します。インスタンスの特定な構成要素 (特定のプロセッサ、GPU、アーキテクチャ) に対するアクセス、あるいは、非常に大規模なワークロードが必要な場合は、ECS 上でジョブを実行します。コンテナオーケストレーション技術として Kubernetes を選択した場合、EKS との Batch 統合によりバッチワークロードを標準化することができます。

ユースケースにもよりますが、現状では Fargate でのジョブは、EC2 インスタンスやポッドの起動を待つ必要がないため、初期のスケールアウトが実行されるケースでの開始がより高速になります。一方、大規模なワークロードでは、連続して実行されるジョブのためのインスタンスやコンテナイメージが、Batch により再利用されるので、EKS または ECS での処理の方が高速になる場合があります。

EC2 インフラストラクチャから完全に抽象化された、コンピューティングのプロビジョニングを AWS Batch により処理させたい場合に、Fargate 上でジョブを実行します。インスタンスの特定な構成要素 (特定のプロセッサ、GPU、アーキテクチャ) に対するアクセス、あるいは、非常に大規模なワークロードが必要な場合は、EC2 上でジョブを実行します。

EC2 と Fargate のどちらがより速くジョブを開始できるかは、ユースケースごとに異なります。Fargate でのジョブは、EC2 インスタンスの起動を待つ必要がないため、初期のスケールアウトが実行されるケースでの開始がより高速になります。一方、大規模なワークロードでは、連続して実行されるジョブのためのインスタンスやコンテナイメージが、Batch により再利用されるので、EC2 インスタンスでの処理の方が高速になる場合があります。

はい。Fargate CE には、最大数の vCPU を使用するように設定できます。この数は、CE で同時に実行しているすべてのジョブを通じた vCPU の合計数です。Fargate CE 内の vCPU 数が最大値に到達すると、Batch は、キュー内に CE が存在するのであれば (アタッチされた順番どおりに) 、次の CE の上でジョブのスケジュールを開始します。この手段は、Fargate CE に最小限のビジネス要件をいくつか設定し、残りのワークロードを Fargate Spot させるようなケースでは有益です。

最初に Fargate Spot CE を設定した上で Fargate CE を設定すると、Batch による Fargate へのスピルオーバーは、ジョブで使用される vCPU が当該の CE での vCPU の最大数を越えた場合にだけ、実行されるようになります。Fargate Spot が返還されるイベントの中では、vCPU の数は最大にはならず、Batch は、次に続く CE にある Fargate に対し、ジョブを実行するためのリソースを要求しません。

AWS Batch のジョブキューを、Fargate/Fargate Spot CE、EC2、もしくは Spot CE に接続することは許可されていません。

AWS Batch を使用する理由

AWS Batch では、ジョブの実行とコンピューティングリソース管理を処理します。これにより、インフラストラクチャのセットアップや管理を行う代わりに、アプリケーションの開発や結果の分析に集中することができます。AWS でバッチのワークロードを実行することや、AWS に移行することを考えている場合は、AWS Batch の使用をご検討ください。

AWS Batch は、複数のジョブを並行して実行することによりスケールするバッチコンピューティングおよびアプリケーション向けに最適化されています。バッチコンピューティングに適している用途には、深層学習、ゲノム解析、金融リスクモデル、モンテカルロシミュレーション、アニメーションレンダリング、メディアのトランスコーディング、イメージ処理、エンジニアリングシミュレーションなどがあります。

マルチコンテナジョブ

AWS Batch ワークロードを、シミュレーション環境やテスト対象システム (SUT)、メインアプリケーション、テレメトリサイドカーなど、論理的に異なる要素のセットとしてモデル化する場合は、マルチコンテナジョブ機能を使用する必要があります。この機能を使用すると、運用が簡素化され、アーキテクチャのベストプラクティスに従うことが容易になり、シミュレーションをシステム中の本番システムのマルチコンテナアーキテクチャに合わせることができます。SUT とシミュレーション環境用に別々のコンテナを実行したい場合でも、補助的なサイドカーを追加する必要がある場合でも、すべてのワークロード要素をモノリシックコンテナにまとめて、コードを変更するたびに再構築する必要はもうありません。その結果、DevOps を簡素化し、コンテナを小さく高速にダウンロードできるようにし、作業の並列化を促進できます。

AWS Batch は、1 つのノードの通常ジョブ、配列ジョブ、マルチノード並列 (MNP) ジョブを含む、すべてのジョブタイプでの複数のコンテナの実行をサポートしています。

マルチコンテナジョブは、Amazon ECS、Amazon EC2、AWS Fargate、Amazon EKS を含むすべての AWS Batch コンピューティング環境で実行できます。

機能

AWS Batch はコンピューティング環境とジョブキューを管理し、Amazon ECSAmazon EKSAWS Fargate を使用して、任意のスケールの数千ものジョブを、スポットリソースまたはオンデマンドリソースから選択して、簡単に実行できます。お客様は、バッチジョブを定義してキューに送信するだけです。これに対して、AWS Batch は、ジョブの実行場所を選択し、必要に応じてさらに AWS キャパシティを起動します。ジョブの進捗状況は、AWS Batch で慎重にモニタリングされます。不要になったキャパシティは、AWS Batch で削除されます。AWS Batch では、パイプラインやワークフローの一部であるジョブを送信する機能も提供されます。これにより、ジョブ間に存在する相互依存性をジョブの送信時に示すことができます。

AWS Batch では、Docker コンテナとして実行できるあらゆるジョブをサポートしています。ジョブで、メモリ要件と vCPU の数を指定します。 

AWS Batch でのコンピューティングリソースとは、EC2 インスタンス、もしくは、AWS Fargate のコンピューティングリソースのことです。

AWS Batch でのコンピューティング環境とは、ジョブが実行されるコンピューティングリソースの集合です。AWS Batch では、AWS でプロビジョニングおよび管理される Managed Compute Environments と、お客様で管理される Unmanaged Compute Environments の 2 つのタイプのコンピューティング環境をサポートしています。Unmanaged Compute Environments では、Dedicated Hosts、大規模なストレージ設定、および Amazon EFS などの専用リソースを活用するしくみを提供しています。

ジョブ定義に、実行するジョブ、パラメータ、環境変数、コンピューティング要件、およびその他のジョブの実行を最適化するために使用する情報を記述します。ジョブ定義は、ジョブの送信前に定義し、他のジョブと共有することが可能です。

AWS Batch では、コンテナジョブを実行するために Amazon ECS を使用します。そのため、ECS Agent を利用する AWS Batch コンピューティング環境内のコンピューティングリソースにインストールする必要があります。ECS Agent は、Managed Compute Environments にはプレインストールされています。

AWS Batch コンピューティング環境は、EC2 スポットインスタンスで構成することが可能です。マネージド型コンピューティング環境を作成するときは、EC2 スポットインスタンスを使用することを簡単に指定し、支払いを希望するオンデマンド料金の割合を指定すると、残りは AWS Batch によって処理されます。非マネージド型コンピューティング環境にも、起動するスポットインスタンスを含めることができます。EC2 スポットフリートで起動されたスポットインスタンスも含まれます。

料金

AWS Batch に対する追加料金はありません。バッチジョブを保存したり実行したりするために作成した AWS リソース (EC2 インスタンス、AWS Fargate など) に対してのみ料金が発生します。

GPU スケジューリング

はい。Batch を使用して、ジョブがジョブ定義入力変数として必要とするアクセラレーターの数とタイプを、現在の vCPU とメモリのオプションと併せて指定できます。AWS Batch は 必要なアクセラレーターに基づいてジョブに適切なインスタンスをスケールアップし、各ジョブのニーズに合わせてアクセラレーターを隔離します。そのため、アクセラレーターには適切なコンテナのみがアクセスできます。

Batch でアクセラレータを使用すると、アクセラレーターのニーズに従い、ジョブのスケジューリングやプロビジョニングを動的に行うことができます。Batch により、ジョブに対し適切な数のアクセラレーターを確実に予約しておくことができます。Batch により、EC2 高速インスタンスは必要な場合にスケールアップされ、終わったらスケールダウンされるので、アプリケーションに集中できます。Batch は EC2 スポットとネイティブに統合されており、高速インスタンスを使用する場合、高速化されたジョブで最大 90% の節約が可能です。

現在は、P および G 高速インスタンス上の GPU を使用できます。

アクセラレータの数と種類は、ジョブ定義で指定できます。アクセラレーターの種類 (例: GPU – 現在唯一サポートされているアクセラレーター) とジョブに必要なその種類のアクセラレーターの数を記述することで、アクセラレーターを指定します。指定したアクセラレーターの種類は、コンピューティング環境で指定したインスタンスタイプの 1 つに存在しているものでなければなりません。例えば、ジョブで GPU が 2 つ必要な場合は、必ずコンピューティング環境に P インスタンスを指定しておきます。

From the API:
{
"containerProperties": {
"vcpus": 1,
"image": "nvidia/cuda:9.0-base",
"memory": 2048,
"resourceRequirements" : [
{
"type" : "GPU",
"value" : "1"
}
],

vCPU や メモリ要件と同様、アクセラレータ―の数と種類はジョブ送信時に上書きできます。

現在の動作では、可能であれば、Batch は、アクセラレーターを必要としないジョブを高速インスタンスにスケジューリングしないようにします。これは、実行時間の長いジョブがアクセラレーターを活用することなく高速インスタンスを占有し、コストが増える事態を避けるためです。稀なケースですが、スポット料金でタイプとして高速インスタンスが許容されている場合、Batch は、ジョブがアクセラレーターを必要とするかどうかに関わらず、ジョブを実行するには高速インスタンスが最も低価格な方法と判断する可能性があります。

Batch では高速インスタンスしか起動できないコンピューティング環境にジョブを送信する場合、Batch はジョブを、アクセラレーターの必要性に関わらず、そのインスタンスで実行します。

今後、ECS GPU 最適化 AMI では、デフォルトで P タイプのインスタンスを起動します。この AMI には、GPU ベースアプリケーションの実行に必要なライブラリとランタイムが含まれます。コンピューティング環境の作成時、いつでも必要に応じてカスタム AMI を指定できます。

開始方法

ドキュメント内の入門ガイドに従って使用を開始します。

使用を開始するために、手動でコンピューティングリソースを起動する必要はありません。最初のジョブを送信する際、AWS Batch ウェブコンソールで、最初のコンピューティング環境およびジョブのキューの作成プロセスを手順をおって行うことができます。コンピューティング環境内のリソースは、追加のジョブの実行準備ができるとスケールアップし、実行可能なジョブが少なくなるとスケールダウンします。