MLOps:Azure Machine Learning を使用したモデル管理、デプロイ、および監視

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

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

MLOps とは

MLOps は、ワークフローの効率を高める DevOps の原則と実践に基づいています。 これらの原則には、継続的なインテグレーション、デリバリー、デプロイが含まれます。 MLOps では、次のことを目標に、これらの原則を機械学習のライフサイクルに適用します。

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

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

  • 再現性のある機械学習パイプラインを作成します。 機械学習パイプラインを使用して、データ準備、トレーニング、スコアリング プロセスに関して、反復可能かつ再利用可能な手順を定義します。
  • 再利用可能なソフトウェア環境を作成します。 作成した環境は、モデルのトレーニングとデプロイに使用します。
  • どこからでもモデルの登録、パッケージ化、デプロイを行う。 モデルを使用するために必要な関連メタデータを追跡します。
  • エンドツーエンドの機械学習ライフサイクルのためのガバナンス データを取得します。 記録される系列情報には、モデルを公開しているユーザー、変更が行われた理由を含めることができます。 さらに、モデルが本番環境にデプロイまたは使用された時期を含めることもできます。
  • 機械学習ライフサイクルにおけるイベントについて通知とアラートを行います。 イベントには実験の完了、モデルの登録、モデル デプロイ、データ ドリフト検知が含まれます。
  • 運用と機械学習に関連する問題について、機械学習アプリケーションを監視します。 トレーニングと推論の間でモデルの入力を比較します。 モデル固有のメトリックを調査します。 機械学習インフラストラクチャの監視とアラートを提供します。
  • Azure Machine Learning と Azure Pipelines を活用して、エンドツーエンドの機械学習ライフサイクルを自動化します。 パイプラインを使用して、モデルを頻繁にテストおよび更新します。 他のアプリケーションやサービスを提供しながら、新しい機械学習モデルを継続的に展開することが可能です。

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

再現可能な機械学習パイプラインを作成する

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

Azure Machine Learning デザイナーを使用して機械学習パイプラインを作成する場合は、古いバージョンを失うことなく、パイプラインを複製して設計を繰り返すことができます。 デザイナーでパイプラインを複製するには、右上隅に移動して ...>複製 を選択します。

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

再利用可能なソフトウェア環境を作成する

Azure Machine Learning の環境を使用することで、進行に沿って、プロジェクトのソフトウェアの依存関係を追跡し、再現することができます。 この環境の使用により、手動でのソフトウェア構成なしに、ビルドの再現性を確保できます。

環境では、プロジェクトにおける pip と conda の依存関係を記述します。 環境を使用し、モデルのトレーニングとデプロイをすることができます。 環境の詳細については、「Azure Machine Learning 環境とは?」をご覧ください。

どこからでもモデルを登録、パッケージ化、およびデプロイする

次のセクションでは、モデルの登録、パッケージ化、デプロイの方法について説明します。

機械学習モデルの登録と追跡

モデルの登録により、モデルを Azure クラウド、ワークスペース内に保存してバージョン管理を行えるようになります。 モデルのレジストリでは、トレーニングしたモデルの整理と追跡が容易に行えます。

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

登録されたモデルは、名前とバージョンによって識別できます。 モデルを登録するたびに、既存のモデルと同じ名前で登録され、レジストリによってバージョン番号がインクリメントされます。 登録時にメタデータ タグを指定し、モデルを検索する際にそのタグを使用することができます。 Azure Machine Learning は、Python 3.5.2 以上を使用して読み込むことができる任意のモデルをサポートしています。

ヒント

Azure Machine Learning の外部でトレーニングされたモデルを登録することもできます。

重要

  • Azure Machine Learning スタジオのモデルページのTagsによるフィルター オプションを使用する場合は、TagName : TagValue ではなく、 TagName=TagValue を (スペースなしで) 使用してください。
  • アクティブなデプロイで使用されている登録済みモデルは削除できません。

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

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

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

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

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

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

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

モデルをデプロイする

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

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

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

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

1,2 MLflow モデルをデプロイする際に、スコアリング スクリプトとも呼ばれるエントリ スクリプトを指定する必要はありません。 デプロイ用の環境を用意する必要もありません。 MLflow モデルのデプロイの詳細については、「MLflow モデルをデプロイするためのガイドライン」をご覧ください。

バッチ スコアリング

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

リアルタイム スコアリング

オンライン エンドポイントでモデルを使用して、リアルタイム スコアリングを行うことができます。 オンライン エンドポイントでは、次のコンピューティング先を使用できます。

  • マネージド オンライン エンドポイント
  • Azure Kubernetes Service
  • ローカル開発環境

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

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

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

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

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

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

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

Analytics

Microsoft Power BI は、データ分析への機械学習モデルの使用をサポートします。 詳細については、Azure Machine Learning の Power BI への統合に関する記事をご覧ください。

MLOps に必要なガバナンス データをキャプチャする

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

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

ヒント

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

機械学習ライフサイクルにおけるイベントについての通知、自動化、アラート

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

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

GitHub と Azure Pipelines to create a continuous integration process that trains a model. を使用して、モデルをトレーニングする継続的インテグレーション プロセスを作成できます。 一般的なシナリオでは、データ サイエンティストがプロジェクトの Git リポジトリへの変更をチェックするときに、Azure Pipelines はトレーニング ジョブを開始します。 続いて、ジョブの結果を調べて、トレーニング済みモデルのパフォーマンス特性を確認できます。 Web サービスとしてモデルをデプロイするパイプラインを作成することもできます。

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

  • サービスの接続を定義するときに、ワークスペースの選択を有効にする。
  • トレーニング パイプラインに作成されたトレーニング済みモデルによってトリガーされるリリース パイプラインを有効にする。

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