Azure Machine Learning イベントに基づいてアプリケーション、プロセス、または CI/CD ワークフローをトリガーする

この記事では、Azure Machine Learning イベントに基づいて、イベント ドリブン アプリケーション、プロセス、または CI/CD ワークフローを設定する方法について説明します。 たとえば、Azure Event Grid を使用して特定の条件が検出されると、失敗の通知メールまたは ML パイプラインが実行されます。

Azure Machine Learning は、モデルのトレーニング、モデルのデプロイ、監視など、機械学習プロセスのライフサイクル全体を管理します。 Event Grid を使用して、最新のサーバーレス アーキテクチャを使用することで、Azure Machine Learning イベント (トレーニングの実行の完了、モデルの登録とデプロイ、データ ドリフトの検出など) に対応できます。 その後、ワークスペースにおける実行状態の変更、実行の完了、モデルの登録、モデルのデプロイ、データ ドリフトの検出などのイベントをサブスクライブして使用できます。

イベント ドリブン アクションに Event Grid を使用する場合:

  • 実行失敗および実行完了に関するメールを送信する
  • モデルの登録後に Azure 関数を使用する
  • Azure Machine Learning からさまざまなエンドポイントへのイベントのストリーミング
  • 誤差が検出されたときに ML パイプラインをトリガーする

重要

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

前提条件

Event Grid を使用するには、イベントを作成する Azure Machine Learning ワークスペースへの共同作成者または所有者アクセスが必要です。

イベントのモデルと種類

Azure Event Grid は、Azure Machine Learning やその他の Azure サービスなどのソースからイベントを読み取ります。 これらのイベントは、その後 Azure Event Hubs、Azure Functions、Logic Apps などのイベント ハンドラーに送信されます。 次の図は、Event Grid がソースとハンドラーをどのように接続するかを示すもので、サポートされる統合の包括的な一覧ではありません。

Azure Event Grid の機能モデル

イベント ソースとイベント ハンドラーの詳細については、「Event Grid とは」を参照してください。

Azure Machine Learning のイベントの種類

Azure Machine Learning は、機械学習のライフサイクルのさまざまな時点でイベントを提供します。

イベントの種類 説明
Microsoft.MachineLearningServices.RunCompleted 機械学習実験の実行が完了したときに発生します
Microsoft.MachineLearningServices.ModelRegistered (プレビュー) 機械学習モデルがワークスペースに登録されたときに発生します
Microsoft.MachineLearningServices.ModelDeployed (プレビュー) 1 つ以上のモデルを持つ推論サービスのデプロイが完了したときに発生します
Microsoft.MachineLearningServices.DatasetDriftDetected (プレビュー) 2 つのデータセットのデータ ドリフト検出ジョブが完了したときに発生します
Microsoft.MachineLearningServices.RunStatusChanged 実行状態が変化したときに発生します

イベントをフィルター処理およびサブスクライブする

これらのイベントは Azure Event Grid を通じて発行されます。 Azure portal、PowerShell、または Azure CLI から、1 つ以上のイベントの種類を指定し、条件をフィルター処理することで、イベントを簡単にサブスクライブできます。

イベントを設定するときに、フィルターを適用して、特定のイベント データでのみトリガーするようにできます。 次の例では、実行状態変更イベントについて、実行の種類でフィルター処理できます。 イベントは、条件が満たされた場合にのみトリガーされます。 フィルター処理できるイベント データの詳細については、Azure Machine Learning Event Grid スキーマを参照してください。

Azure Machine Learning イベントのサブスクリプションは、Azure ロールベースのアクセス制御 (Azure RBAC) によって保護されています。 ワークスペースの共同作成者または所有者だけが、イベント サブスクリプションの作成、更新、削除を行うことができます。 イベント サブスクリプションの作成中、または作成後に、イベント サブスクリプションをフィルター処理することができます。

  1. Azure portal にアクセスし、新しいサブスクリプションまたは既存のサブスクリプションを選択します。

  2. 左側のナビゲーション領域から [イベント] エントリを選択し、[+ イベント サブスクリプション] を選択します。

  3. [フィルター] タブを選択し、下にスクロールして [高度なフィルター] に移動します。 [キー][値] で、フィルター処理するプロパティの型を指定します。 ここでは、実行の種類がパイプライン実行またはパイプライン ステップ実行の場合に、イベントがトリガーされることがわかります。

    イベントのフィルター処理

  • イベントの種類でフィルター処理する: イベント サブスクリプションでは、1 つまたは複数の Azure Machine Learning イベントの種類を指定できます。

  • イベントの件名でフィルター処理する: Azure Event Grid は、次で始まる次で終わる という一致に基づく件名フィルターをサポートするため、件名が一致するイベントはサブスクライバーに配信されます。 機械学習イベントが異なると、件名の形式も異なります。

    イベントの種類 件名の形式 件名の例
    Microsoft.MachineLearningServices.RunCompleted experiments/{ExperimentId}/runs/{RunId} experiments/b1d7966c-f73a-4c68-b846-992ace89551f/runs/my_exp1_1554835758_38dbaa94
    Microsoft.MachineLearningServices.ModelRegistered (プレビュー) models/{modelName}:{modelVersion} models/sklearn_regression_model:3
    Microsoft.MachineLearningServices.ModelDeployed (プレビュー) endpoints/{serviceId} endpoints/my_sklearn_aks
    Microsoft.MachineLearningServices.DatasetDriftDetected (プレビュー) datadrift/{data.DataDriftId}/run/{data.RunId} datadrift/4e694bf5-712e-4e40-b06a-d2a2755212d4/run/my_driftrun1_1550564444_fbbcdc0f
    Microsoft.MachineLearningServices.RunStatusChanged experiments/{ExperimentId}/runs/{RunId} experiments/b1d7966c-f73a-4c68-b846-992ace89551f/runs/my_exp1_1554835758_38dbaa94
  • 高度なフィルター処理:Azure Event Grid は、発行されたイベント スキーマに基づく高度なフィルター処理もサポートしています。 Azure Machine Learning のイベント スキーマの詳細については、「Azure Machine Learning の Azure Event Grid イベント スキーマ」を参照してください。 Microsoft.MachineLearningServices.ModelRegistered イベントの場合、モデルのタグ値をフィルター処理するには、次のようにします。

    --advanced-filter data.ModelTags.key1 StringIn ('value1')
    

    フィルターを適用する方法の詳細については、「Event Grid のイベントのフィルター処理」をご覧ください。

