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 では、次のことを目標に、これらの原則を機械学習プロセスに適用します。
- モデルの実験および開発速度を上げる。
- モデルをより迅速に本番環境にデプロイする。
- 品質保証とエンドツーエンドの系列追跡。
Azure Machine Learning の MLOps
Azure Machine Learning で提供される MLOps 機能は次のとおりです。
- 再現性のある機械学習パイプラインを作成します。 機械学習パイプラインを使用して、データ準備、トレーニング、スコアリング プロセスに関して、反復可能かつ再利用可能な手順を定義します。
- 再利用可能なソフトウェア環境を作成します。 作成した環境は、モデルのトレーニングとデプロイに使用します。
- どこからでもモデルの登録、パッケージ化、デプロイを行う。 モデルを使用するために必要な関連メタデータを追跡することもできます。
- エンドツーエンドの機械学習ライフサイクルのためのガバナンス データを取得します。 記録される系列情報には、モデルを公開しているユーザー、変更が行われた理由を含めることができます。 さらに、モデルが本番環境にデプロイまたは使用された時期を含めることもできます。
- 機械学習ライフサイクルにおけるイベントについて通知とアラートを行います。 このイベントには、実験の完了、モデルの登録、モデル デプロイ、データ ドリフト検知などがあります。
- 運用と機械学習に関連する問題について、機械学習アプリケーションを監視します。 トレーニングと推論の間でモデルの入力を比較します。 モデル固有のメトリックを調査します。 機械学習インフラストラクチャの監視とアラートを提供します。
- Azure Machine Learning と Azure Pipelines を活用して、エンドツーエンドの機械学習ライフサイクルを自動化します。 パイプラインを使用することで、モデルを頻繁に更新できます。 新しいモデルのテストも行えます。 他のアプリケーションやサービスを提供しながら、新しい機械学習モデルを継続的に展開することが可能です。
MLOps の詳細については、「機械学習 DevOps」を参照してください。
再現可能な機械学習パイプラインを作成する
Azure 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 でモデルを操作する」を参照してください。
モデルをパッケージ化しデバッグする
モデルは本番環境にデプロイされる前に、Docker イメージにパッケージ化されます。 ほとんどの場合、イメージの作成は、バックグラウンドでデプロイ時に自動的に行われます。 イメージは、手動で指定できます。
デプロイで問題が発生した場合は、トラブルシューティングとデバッグを行うためにローカルの開発環境にデプロイできます。
詳しくは、オンライン エンドポイントのトラブルシューティング方法に関する記事をご覧ください。
モデルを変換して最適化する
モデルを Open Neural Network Exchange (ONNX) に変換することで、パフォーマンスが向上する場合があります。 平均では、ONNX への変換によりパフォーマンスを 2 倍にすることができます。
Azure Machine Learning での ONNX の詳細については、「機械学習モデルの作成と高速化」を参照してください。
モデルを使用する
トレーニング済みの機械学習モデルは、クラウドまたはローカル環境にエンドポイントとしてデプロイされます。 デプロイでは、推論のために CPU と GPU が使われます。
モデルをエンドポイントとしてデプロイするときは、次の項目を指定します。
- サービスまたはデバイスに送信されたデータのスコア付けに使用されるモデル。
- エントリ スクリプト。 このスクリプトは、要求を受け入れ、モデルを使用してデータをスコア付けし応答を返します。
- モデルとエントリ スクリプトで必要とされる pip および Conda の依存関係を記述している Azure Machine Learning 環境。
- モデルとエントリ スクリプトで必要とされるテキストやデータなどすべての追加アセット。
また、ターゲット デプロイ プラットフォームの構成も提供します。 たとえば、VM ファミリの種類、使用可能なメモリ、コアの数などです。 イメージが作成されると、Azure Machine Learning で必要なコンポーネントも追加されます。 たとえば、Web サービスを実行するために必要なアセットです。
バッチ スコアリング
バッチ スコアリングは、バッチ エンドポイント経由でサポートされます。 詳しくは、「エンドポイント」をご覧ください。
オンライン エンドポイント
オンライン エンドポイントでモデルを使用できます。 オンライン エンドポイントでは、次のコンピューティング先を使用できます。
- マネージド オンライン エンドポイント
- 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 に重要なイベントがパブリッシュされ、機械学習ライフサイクルでのイベントに関する通知と自動化に利用できるようになっています。 詳細については、Event Grid の使用を参照してください。
機械学習ライフサイクルの自動化
GitHub と Azure Pipelines を使用して、モデルをトレーニングする継続的インテグレーション プロセスを作成できます。 一般的なシナリオでは、データ サイエンティストがプロジェクトの Git リポジトリへの変更をチェックするときに、Azure Pipelines はトレーニング ジョブを開始します。 続いて、ジョブの結果を調べて、トレーニング済みモデルのパフォーマンス特性を確認できます。 Web サービスとしてモデルをデプロイするパイプラインを作成することもできます。
Azure Machine Learning の拡張機能により、Azure Pipelines との連携が容易になります。 次の拡張機能が Azure Pipelines にもたらされます。
- サービスの接続を定義するときに、ワークスペースの選択を有効にする。
- トレーニング パイプラインに作成されたトレーニング済みモデルによってトリガーされるリリース パイプラインを有効にする。
Azure Machine Learning と連携して Azure Pipelines を使用する方法の詳細については、次を参照してください。
次のステップ
次のリソースをじっくり読んで理解を深めましょう。