このアーキテクチャ ガイドでは、 Azure Machine Learning でバッチ スコアリング モデルのスケーラブルなソリューションをビルドする方法を示します。 このソリューションはテンプレートとして使用でき、さまざまな問題に対応するように汎用化できます。
アーキテクチャ
このアーキテクチャの Visio ファイル をダウンロードします。
ワークフロー
このアーキテクチャ ガイドは、インジェスト プロセスがデータ型に適合している場合、ストリーミング データと静的データの両方に適用できます。 次の手順とコンポーネントでは、これら 2 種類のデータのインジェストについて説明します。
データのストリーミング:
- データのストリーミングは IoT センサーから始まります。ここでは、新しいイベントは頻繁にストリーミングされます。
- 受信ストリーミング イベントは Azure Event Hubs を使用してキューに登録され、Azure Stream Analytics を使用して事前処理されます。
- Azure Event Hubs。 このメッセージ インジェスト サービスでは、1 秒あたり数百万件のイベント メッセージを取り込むことができます。 このアーキテクチャでは、センサーがこのイベント ハブにデータ ストリームを送信します。
- Azure Stream Analytics。 イベント処理エンジンです。 Stream Analytics ジョブがイベント ハブからデータ ストリームを読み取り、ストリーム処理を実行します。
静的データ:
- 静的データセットは、 Azure Data Lake Storage 内にファイルとして、あるいは Azure Synapse または Azure SQL Database に表形式で格納できます。
- Azure Data Factory を使用して、格納されているデータセットを集計または前処理できます。
データ インジェスト後の残りのアーキテクチャは、ストリーミング データと静的データの両方で等しく、次の手順とコンポーネントで構成されます。
- 取り込まれ、集約、または前処理されたデータは、 Azure Data Lake Storage 内にドキュメントとして保存することも、 Azure Synapse または Azure SQL Databaseに表形式で保存することもできます。 このデータは、次に Azure Machine Learning によって使用されます。
- Azure Machine Learning は、大規模な機械学習モデルのトレーニング、デプロイ、および管理に使用されます。 バッチ スコアリングのコンテキストでは、Azure Machine Learning によって、自動スケーリング オプションを使用して仮想マシンのクラスターが作成されます。ここでは、Python スクリプトのようにジョブが並列で実行されます。
- モデルは マネージド バッチ エンドポイントとしてデプロイされ、一定期間にわたって大量のデータに対してバッチ推論を実行するために使用されます。 バッチ エンドポイントは、データへのポインターを受け取り、ジョブを非同期に実行して、複数のコンピューティング クラスターでデータを並列に処理します。
- 推論結果は、 Azure Data Lake Storage 内にドキュメントとして、あるいは Azure Synapse または Azure SQL Databaseに表形式で格納できます。
- 視覚化: 保存されたモデルの結果は、Power BI ダッシュボードなどのユーザー インターフェイス、またはカスタム ビルド Web アプリケーションを介して使用できます。
Components
- Azure Event Hubs
- Azure Stream Analytics
- Azure SQL Database
- Azure Synapse Analytics
- Azure Data Lake Storage
- Azure Data Factory
- Azure Machine Learning
- Azure Machine Learning エンドポイント
- Azure の Microsoft Power BI
- Azure Web Apps
考慮事項
以降の考慮事項には、ワークロードの品質向上に使用できる一連の基本原則である Azure "Well-Architected Framework" の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。
パフォーマンス
標準的な Python モデルでは、CPU で十分にワークロードを処理できることが一般に認められています。 このアーキテクチャでは、CPU を使用します。 ただし、 ディープ ラーニング ワークロードの場合、グラフィックス プロセッシング ユニット (GPU) は一般に CPU よりもかなりのパフォーマンスを上回ります。 通常、同等のパフォーマンスを得るには、かなりの規模の CPU クラスターが必要です。
VM とコアの間の並列化
多数のモデルのスコアリング プロセスをバッチ モードで実行する場合は、VM 間でジョブを並列処理する必要があります。 2 つの方法が可能であり、
- 低コストの VM を使用して大規模なクラスターを作成する。
- 高パフォーマンスの VM を使用する小規模なクラスターを作成し、それぞれで複数のコアを使用できるようにする。
一般に、標準的な Python モデルのスコアリングはディープ ラーニング モデルのスコアリングほど負荷が高くないため、小規模のクラスターでキューに置かれた多数のモデルを効率的に処理できます。 データセットのサイズが大きくなったときに、クラスター ノードの数を増やすことができます。
このシナリオでは便宜上、単一の Azure Machine Learning パイプライン ステップ内で 1 つのスコアリング タスクを送信します。 ただし、同じパイプライン ステップ内で複数のデータ チャンクをスコアリングすることで、効率を上げることができます。 この場合は、単一ステップの実行中に、複数のデータセットを読み取り、スコアリング スクリプトを実行するカスタム コードを記述します。
管理
- ジョブの監視。 実行中のジョブの進行状況を監視することが重要です。 ただし、アクティブなノードのクラスター全体を監視するのは困難な場合があります。 クラスター内のノードの状態を調べるには、 Azure portal を使用して、 Machine Learning ワークスペースを管理します。 ノードが非アクティブになった場合、またはジョブが失敗した場合は、エラー ログが Blob Storage に保存され、 [パイプライン] セクションからアクセスすることもできます。 監視を強化するには、ログを Application Insights に接続するか、クラスターとそのジョブの状態をポーリングする別のプロセスを実行します。
- ログの記録。 Machine Learning では、関連付けられている Azure Storage アカウントにすべての stdout/stderr が記録されます。 ログ ファイルを簡単に表示するには、 Azure Storage Explorer などのストレージ ナビゲーション ツールを使用します。
コストの最適化
コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳しくは、 コスト最適化の柱の概要に関する記事をご覧ください。
このアーキテクチャ ガイドで使用される最も高価なコンポーネントは、コンピューティング リソースです。 コンピューティング クラスターのサイズは、キュー内のジョブに応じて、スケールアップおよびスケールダウンされます。 Python SDK を使用してコンピューティングのプロビジョニング構成を変更することにより、プログラムで自動スケーリングを有効にします。 または、 Azure CLI を使用して、クラスターの自動スケーリング パラメーターを設定します。
即時処理を必要としない作業の場合は、既定の状態 (最小) が 0 個のノードのクラスターになるように、自動スケーリング式を構成します。 この構成では、クラスターは 0 個のノードで開始し、キュー内でジョブが検出されたときのみスケールアップします。 バッチ スコアリング プロセスが 1 日に数回以下しか発生しない場合は、この設定により大幅なコスト削減を実現できます。
非常に短い間隔で発生するバッチ ジョブでは、自動スケーリングは適切ではない場合があります。 クラスターの起動と停止に要する時間にはコストがかかるので、前のジョブの終了後ほんの数分でバッチ ワークロードが開始する場合は、ジョブ間もクラスターを実行したままにする方がコスト効率がよくなる可能性があります。 この戦略は、スコアリング プロセスが高い頻度で (たとえば 1 時間ごとに) 実行されるようにスケジュールされるか、低い頻度で (たとえば 1 か月に 1 回) 実行されるようにスケジュールされるかによって決まります。
共同作成者
この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。
プリンシパルの作成者:
- Carlos Alexandre Santos | 特化型 AI クラウド ソリューション シニア アーキテクト
- Said Bleik | プリンシパル応用科学者マネージャー
パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。
次の手順
製品ドキュメント:
- Azure Blob Storage とは
- Azure のプライベート Docker コンテナー レジストリの概要
- Azure Event Hubs
- Azure Machine Learning とは
- Azure SQL Database とは何ですか?
- Azure Stream Analytics へようこそ
Microsoft Learn モジュール:
- Azure SQL Database のデプロイ
- Azure Event Hubs を使用してビッグ データ アプリケーションの信頼性の高いメッセージングを有効化する
- Azure Event Hubs について調べる
- Azure Streaming Analytics を使用してデータ ストリーミング ソリューションを実装する
- 機械学習の概要
- Azure Container Registry でコンテナー イメージを管理する