Machine Learning イベントを使用する

Machine Learning イベントを処理するアプリケーションは、いくつかの推奨される手法に従う必要があります。

  • 複数のサブスクリプションが同じイベント ハンドラーにイベントをルーティングするように構成される場合があるため、イベントが特定のソースからのものであると見なすのではなく、メッセージのトピックをチェックして、予測している Machine Learning ワークスペースから来ていることを確認することが重要です。
  • 同様に、受信するすべてのイベントが予期した種類のものであると想定してはならず、イベントの種類が処理できるものであることを確認する必要があります。
  • メッセージは順不同で到着したり、少し遅れて到着する可能性があるので、etag フィールドを使って、オブジェクトに関する情報がまだ最新の状態かどうかを確認します。 また、sequencer フィールドを使って、特定のオブジェクトに対するイベントの順序を確認します。
  • わからないフィールドは無視します。 この手法に従うと、将来追加されるかもしれない新しい機能に弾力的に対応できます。
  • 失敗またはキャンセルされた Azure Machine Learning 操作はイベントをトリガーしません。 たとえば、モデル デプロイが失敗した場合、Microsoft.MachineLearningServices.ModelDeployed はトリガーされません。 アプリケーションを設計するときは、このような障害モードを考慮してください。 Azure Machine Learning SDK、CLI、またはポータルをいつでも使用して、操作の状態を確認して失敗の詳しい理由を理解することができます。

Azure Event Grid を使用すると、Azure Machine Learning イベントによってトリガー可能な、分離されたメッセージ ハンドラーを構築できます。 メッセージ ハンドラーの主要な例を次に示します。

  • Azure Functions
  • Azure Logic Apps
  • Azure Event Hubs
  • Azure Data Factory パイプライン
  • 汎用 Webhook (Azure プラットフォームまたは他の場所でホストされる場合があります)

Azure Portal での設定

  1. Azure portal を開き、Azure Machine Learning ワークスペースに移動します。

  2. 左側のバーで [イベント] を選択し、 [イベント サブスクリプション] を選択します。

    イベント サブスクリプションの選択を示すスクリーンショット。

  3. 使用するイベントの種類を選択します。

    [イベント サブスクリプションの作成] フォームを示すスクリーンショット。

  4. イベントの発行先のエンドポイントを選択します。 次のスクリーンショットでは、 [イベント ハブ] が選択されたエンドポイントであることを示しています。

    [イベント ハブの選択] が開いた [イベント サブスクリプションの作成] ペインを示すスクリーンショット。

選択内容を確認したら、[作成] を選択します。 構成の後、これらのイベントはエンドポイントにプッシュされます。

CLI を使用した設定

最新の Azure CLI をインストールするか、Azure サブスクリプションの一部として提供されている Azure Cloud Shell を使用することができます。

Event Grid 拡張機能をインストールするには、CLI から次のコマンドを使用します。

az extension add --name eventgrid

次の例では、Azure サブスクリプションの選択方法が示されており、Azure Machine Learning の新しいイベント サブスクリプションが作成されます。

# Select the Azure subscription that contains the workspace
az account set --subscription "<name or ID of the subscription>"

# Subscribe to the machine learning workspace. This example uses EventHub as a destination. 
az eventgrid event-subscription create --name {eventGridFilterName} \
  --source-resource-id /subscriptions/{subId}/resourceGroups/{RG}/providers/Microsoft.MachineLearningServices/workspaces/{wsName} \
  --endpoint-type eventhub \
  --endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.EventHub/namespaces/n1/eventhubs/EH1 \
  --included-event-types Microsoft.MachineLearningServices.ModelRegistered \
  --subject-begins-with "models/mymodelname"

