Azure Machine Learning を使用した MLOps モデル管理

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

この記事では、Azure Machine Learning で機械学習運用 (MLOps) を使用して、モデルのライフサイクルを管理する方法について説明します。 MLOps プラクティスを適用すると、機械学習ソリューションの品質と一貫性を向上させることができます。

MLOps は、継続的インテグレーション、継続的デプロイ、継続的デリバリーなど、ワークフローの効率性を高める DevOps の原則とプラクティスに基づいています。 これらの原則を機械学習のライフサイクルに適用すると、以下が実現されます。

  • モデルのより迅速な実験と開発
  • モデルをより迅速に本番環境にデプロイする。
  • 品質保証とエンドツーエンドの系列追跡の向上

MLOps の機能

MLOps で提供される機械学習プロセスは次のとおりです。

  • 再現性のある機械学習パイプラインを作成して、データ準備、トレーニング、スコアリング プロセスに関して、反復可能かつ再利用可能な手順を定義する。
  • モデルのトレーニングとデプロイのために再利用可能なソフトウェア環境を作成する
  • どこからでもモデルを登録、パッケージ化、およびデプロイして、モデルの使用に必要な関連するメタデータを追跡する。
  • 機械学習ライフサイクル ガバナンスの系列データのログ。誰がモデルを発行したか、なぜ変更が行われたか、いつモデルが運用環境にデプロイまたは使用されたかなど。
  • 機械学習ライフサイクル イベントに対する通知とアラート。実験の完了、モデル登録、モデル デプロイ、およびデータ誤差の検出など。
  • 運用上の問題や機械学習に関連する問題の監視。このためには、モデル入力の比較、モデル固有のメトリックの調査、機械学習インフラストラクチャでの監視とアラートの表示を行います。
  • エンドツーエンドの機械学習ライフサイクルの自動化。機械学習パイプラインや Azure Pipelines を使用して、新しい機械学習モデルを継続的にテスト、更新、ロールアウトします。

MLOps の詳細については、「機械学習の運用」をご覧ください。

再現性のある機械学習パイプライン

Azure Machine Learning のパイプラインを使用して、モデルのトレーニング プロセスに関するすべての手順をまとめます。 機械学習パイプラインの手順には、データ準備、特徴抽出、ハイパーパラメーター調整、モデルの評価などを含めることができます。

Azure Machine Learning スタジオ デザイナーで、古いバージョンを失うことなく、パイプラインを複製して設計を繰り返し使用できます。 デザイナーでパイプラインを複製するには、上部のメニュー バーで [複製] を選択します。

Azure Machine Learning パイプラインの詳細については、「Machine Learning のパイプライン」をご覧ください。

再利用可能なソフトウェア環境

Azure Machine Learning 環境により、手動でのソフトウェア構成なしに、ビルドの再現性を確保できます。 環境により、プロジェクトの pip および conda ソフトウェアの依存関係を追跡して再現できます。

環境を使用し、モデルのトレーニングとデプロイをすることができます。 環境の詳細については、「Azure Machine Learning 環境」をご覧ください。

モデルの登録、パッケージ化、デプロイ

Azure Machine Learning では、どこからでも MLOps を使用して、モデルを登録、パッケージ化、デプロイできます。

モデルの登録および追跡

モデルの登録では、Azure クラウド上の Azure Machine Learning ワークスペースにモデルが格納され、バージョン管理されます。 モデルのレジストリでは、トレーニングしたモデルの整理と追跡が容易に行えます。

登録済みモデルは、モデルを構成する 1 つまたは複数のファイルの論理コンテナーです。 たとえば、モデルが複数のファイルに格納されている場合は、Azure Machine Learning ワークスペースに単一モデルとしてファイルを登録することができます。 登録後は、その登録済みモデルをダウンロードまたはデプロイし、すべてのコンポーネント ファイルを受信できます。

