Azure Batchについて調査してみた
はじめに
来期からAzure Batchに触れることが増えそうなので、技術調査をしました。
Azure Batchは、大規模な並列処理や高性能計算(HPC)のバッチジョブをAzureで効率的に実行するためのサービスです。Azure Batchは、コンピューティングノード(仮想マシン)のプールを作成・管理し、実行したいアプリケーションをインストールし、ノード上でジョブをスケジュールします。クラスターやジョブスケジューラーのソフトウェアをインストール・管理・スケールする必要はありません。代わりに、Batch APIやツール、コマンドラインスクリプト、Azureポータルを使って、ジョブを設定・管理・モニタリングできます。
開発者は、Batchをプラットフォームサービスとして使って、大規模な実行が必要なSaaSアプリケーションやクライアントアプリを構築できます。例えば、金融サービス会社のためにモンテカルロ法によるリスクシミュレーションを実行するサービスや、多数の画像を処理するサービスをBatchで構築できます。Batchを使うために追加料金はかかりません。仮想マシンやストレージ、ネットワークなど、消費した基盤リソース分だけ支払うことになります。AzureでのHPCソリューションのオプションとBatchとの比較については、Azure でのハイ パフォーマンス コンピューティング (HPC) を参照してください。
メリット
Azure Batchのメリットとしては、以下のような点が挙げられます。
- 本質的に並列(embarrassingly parallel)なワークロードに適しています。これらのワークロードでは、アプリケーションが独立して実行でき、それぞれが一部分の作業を完了します。アプリケーションが実行される際には、共通のデータにアクセスすることがあっても、他のアプリケーションのインスタンスと通信することはありません。本質的に並列なワークロードは、同時にアプリケーションを実行できるコンピューティングリソースの量によって大規模化できます。
- 密接に結合したワークロードも実行できます。これらのワークロードでは、実行するアプリケーションが互いに通信する必要があります。密接に結合したアプリケーションは通常、Message Passing Interface (MPI) APIを使用します。
デメリット
Azure Batchは、多くのメリットがありますが、一方で、以下のようなデメリットも考慮する必要があります。
- ユーザーインターフェースが分かりにくい場合があります。AzureポータルやBatch Explorerなどのツールを使っても、プールやジョブ、タスクの設定や管理には慣れが必要です。また、Batch APIやコマンドラインスクリプトを使う場合は、さらに学習コストがかかります。
- データの準備や処理が煩雑な場合があります。Batchでは、アプリケーションや入力データをストレージアカウントにアップロードしたり、出力データをダウンロードしたりする必要があります。また、タスクの実行前後にデータを変換したり、圧縮したり、暗号化したりする必要がある場合もあります。
- バッチ処理に適さないワークロードがある場合があります。Batchは、本質的に並列なワークロードや密接に結合したワークロードに適していますが、それ以外のワークロードには適していない場合があります。例えば、リアルタイム性やインタラクティブ性が求められるワークロードや、複雑な依存関係や制約条件を持つワークロードは、Batchでは効率的に実行できない可能性があります。
Azure Batchの使い方
- AzureポータルでBatchアカウントを作成します。Batchアカウントは、プールやジョブを作成するために必要です。また、Batchアカウントとストレージアカウントを関連付けることもできます。ストレージアカウントは、このクイックスタートでは必要ありませんが、実際のワークロードでは、アプリケーションをデプロイしたり、入力・出力データを保存したりするために便利です。
- Batchアカウントができたら、コンピューティングノード(仮想マシン)のプールを作成します。このクイックスタートでは、AzureマーケットプレイスからWindows Server 2019のイメージを使って、2つのノードからなるプールを作成します²。Batchはプールをすぐに作成しますが、コンピューティングノードを割り当てて起動するまでに数分かかります。
- プールが作成されたら、ジョブを作成します。ジョブは、プール上で実行するタスクの集合です²。このクイックスタートでは、ジョブにはサンプルタスクが含まれています。サンプルタスクは、ノード上でコマンドラインを実行し、テキストファイルを出力します。
- ジョブが完了したら、タスクの出力ファイルをダウンロードします。出力ファイルは、ノード上の一時的なストレージに保存されています。このクイックスタートでは、.NET APIを使って出力ファイルをダウンロードします。
以上がAzure Batchの基本的な使い方です。Azure Batchでは、さまざまなオプションや機能を使って、より複雑なワークロードや大規模なスケールに対応できます。Azure Batchの詳細については、Azure Batch のドキュメント を参照してください。
参考
Discussion