MLOps: Azure Machine Learning v1 を使用したモデルの管理、デプロイ、系列追跡、監視

適用対象:Azure CLI ml 拡張機能 v1Python SDK azureml v1

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

重要

この記事で "プレビュー" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビュー バージョンは、サービス レベル 契約なしに提供されます。 プレビュー機能は、運用環境のワークロード用にはお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。

詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

機械学習の操作の概要

機械学習の運用 (MLOps) は、DevOps の原則と実践に基づいてワークフローの効率を向上させます。 たとえば、継続的インテグレーション、配信、デプロイです。 機械学習の運用では、次のことを目標に、これらの原則を機械学習プロセスに適用します。

  • モデルのより迅速な実験と開発
  • 実稼働環境へのモデルのより迅速なデプロイ
  • 品質保証とエンド ツー エンドの系列追跡

Azure Machine Learning での MLOps

Azure Machine Learning で提供される機械学習の運用機能は次のとおりです。

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

機械学習の運用の詳細については、「機械学習の運用」を参照してください。

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

Azure Machine Learning から機械学習パイプラインを使用して、モデルのトレーニング プロセスに関連するすべての手順をまとめることができます。

機械学習パイプラインには、データ準備から特徴抽出、ハイパーパラメータ―調整、モデル評価までの手順を含めることができます。 詳細については、「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 を (スペースなしで) 使用する必要があります。

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

モデルは、運用環境にデプロイされる前に、Docker イメージにパッケージ化されます。 ほとんどの場合、イメージの作成は、バックグラウンドでデプロイ時に自動的に行われます。 イメージは、手動で指定できます。

デプロイで問題が発生した場合は、トラブルシューティングとデバッグを行うためにローカルの開発環境にデプロイできます。

詳細については、「機械学習モデルを Azure にデプロイする」および「リモートでのモデル デプロイのトラブルシューティング」を参照してください。

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

モデルを Open Neural Network Exchange (ONNX) に変換することで、パフォーマンスが向上する場合があります。 平均すると、ONNX への変換によりパフォーマンスは 2 倍上昇します。

詳細については、「ONNX と Azure Machine Learning」を参照してください。

モデルを使用する

トレーニング済みの機械学習モデルは、クラウド上またはローカルで、Web サービスとしてデプロイされます。 デプロイでは、推論のために CPU または GPU が使われます。 Power BI からのモデルを使用することもできます。

モデルを Web サービスとして使用する場合は、次の項目を指定します。

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

また、ターゲット展開プラットフォームの構成も指定します。 たとえば、Azure Kubernetes Service をデプロイするときの仮想マシン ファミリの種類、使用可能なメモリ、およびコアの数。

イメージが作成されると、Azure Machine Learning で必要なコンポーネントも追加されます。 たとえば、Web サービスを実行するために必要なアセットです。

バッチ スコアリング

バッチ スコアリングは、機械学習パイプライン経由でサポートされます。 詳細については、「チュートリアル: 画像分類用の Azure Machine Learning パイプラインを構築する」を参照してください。

リアルタイム Web サービス

次のコンピューティング ターゲットを持つ Web サービスでモデルを使用することができます。

  • Azure Container Instances
  • Azure Kubernetes Service
  • ローカル開発環境

モデルを Web サービスとしてデプロイするには、次の項目を指定する必要があります。

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

詳細については、「機械学習モデルを Azure にデプロイする」を参照してください。

Analytics

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

機械学習の運用に必要なガバナンス データをキャプチャする

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

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

ヒント

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

データセットの登録済みのモデルとの関連付けは省略可能な手順です。 モデルを登録するときのデータセットの参照については、Model クラスのリファレンスを参照してください。

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

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

運用と機械学習に関連する問題の監視

監視により、モデルにどのようなデータが送信されているか、および返される予測を理解することができます。

この情報は、自分のモデルがどのように使用されているかを理解するのに役立ちます。 収集された入力データは、モデルの将来のバージョンのトレーニングにも役立つ可能性があります。

詳細については、「実稼働環境のモデルからデータを収集する」を参照してください。

新しいデータでモデルを再トレーニングする

多くの場合は、新しい情報を受け取ったとき、モデルを検証または更新したり、場合によっては最初から再トレーニングしたりしたくなります。 新しいデータを受信することが、そのドメインで想定される部分であることもあります。 また、モデルのパフォーマンスは、特定のセンサーに対する変更、季節的影響などのデータの自然な変化、または他の特徴との関係における特徴の変化などによって低下する可能性があります。 詳細については、「データセットでデータ ドリフトを検出する (プレビュー)」を参照してください。

"再トレーニングが必要かどうかを知る方法" に対する普遍的な回答はありませんが、前に説明した Azure Machine Learning イベントと監視ツールは、自動化のよい出発点になります。 再トレーニングすることを決定したら、次のことを行う必要があります。

  • 反復可能な自動化されたプロセスを使用して、データを前処理する
  • 新しいモデルをトレーニングする
  • 新しいモデルの出力を古いモデルの出力と比較する
  • 定義済みの条件を使用して、古いモデルを置き換えるかどうかを選択する

上記の手順のテーマは、再トレーニングは即席で行うのではなく、自動化する必要があるということです。 Azure Machine Learning パイプラインに関する記事では、データの準備、トレーニング、検証、およびデプロイに関連するワークフローを作成するための適切な答えが示されています。 パイプラインと Azure Machine Learning デザイナーが再トレーニング シナリオにどのように適しているかを確認するには、「パイプライン パラメーターを使用し、デザイナーのモデルを再トレーニングする」を参照してください。

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

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

Azure Machine Learning の拡張機能により簡単に Azure Pipelines と連携できるようになります。 次の拡張機能が Azure Pipelines にもたらされます。

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

Azure Machine Learning での Azure Pipelines の使用方法の詳細については、次のリソースを参照してください。

Azure Data Factory を使用して、トレーニングで使用するためのデータを準備するデータ インジェスト パイプラインを作成することもできます。 詳細については、「データ インジェスト パイプラインの DevOps」を参照してください。

次のリソースをじっくり読んで理解を深めましょう。