Azure Machine Learning の外部でトレーニングされたモデルを登録することもできます。 Azure Machine Learning は、Python 3.5.2 以上を使用して読み込むことができる任意のモデルをサポートしています。

登録されたモデルは、名前とバージョンによって識別できます。 モデルを登録するたびに、既存のモデルと同じ名前で登録され、レジストリによってバージョン番号がインクリメントされます。

登録時にメタデータ タグを指定し、これらのタグを使用してモデルを検索することもできます。

重要

アクティブなデプロイで使用されている登録済みモデルは削除できません。

Azure Machine Learning でモデルを使用する方法の詳細については、「Azure Machine Learning でモデルを操作する」をご覧ください。

モデルをパッケージ化しデバッグする

モデルを本番環境にデプロイするには、まず Docker イメージにパッケージ化する必要があります。 ほとんどの場合、イメージの作成は、バックグラウンドでデプロイ時に自動的に行われますが、 イメージは、手動で指定することもできます。

クラウドにデプロイする前にトラブルシューティングとデバッグを行うことができるように、最初にローカル開発環境にデプロイすると便利です。 この方法は、Azure Machine Learning へのデプロイで問題が発生するのを避けるのに役立ちます。 デプロイに関する一般的な問題を解決する方法の詳細については、「オンライン エンドポイントのトラブルシューティング方法」をご覧ください。

モデルを変換して最適化する

モデルを Open Neural Network Exchange (ONNX) に変換して、パフォーマンスの向上を試みることができます。 通常、ONNX への変換によりパフォーマンスを 2 倍にすることができます。

Azure Machine Learning での ONNX の詳細については、機械学習モデルの作成と高速化に関する記事を参照してください。

エンドポイントとしてモデルをデプロイする

トレーニング済みの機械学習モデルは、ローカル環境またはクラウドにエンドポイントとしてデプロイできます。 デプロイでは、推論のために CPU と GPU が使われます。

モデルをエンドポイントとしてデプロイするには、次の情報を指定する必要があります。

  • サービスまたはデバイスに送信されるデータのスコア付けに使用されるモデル
  • エントリ スクリプト (別名: スコアリング スクリプト)。要求を受け入れ、モデルを使用してデータをスコア付けし、応答を返します。
  • モデルとエントリ スクリプトで必要とされる pip および conda の依存関係を記述している環境
  • モデルとエントリ スクリプトで必要とされるテキストやデータなどすべての追加アセット。

重要

MLflow モデルをデプロイする際に、エントリ スクリプトまたはデプロイ用の環境を用意する必要はありません。 MLflow モデルのデプロイの詳細については、「MLflow モデルをデプロイするためのガイドライン」をご覧ください。

また、仮想マシン (VM) ファミリの種類、使用可能なメモリ、コアの数など、ターゲット デプロイ プラットフォームの構成も指定します。 Azure Machine Learning がイメージを作成するとき、Web サービスの実行に必要なアセットなど、必要なコンポーネントも追加されます。

バッチ エンドポイントでのバッチ スコアリング

バッチ スコアリングは、バッチ エンドポイント経由でサポートされます。 詳しくは、「バッチ エンドポイント」をご覧ください。

オンライン エンドポイントを使用したリアルタイム スコアリング

オンライン エンドポイントでモデルを使用して、リアルタイム スコアリングを行うことができます。 オンライン エンドポイントのコンピューティング ターゲットとして、ローカル開発環境、マネージド オンライン エンドポイント、または Azure Kubernetes Service (AKS) を指定できます。

モデルをオンライン エンドポイントにデプロイするには、次の情報を指定する必要があります。

  • モデル、またはモデルのアンサンブル。
  • モデルの使用に必要な依存関係。たとえば、要求を受け取って、モデルや conda 依存関係を起動するスクリプトなど。
  • モデルのデプロイ方法とデプロイ先を記述するデプロイ構成。

リアルタイム スコアリングのデプロイの詳細については、「オンライン エンドポイントのデプロイ」をご覧ください。