例:メール アラートを送信する

Azure Logic Apps を使用して、すべてのイベントのメールを構成します。 条件を使用してカスタマイズし、共同作業を行うチーム全体でコラボレーションと意識を高める受信者を指定します。

  1. Azure portal で、Azure Machine Learning ワークスペースに移動し、左側のバーの [イベント] タブを選択します。 ここで、 [ロジック アプリ] を選択します。

    Azure Logic Apps の選択を示すスクリーンショット。

  2. ロジック アプリの UI にサインインし、トピックの種類として Machine Learning サービスを選択します。

    リソースの種類として機械学習が選択された状態の [リソース イベントが発生したとき] ダイアログ ボックスを示すスクリーンショット。

  3. 通知するイベントを選択します。 たとえば、次のスクリーンショットで [RunCompleted] を選択します。

    リソースタイプとして Azure Machine Learning service サービスを示すスクリーンショット。

  4. 次に、このイベントを使用して電子メールを検索するステップを追加します。 イベントの受信に使用できるメール アカウントはいくつかあります。 また、電子メール アラートを送信する条件を構成することもできます。

    検索行にメールアドレスが入力された [アクションの選択] ダイアログ ボックスを示すスクリーンショット。

  5. [メールの送信] を選択し、パラメーターを入力します。 件名には、イベントのフィルター処理に役立つ [Event Type](イベントの種類)[Topic](トピック) を含めることができます。 メッセージ本文で実行するために、ワークスペース ページへのリンクを含めることもできます。

    この操作を保存するには、ページの左端にある [名前を付けて保存] を選択します。

    件名行のリストから右側にトピックとイベントの種類が追加された [メールを送る] ダイアログ ボックスを示すスクリーンショット。

例:データ ドリフトが再トレーニングをトリガーする

重要

この例は、Azure Machine Learning SDK v1 または Azure Machine Learning 用の Azure CLI 拡張機能 v1 を使用する場合にのみ使用できる機能 (データ ドリフト) に依存しています。 詳細については、「Azure Machine Learning CLI および SDK v2 とは」を参照してください。

モデルは時間の経過と共に古くなり、実行されているコンテキストでは役に立たなくなります。 モデルの再トレーニングを行う時期であることを通知する方法の 1 つは、データ ドリフトを検出することです。

この例では、Azure Logic App でイベント グリッドを使用して再トレーニングをトリガーする方法を示します。 この例では、モデルのトレーニングとサービス提供データセットの間でデータ ドリフトが発生したときに、Azure Data Factory パイプラインをトリガーします。

開始する前に、次の操作を行います。

この例では、単純な Data Factory パイプラインを使用してファイルを blob ストアにコピーし、発行された Machine Learning パイプラインを実行します。 このシナリオの詳細については、Azure Data Factory の Machine Learning の手順を設定する方法を参照してください。

Azure Data Factory のトレーニング パイプラインを示すスクリーンショット

  1. ロジック アプリの作成を開始します。 Azure portal にアクセスし、ロジック アプリを検索して、[作成] を選択します。

    search-logic-app

  2. 必要な情報を入力します。 エクスペリエンスを単純化するには、Azure Data Factory パイプラインと Azure Machine Learning ワークスペースと同じサブスクリプションおよびリソース グループを使用します。

    ロジック アプリの [作成] ペインを示すスクリーンショット。

  3. ロジック アプリを作成したら、[Event Grid のリソース イベントが発生するとき] を選択します。

    Event Grid リソース イベントが発生したときなど、一般的なトリガー オプションを使用して開始した Logic Apps デザイナーを示すスクリーンショット。

  4. ログインし、イベントの詳細を入力します。 [リソース名] をワークスペース名に設定します。 [イベントの種類][DatasetDriftDetected] に設定します。

    データ ドリフト イベント タイプの項目を示すスクリーンショット

  5. 新しいステップを追加し、Azure Data Factory を検索します。 [パイプラインの実行の作成] を選択します。

    [パイプラインの実行の作成] が選択された [アクションの選択] ペインを示すスクリーンショット。

  6. ログインし、実行する公開された Azure Data Factory パイプラインを指定します。

    さまざまな値がある [パイプラインの実行の作成] ペインを示すスクリーンショット。

  7. ページの左上にある [保存] ボタンを使用して、ロジック アプリを保存して作成します。 アプリを表示するには、Azure portal のワークスペースに移動し、[イベント] を選択します。

    ロジック アプリが強調表示されているイベントを示すスクリーンショット。

これで、ドリフトが発生したときに Data Factory パイプラインがトリガーされます。 Azure Machine Learning スタジオで、データ ドリフトの実行と機械学習パイプラインの詳細を確認します。

パイプラインのエンドポイントを示すスクリーンショット。

次のステップ

Event Grid の詳細について理解し、Azure Machine Learning のイベントを試してみてください。