大量で複雑なデータ処理を容易かつ迅速に「Azure Batch」
前回、ビジネスに有用なデータ分析の迅速化に向け、分析のライフサイクル構築によって時短化するMLソリューション「Azure Machine Learning」を解説した。しかし、既存製品では処理に時間や労力がかかってユーザーの業務が滞る可能性もある。これを踏まえ、膨大なデータ処理を迅速に実行できるプラットフォーム「Azure Batch」について、前回に引き続き松崎 剛氏が紹介する。
バッチ処理の仕組みをビルトイン
製造、金融、小売など、膨大なデータをビジネスに活用したい意向を持つ企業は増え、処理の自動化の必要性が高まってきている。例えば、大量のデータを機械学習の分析用に整える処理は時間も労力もかかるので手作業では難しい。日々業務データが生産される中では、ダウンタイムを利用して、一定量、一定期間の集計データを処理目的ごとにまとめて一括処理する「バッチ処理」が有効だ。日本マイクロソフト クラウドソリューションアーキテクトの松崎 剛氏はバッチ処理を包括的にサポートする「Azure Batch」の利点を次のように解説する。
「Azure Batchは、バッチ処理の仕組みを一括して提供します。仮想マシン(以下、VM)上に手作業でバッチの仕組みを構築する場合と比較すればメリットは歴然です。通常のバッチ処理では既定の時間に実行して自動停止の設定をしたり、タスクの依存関係に応じて並列実行数を指定してポリシーに従って実行したりしますが、これに対応するシステムをMicrosoft AzureのVMで作り込むのは困難です。しかし、Azure Batchには前述した機能がビルトインされています」
Azure Batchは複数のVMの実行を管理できる「VMスケールセット」(VMSS)をベースに構成しており、VMが備える多くの機能に対応している。例えば、Azure上で利用されていない余剰リソースを使用して低コストで実行可能なVM「スポットVM」も活用可能だ。オンプレと仮想ネットワーク経由でつないだり、特定のサブネットからデータをインターネット上に見えない形で利用したりといった作業も、Azure Batch上でVMと同じように構成できる。
松崎氏は、バッチ処理における昨今のニーズやそれを踏まえた重要性をこう語る。「現在、バッチはさまざまなシステムに必要とされています。例えば、DWH(データウェアハウス)の仕組みを構築するための事前のデータ収集・加工、ビッグデータ処理やメディアのエンコーディング処理にもバッチは欠かせません。また、前回Azure Machine Learning(以下、AML)を解説しましたが、AMLは、実はAzure Batchの従来製品に当たる『Azure Batch AI』をベースに動いています。AIの学習は時間がかかるので学習に限らず推論もバッチで行う場合があります。例えば、リアルタイムで推論を実行せず夜間にバッチで1万件程度のデータをまとめて推論にかける『バッチ推論』も含めて、機械学習のあらゆる処理でバッチが使われているのです。大量なデータを扱う業務なら、バッチ処理は業種を問わず重要な機能と言えます」
プログラムレベルでバッチ処理
しかし、Azure Batchが単体で使われるシーンは少ないという。具体的な用途として、松崎氏は「ほかのAzure製品と併せて活用するケースが一番鉄板の使い方です」と話す。
「例えば、バッチ処理ではスケジューリングを行う必要がありますが、Azure Batchでもジョブスケジューリングの機能を既定で備えています。毎週日曜日に実行するといった設定が事前に行えます。定期的なデータ処理が必要な作業にはAzure Batch単体でも役立ちます。ですが、Azureでは専門的なデータ処理に特化したソリューションを豊富に提供しているため、一般的にはほかのソリューションと連携した利用が多くみられます。例えば、何らかの処理を実行する前後にバッチ処理が必要となった段階でAzure Batchを呼び出すなど、システム全体のオーケストレーションの一部に柔軟に組み込むようなケースではETLソリューション『Azure Data Factory』と連携できます。あるいはSDKやCLIを使ってプログラムレベルで呼び出すことも可能です。エンコーディング処理のリクエストを出した場合でも、APIから呼び出されてバックエンドでAzure Batchを動かしている間は非同期のため、ユーザーはほかの作業に専念しつつバッチ処理を実行できるのです」(松崎氏)
Azure Batchは、実行中の処理の負荷が大きい状況にも後から助け船を出す味方となり得るのだ。
負荷の高い処理をハンドオフ
作業負荷の高いデータ処理作業が増えていく中で、Azure Batchはどのような提案が有効なのか。松崎氏はAzure Batchの有用性を次のようにアピールする。「Azureの既存のソリューションでは賄いきれない処理をAzure Batchは補填します。大量データの並列処理には並列処理フレームワーク『Apache Spark』をベースとしたAzure上のマネージドサービスを使ったり、機械学習のバッチではAMLを使ったりしますが、例えばAMLが既定で提供していないような分散実行エンジン『Ray』や並列処理ライブラリ『Dask』などによる複雑な分散処理を行う際には、しばしばAzure Batchが使われます(現在、AMLとRayを連携できるパッケージが提供されている) 。学習を主とするAMLでカバーしきれないような複雑かつカスタムな処理が生じた際、Azure Batchを補助的に組み込むことができます。実行時間に上限があるサーバーレスアプリケーション『Azure Functions』からAzure Batchを呼び出すシステムを構築し、長時間の処理を手放しで実行している事例もあります。膨大なデータ処理に追われるIT担当者の、ワークロードを減らしたいというニーズをサポートします」