オンライン エンドポイントの制御されたロールアウト

オンライン エンドポイントにデプロイするときに、制御されたロールアウトを使って、次のシナリオを有効にすることができます。

  • デプロイ用に複数のバージョンのエンドポイントを作成します。
  • トラフィックをエンドポイント内の異なるデプロイにルーティングすることにより、A/B テストを実行します。
  • エンドポイントの構成でトラフィックの割合を更新することにより、エンドポイントのデプロイを切り替えます。

制御されたロールアウトを使用したデプロイの詳細については、「リアルタイム推論のための新しいデプロイの安全なロールアウトの実行」をご覧ください。

機械学習ライフサイクル ガバナンスのメタデータ

Azure Machine Learning では、メタデータを使用して、すべての機械学習資産のエンドツーエンドの監査ログを追跡できます。 次に例を示します。

  • Azure Machine Learning のデータ アセットは、データの追跡、プロファイリング、バージョン管理に役立ちます。
  • モデルの解釈可能性を使用すると、モデルを説明したり、規制コンプライアンスを満たしたり、モデルが指定された入力の結果にどのように到達するかを理解したりできます。
  • Azure Machine Learning のジョブ履歴には、モデルをトレーニングするのに使用されたコード、データ、コンピューティングのスナップショットが格納されます。
  • Azure Machine Learning モデル登録は、モデルに関連付けられているすべてのメタデータをキャプチャします。 たとえば、モデルをトレーニングした実験、モデルがデプロイされている場所、モデル デプロイが正常かどうかなどです。
  • Azure との統合によって、モデルの登録、デプロイ、データ ドリフト、トレーニング ジョブ イベントなど、機械学習ライフサイクルにおけるイベントに対処できます。

モデルやデータ アセットに関する情報には自動的にキャプチャされるものもありますが、"タグ" を使用して、他の情報を追加することも可能です。 ワークスペースで登録済みのモデルやデータ アセットを検索する場合に、タグをフィルターとして使用できます。

Note

Azure Machine Learning スタジオの [モデル] ページの [以下でフィルター処理] オプションの [タグ] を使用する場合は、TagName : TagValue ではなく、TagName=TagValue を (スペースなしで) 使用してください。

機械学習ライフサイクル イベントの通知とアラート

Azure Machine Learning では、Azure Event Grid に重要なイベントがパブリッシュされ、機械学習ライフサイクルでのイベントに関する通知と自動化に利用できるようになっています。 Azure Machine Learning イベントに基づいてイベントドリブン プロセスを設定する方法の詳細については、「カスタム CI/CD とイベントドリブン ワークフロー」をご覧ください。

機械学習ライフサイクルの自動化

Git と Azure Pipelines を使用して、機械学習モデルをトレーニングする継続的インテグレーション プロセスを作成できます。 一般的なシナリオでは、データ サイエンティストがプロジェクトの Git リポジトリへの変更をチェックするときに、Azure Pipelines はトレーニング ジョブを開始します。

ジョブの結果を調べて、トレーニング済みモデルのパフォーマンス特性を確認できます。 Web サービスとしてモデルをデプロイするパイプラインを作成することもできます。

Azure Machine Learning の拡張機能により、Azure Pipelines との連携が容易になります。 この拡張により、次の拡張機能が Azure Pipelines にもたらされます。

  • サービスの接続を定義するときに、Azure Machine Learning ワークスペースの選択を有効にする。
  • トレーニング パイプラインでのトレーニング済みのモデルの作成を有効にし、Azure Pipelines でのデプロイをトリガーする。

Azure Machine Learning を使った Azure Pipelines の使用方法の詳細については、「Azure Machine Learning で Azure Pipelines を使用する」をご覧ください。

Analytics

Microsoft Power BI は、データ分析への機械学習モデルの使用をサポートします。 詳細については、「データフローを使用した AI」を参照してください。