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からさまざまなエンドポイントにイベントをストリーミングする

重要

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

前提条件

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

  • Microsoft.EventGrid リソース プロバイダーを、Azure サブスクリプションで登録します。 この登録は、イベント サブスクリプションを作成する前に必要です。

    az provider register --namespace Microsoft.EventGrid --wait
    
  • Logic Apps の例を使用する場合は、 Microsoft.Logic プロバイダーも登録します。

    az provider register --namespace Microsoft.Logic --wait
    
  • CLI の例に従う場合は、eventgrid Azure CLI拡張機能をインストールします。

    az extension add --name eventgrid
    
  • 宛先として Event Hub を使用して CLI の例に従う場合は、既存の Event Hub 名前空間とハブが必要です。 イベント ハブを作成する必要がある場合は、「イベント ハブを作成する」を参照してください。

イベント モデルと種類

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

Azure Event GridがAzure Machine Learningなどのソースを Azure Functions や Logic Apps などのイベント ハンドラーに接続する方法を示す図。

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

Azure Machine Learning のイベントの種類

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

イベントの種類 説明
Microsoft.MachineLearningServices.RunCompleted 機械学習の実験の実行が完了したときに発生します
Microsoft.MachineLearningServices.ModelRegistered 新しいモデルまたはモデルバージョンが正常に登録されたときに発生します
Microsoft.MachineLearningServices.ModelDeployed 1 つ以上のモデルがエンドポイントに正常にデプロイされたときに発生します
Microsoft.MachineLearningServices.RunStatusChanged 実行状態が変化した際に発生

イベントのフィルターと購読

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

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

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

  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.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 イベントを処理するアプリケーションは、いくつかの推奨される手法に従う必要があります。

  • 複数のサブスクリプションで同じイベント ハンドラーにイベントをルーティングできるため、イベントが特定のソースからのイベントであると想定しないでください。 メッセージのトピックを調べて、期待する機械学習ワークスペースから送信されていることを確認します。
  • 同様に、eventType が処理できることを確認します。 受け取るすべてのイベントが予期した種類であるとは考えないでください。
  • メッセージは順不同で到着したり、少し遅れて到着する可能性があるので、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 パイプライン
  • Azure プラットフォームまたは他の場所でホストできる汎用 Webhook

Azure Portal での設定

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

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

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

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

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

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

    スクリーンショットには、[イベント ハブの選択] を開いた状態の [イベント サブスクリプションの作成] ペインが表示されています。

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

サブスクリプションが作成されたことを確認するには、ワークスペースで [イベント>イベント サブスクリプション] を選択し、新しいサブスクリプションが一覧に表示されることを確認します。

CLI でセットアップ

最新のAzure CLIをインストールするか、Azure サブスクリプションの一部として提供されているAzure Cloud Shellを使用できます。 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"

サブスクリプションが正常に作成されたことを確認するには、次を実行します。

az eventgrid event-subscription show \
  --name {eventGridFilterName} \
  --source-resource-id /subscriptions/{subId}/resourceGroups/{RG}/providers/Microsoft.MachineLearningServices/workspaces/{wsName}

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

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

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

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

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

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

  3. 通知を受け取るイベントを選択します。 たとえば、次のスクリーンショットは RunCompleted を示しています。

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

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

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

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

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

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

  6. アラートが機能することを確認するには、トレーニングの実行を完了するなど、条件を満たすイベントをトリガーし、指定された受信者に電子メールが届くかどうかを確認します。

次のステップ

Event Grid の詳細を確認し、Azure Machine Learningイベントを試すには、次を参照してください。