AWS Batch
バッチコンピューティングジョブを効率的にスケジューリング・実行するマネージドサービス
何ができるか
AWS Batch は、大量のバッチ処理ジョブを効率的にスケジューリングし、最適なコンピュートリソース (EC2 インスタンスや Fargate) 上で自動実行するフルマネージドサービスです。ジョブの依存関係を定義して実行順序を制御でき、ジョブの量に応じてコンピュートリソースが自動的にスケーリングされます。ジョブキュー、スケジューラー、コンピュート環境の管理をすべて AWS が行います。
どのような場面で使うか
機械学習モデルのトレーニング、大規模なデータ変換・ETL 処理、動画のエンコード・トランスコード、科学技術計算やシミュレーション、金融リスク分析のバッチ処理などに利用されています。数百から数万のジョブを並列実行する大規模バッチ処理に特に適しています。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
身近な例え
工場の生産ラインの管理者に例えるとわかりやすいでしょう。大量の注文 (ジョブ) が入ると、管理者 (Batch) は注文の優先度と依存関係を確認し、必要な数の作業台 (コンピュートリソース) を用意して、効率よく作業を割り振ります。注文が減れば作業台を片付け、無駄なコストを抑えます。
AWS Batch とは
AWS Batch は、バッチ処理のジョブ管理とリソース管理を自動化するサービスです。バッチ処理とは、大量のデータやタスクをまとめて処理する方式のことです。従来、バッチ処理を実行するにはジョブスケジューラーの構築、サーバーの管理、キャパシティの見積もりが必要でした。AWS Batch はこれらをすべて自動化し、開発者はジョブの定義に集中できます。
ジョブの定義と実行
AWS Batch のジョブは Docker コンテナとして定義します。ジョブ定義でコンテナイメージ、CPU・メモリの要件、環境変数などを指定します。ジョブをジョブキューに投入すると、Batch のスケジューラーが優先度と依存関係に基づいて実行順序を決定します。ジョブ間の依存関係を設定すれば、前のジョブが完了してから次のジョブを実行する、といったワークフローも構築できます。
コンピュート環境
AWS Batch は、ジョブの実行に必要なコンピュートリソースを自動的に管理します。マネージド型コンピュート環境を使えば、ジョブの量に応じて EC2 インスタンスや Fargate タスクが自動的にスケーリングされます。スポットインスタンスを活用すれば、オンデマンド料金の最大 90% 割引でジョブを実行でき、大規模バッチ処理のコストを大幅に削減できます。
はじめかた
Batch コンソールでコンピュート環境を作成し、Fargate または EC2 を選択します。ジョブキューを作成してコンピュート環境と紐づけ、ジョブ定義でコンテナイメージと必要なリソースを指定します。「ジョブの送信」からジョブを投入すると、自動的にリソースが確保されてジョブが実行されます。まずは Fargate タイプで小さなジョブから試すのがおすすめです。
注意点
- AWS Batch 自体は無料で、実際にジョブを実行する EC2 インスタンスや Fargate タスクの料金のみが発生する
- スポットインスタンスを使用する場合、中断される可能性があるため、ジョブにチェックポイント機能を実装しておくと安全
- Fargate タイプは管理が簡単だが、EC2 タイプに比べて GPU インスタンスの選択肢やカスタマイズ性が限定される
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。