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

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

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

重要

この記事で "プレビュー" と付記されている項目は、現在、パブリック プレビュー段階です。 プレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

MLOps とは

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

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

Azure Machine Learning での MLOps

Azure Machine Learning で提供される MLOps 機能は次のとおりです。

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

MLOps の詳細については、「Machine Learning DevOps (MLOps)」を参照してください。

再現可能な ML パイプラインを作成する

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

ML パイプラインには、データ準備から特徴抽出、さらにはハイパーパラメータ―調整、モデル評価までの手順を含めることができます。 詳細については、「ML パイプライン」をご覧ください。

デザイナーを使用して ML パイプラインを作成する場合、デザイナー ページの右上にある ["..."] をクリックし、 [複製] を選択します。 パイプラインを複製すると、以前のバージョンを失うことなく、パイプラインの設計を反復処理できます。

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

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

環境にはプロジェクトの pip や Conda の依存関係が記述されているので、モデルのトレーニングとデプロイの両方に利用できます。 詳細については、「Azure Machine Learning 環境とは?」を参照してください。

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

ML モデルを登録および追跡する

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

ヒント

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

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

ヒント

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

アクティブなデプロイで使用されている登録済みモデルは削除できません。 詳細については、モデルのデプロイに関するページの、モデルの登録のセクションを参照してください。

重要

Azure Machine Learning スタジオの [モデル] ページの [Tags でフィルター] オプションを使用するとき、お客様は TagName : TagValue を使用するのではなく、TagName=TagValue を (スペースなしで) 使用してください。

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

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

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

詳細については、「モデルをデプロイする」と「デプロイのトラブルシューティング」を参照してください。

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

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

Azure Machine Learning での ONNX の詳細については、「ML モデルの作成と能率化」の記事を参照してください。

モデルを使用する

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

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

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

また、ターゲット デプロイ プラットフォームの構成も提供します。 たとえば、Azure Kubernetes Service をデプロイするときの VM ファミリの種類、使用可能なメモリ、およびコアの数です。

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

バッチ スコアリング

Batch スコアリングは、ML パイプライン経由でサポートされます。 詳細については、ビッグ データでのバッチ予測に関するページをご覧ください。

リアルタイム Web サービス

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

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

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

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

詳細については、「モデルのデプロイ」を参照してください。

Analytics

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

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

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

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

ヒント

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

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

ML ライフサイクルでのイベントに関する通知、自動化、アラートを行う

Azure Machine Learning によって Azure Event Grid に発行される重要なイベントを使って、ML ライフサイクルでイベントについて通知および自動化できます。 詳細については、こちらのドキュメントを参照してください。

運用上の問題と ML の問題を監視する

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

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

詳細については、モデル データ収集を有効にする方法に関するページを参照してください。

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

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

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

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

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

ML ライフサイクルを自動化する

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

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

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

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

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

次のステップ

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