Share via


リアルタイム推論用にデプロイされたモデルから運用データを収集する

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

この記事では、Azure Machine Learning データ コレクターを使用して、Azure Machine Learning マネージド オンライン エンドポイントまたは Kubernetes オンライン エンドポイントにデプロイされたモデルから運用推論データを収集する方法について説明します。

新しいまたは既存のオンライン エンドポイント デプロイのデータ コレクションを有効にすることができます。 Azure Machine Learning データ コレクターは、Azure Blob Storage 内の推論データをログします。 Python SDK で収集されたデータは、Azure Machine Learning ワークスペースでデータ資産として自動的に登録されます。 このデータ資産は、モデルの監視に使用できます。

リアルタイム エンドポイントにデプロイされた MLflow モデルの運用推論データの収集に関心がある場合は、「MLflow モデルのデータ コレクション」を参照してください。

前提条件

この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。

  • Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure Machine Learning の操作に対するアクセスを許可するために使用されます。 この記事の手順を実行するには、ユーザー アカウントに、Azure Machine Learning ワークスペースの所有者共同作成者ロール、または Microsoft.MachineLearningServices/workspaces/onlineEndpoints/* を許可するカスタム ロールを割り当てる必要があります。 詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理」を参照してください。

モデル監視のためのカスタム ログを実行する

カスタム ログによるデータ コレクションを使用すると、データの変換前、変換中、変換後にスコアリング スクリプトから直接 pandas DataFrame をログできます。 カスタム ログを使用すると、表形式データがワークスペース Blob Storage またはカスタム BLOB ストレージ コンテナーにリアルタイムでログ記録されます。 モデル モニターは、ストレージからのデータを使用できます。

スコアリング スクリプトをカスタム ログ コードで更新する

まず、カスタム ログ コードをスコアリング スクリプト (score.py) に追加します。 カスタム ログには、azureml-ai-monitoring パッケージが必要です。 このパッケージの詳細については、包括的な「PyPI のデータ コレクター SDK に関するページ」を参照してください。

  1. スコアリング スクリプトの先頭に次の行を追加して、azureml-ai-monitoring パッケージをインポートします。

    from azureml.ai.monitoring import Collector
    
  2. init() 関数でデータ コレクション変数 (最大 5 つ) を宣言します。

    Note

    Collector オブジェクトに名前 model_inputs および model_outputs を使用すると、モデル監視システムでは、自動的に登録されたデータ資産が自動的に認識され、よりシームレスなモデル監視エクスペリエンスが提供されます。

    global inputs_collector, outputs_collector
    inputs_collector = Collector(name='model_inputs')          
    outputs_collector = Collector(name='model_outputs')
    

    既定では、データ コレクション中に障害が発生した場合、Azure Machine Learning により例外が発生します。 必要に応じて、on_error パラメーターを使用して、ログ障害が発生した場合に実行する関数を指定できます。 たとえば、次のコードで on_error パラメーターを使用すると、Azure Machine Learning では、例外をスローするのではなくエラーをログします。

    inputs_collector = Collector(name='model_inputs', on_error=lambda e: logging.info("ex:{}".format(e)))
    
  3. run() 関数で、collect() 関数を使用して、スコアリングの前後に DataFrame をログします。 context は、最初の呼び出しから collect() に返されます。これには、モデルの入力とモデルの出力を後で関連付けるための情報が含まれます。

    context = inputs_collector.collect(data) 
    result = model.predict(data)
    outputs_collector.collect(result, context)
    

    Note

    現在、collect() API は pandas DataFrames のみをログに記録します。 collect() に渡されたときに DataFrame にデータがない場合、ストレージにはログされず、エラーが報告されます。

次のコードは、カスタム ログ Python SDK を使用する完全なスコアリング スクリプト (score.py) の例です。

import pandas as pd
import json
from azureml.ai.monitoring import Collector

def init():
  global inputs_collector, outputs_collector, inputs_outputs_collector

  # instantiate collectors with appropriate names, make sure align with deployment spec
  inputs_collector = Collector(name='model_inputs')                    
  outputs_collector = Collector(name='model_outputs')

def run(data): 
  # json data: { "data" : {  "col1": [1,2,3], "col2": [2,3,4] } }
  pdf_data = preprocess(json.loads(data))
  
  # tabular data: {  "col1": [1,2,3], "col2": [2,3,4] }
  input_df = pd.DataFrame(pdf_data)

  # collect inputs data, store correlation_context
  context = inputs_collector.collect(input_df)

  # perform scoring with pandas Dataframe, return value is also pandas Dataframe
  output_df = predict(input_df) 

  # collect outputs data, pass in correlation_context so inputs and outputs data can be correlated later
  outputs_collector.collect(output_df, context)
  
  return output_df.to_dict()
  
def preprocess(json_data):
  # preprocess the payload to ensure it can be converted to pandas DataFrame
  return json_data["data"]

def predict(input_df):
  # process input and return with outputs
  ...
  
  return output_df

カスタムな一意の ID をログに記録するようにスコアリング スクリプトを更新する

スコアリング スクリプト内で pandas DataFrames を直接ログ記録することに加え、選択した一意の ID を使用してデータをログに記録することもできます。 これらの ID は、アプリケーションや外部システムから取得することも、自分で生成することもできます。 このセクションで詳しく説明するように、カスタム ID を指定しない場合、データ コレクターは一意の correlationid を自動生成するので、後でモデルの入力と出力を関連付けるのに役立ちます。 カスタム ID を指定した場合、 ログ データの correlationid フィールドには、指定したカスタム ID の値が含まれます。

  1. まず、前のセクションの手順を完了してから、以下の行をスコアリング スクリプトに追加して、azureml.ai.monitoring.context パッケージをインポートします。

    from azureml.ai.monitoring.context import BasicCorrelationContext
    
  2. スコアリング スクリプトで、BasicCorrelationContext オブジェクトをインスタンス化し、行のログ記録を行なう id に渡します。 この id はシステムにおいて一意の ID にすることをお勧めします。これにより、Blob Storage からログに記録された各行を一意に識別できます。 このオブジェクトをパラメーターとして collect() API 呼び出しに渡します。

      # create a context with a custom unique id
      artificial_context = BasicCorrelationContext(id='test')
    
      # collect inputs data, store correlation_context
      context = inputs_collector.collect(input_df, artificial_context)
    
  3. outputs_collector 内への受け渡しは、必ずコンテキストで行ないます。モデルの入力と出力が同じ一意の ID を持ち、それらでログに記録されるので、後で簡単に関連付けられるようになります。

      # collect outputs data, pass in context so inputs and outputs data can be correlated later
      outputs_collector.collect(output_df, context)
    

次のコードは、カスタムの一意の ID をログに記録する、完全なスコアリング スクリプト (score.py) の例です。

import pandas as pd
import json
from azureml.ai.monitoring import Collector
from azureml.ai.monitoring.context import BasicCorrelationContext

def init():
  global inputs_collector, outputs_collector, inputs_outputs_collector

  # instantiate collectors with appropriate names, make sure align with deployment spec
  inputs_collector = Collector(name='model_inputs')                    
  outputs_collector = Collector(name='model_outputs')

def run(data): 
  # json data: { "data" : {  "col1": [1,2,3], "col2": [2,3,4] } }
  pdf_data = preprocess(json.loads(data))
  
  # tabular data: {  "col1": [1,2,3], "col2": [2,3,4] }
  input_df = pd.DataFrame(pdf_data)

  # create a context with a custom unique id
  artificial_context = BasicCorrelationContext(id='test')

  # collect inputs data, store correlation_context
  context = inputs_collector.collect(input_df, artificial_context)

  # perform scoring with pandas Dataframe, return value is also pandas Dataframe
  output_df = predict(input_df) 

  # collect outputs data, pass in context so inputs and outputs data can be correlated later
  outputs_collector.collect(output_df, context)
  
  return output_df.to_dict()
  
def preprocess(json_data):
  # preprocess the payload to ensure it can be converted to pandas DataFrame
  return json_data["data"]

def predict(input_df):
  # process input and return with outputs
  ...
  
  return output_df

モデル パフォーマンス モニタリング用のデータを収集する

収集したデータをモデルのパフォーマンス モニタリングに使用したい場合は、ログに記録された各行に一意の correlationid が存在することが重要です。これは、対象のデータが使用可能になったときに、そのデータを真のデータと関連付けるために使用できます。 データ コレクターは、ログに記録された行ごとに一意の correlationid を自動生成し、この生成された ID を JSON オブジェクトの correlationid フィールドに含めます。 JSON スキーマの詳細情報については、「収集されたデータを BLOB ストレージに格納する」を参照してください。

互いに近接する要求同士はデータ コレクターによりバッチされるため、運用データのログ記録に独自の一意の ID を使用したい場合は、その ID を pandas DataFrame での個別の列としてログ記録することをお勧めします。 この correlationid を個別の 列としてログに記録することで、真のデータとの統合用に、すぐにダウンストリームできるようになります。

依存関係を更新する

更新されたスコアリング スクリプトを使用してデプロイを作成する前に、基本イメージ mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04 と適切な conda 依存関係を使用して環境を作成する必要があります。 その後、次の YAML 内の仕様を使用して環境を構築できます。

channels:
  - conda-forge
dependencies:
  - python=3.8
  - pip=22.3.1
  - pip:
      - azureml-defaults==1.38.0
      - azureml-ai-monitoring~=0.1.0b1
name: model-env

デプロイ YAML を更新する

次に、デプロイ YAML を作成します。 デプロイ YAML を作成するには、data_collector 属性を含め、カスタム ログ Python SDK を使用して先ほどインスタンス化した Collector オブジェクト (model_inputsmodel_outputs) のデータ収集を有効にします。

data_collector:
  collections:
    model_inputs:
      enabled: 'True'
    model_outputs:
      enabled: 'True'

次のコードは、マネージド オンライン エンドポイント デプロイ用の包括的なデプロイ YAML の例です。 シナリオに従ってデプロイ YAML を更新する必要があります。 推論データ ログ用にデプロイ YAML を書式設定する方法の詳細な例については、Azure モデル データ コレクターの例に関する記事を参照してください。

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my_endpoint
model: azureml:iris_mlflow_model@latest
environment:
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
  conda_file: model/conda.yaml
code_configuration:
  code: scripts
  scoring_script: score.py
instance_type: Standard_F2s_v2
instance_count: 1
data_collector:
  collections:
    model_inputs:
      enabled: 'True'
    model_outputs:
      enabled: 'True'

必要に応じて、data_collector の次の追加パラメーターを調整できます。

  • data_collector.rolling_rate: ストレージ内のデータをパーティション分割する速度。 MinuteHourDayMonth、または Year の値から選択します。
  • data_collector.sampling_rate: 収集するデータの割合 (10 進数の割合として表されます)。 たとえば、値 1.0 は、データを 100% 収集することを表します。
  • data_collector.collections.<collection_name>.data.name: 収集されたデータと共に登録するデータ資産の名前。
  • data_collector.collections.<collection_name>.data.path: 収集されたデータをデータ資産として登録する必要がある Machine Learning データストアの完全パス。
  • data_collector.collections.<collection_name>.data.version: 収集されたデータと共に BLOB ストレージに登録されるデータ資産のバージョン。

カスタム BLOB ストレージ コンテナーにデータを収集する

次の手順に従って、データ コレクターを使用して、運用の推論データをカスタム BLOB ストレージ コンテナーに収集できます。

  1. ストレージ コンテナーを Azure Machine Learning データストアに接続します。 ストレージ コンテナーを Azure Machine Learning データストアに接続する方法の詳細については、データストアの作成 に関するページを参照してください。

  2. Azure Machine Learning エンドポイントにデータストアの宛先に書き込むのに必要な権限があることを確認します。

    データ コレクターは、システム割り当てマネージド ID (SAMI) とユーザー割り当てマネージド ID (UAMI) の両方をサポートしています。 エンドポイントに ID を追加します。 この ID にデータの宛先として使用される BLOB ストレージ コンテナーに関するロール Storage Blob Data Contributor を割り当てます。 Azure でマネージド ID を使用する方法については、「マネージド ID への Azure ロールの割り当て」を参照してください。

  3. デプロイ YAML を更新して、各コレクション内に data プロパティを含めます。

    • 必須パラメーター data.name では、収集されたデータに関して登録されるデータ資産の名前を指定します。
    • 必須パラメーター data.path は、完全形式の Azure Machine Learning データストア パスを指定し、これは Azure Blob Storage コンテナーに接続されます。
    • 省略可能なdata.version パラメーターは、データ資産のバージョンを指定します (既定値は 1)。

    次の YAML 構成は、各コレクション内に data プロパティを含める方法の例を示しています。

    data_collector:
      collections:
        model_inputs:
          enabled: 'True'
          data: 
            name: my_model_inputs_data_asset
            path: azureml://datastores/workspaceblobstore/paths/modelDataCollector/my_endpoint/blue/model_inputs
            version: 1
        model_outputs:
          enabled: 'True'
          data: 
            name: my_model_outputs_data_asset
            path: azureml://datastores/workspaceblobstore/paths/modelDataCollector/my_endpoint/blue/model_outputs 
            version: 1
    

    Note

    data.path パラメーターを使用して、azureml://subscriptions/<sub_id>/resourcegroups/<rg_name>/workspaces/<ws_name>/datastores/<datastore_name>/paths/<path> 形式に従うパスを指定することで、さまざまな Azure サブスクリプション内のデータストアを指定することもできます。

データ コレクションを使用してデプロイを作成する

カスタム ログを有効にしてモデルをデプロイする:

$ az ml online-deployment create -f deployment.YAML

Kubernetes オンライン エンドポイントを使用してデータ コレクション用にデプロイ YAML を書式設定する方法について詳しくは、「CLI (v2) Azure Arc 対応 Kubernetes オンライン デプロイ YAML スキーマ」を参照してください。

マネージド オンライン エンドポイントを使用してデータ コレクション用にデプロイ YAML を書式設定する方法について詳しくは、「CLI (v2) マネージド オンライン デプロイ YAML スキーマ」を参照してください。

ペイロードのログ記録を実行する

提供された Python SDK を使用したカスタム ログに加えて、要求および応答 HTTP ペイロード データを直接収集することもできます。スコアリング スクリプト (score.py) を拡張する必要はありません。

  1. ペイロード ログを有効にするには、デプロイ YAML で、名前 requestresponse を使用します。

    $schema: http://azureml/sdk-2-0/OnlineDeployment.json
    
    endpoint_name: my_endpoint 
    name: blue 
    model: azureml:my-model-m1:1 
    environment: azureml:env-m1:1 
    data_collector:
       collections:
           request:
               enabled: 'True'
           response:
               enabled: 'True'
    
  2. ペイロード ログを有効にしてモデルをデプロイする:

    $ az ml online-deployment create -f deployment.YAML
    

ペイロード ログの場合、収集されたデータが表形式であることは保証されません。 そのため、収集したペイロード データをモデル監視で使用する場合は、データを表形式にするための前処理コンポーネントを提供する必要があります。 シームレスなモデル監視エクスペリエンスに関心がある場合は、カスタム ログ Python SDK を使用することをお勧めします。

デプロイが使用されると、収集されたデータがワークスペース BLOB ストレージに流れます。 次の JSON コードは、HTTP "要求" で収集された JSON の例です。

{"specversion":"1.0",
"id":"19790b87-a63c-4295-9a67-febb2d8fbce0",
"source":"/subscriptions/d511f82f-71ba-49a4-8233-d7be8a3650f4/resourceGroups/mire2etesting/providers/Microsoft.MachineLearningServices/workspaces/mirmasterenvws/onlineEndpoints/localdev-endpoint/deployments/localdev",
"type":"azureml.inference.request",
"datacontenttype":"application/json",
"time":"2022-05-25T08:59:48Z",
"data":{"data": [  [1,2,3,4,5,6,7,8,9,10], [10,9,8,7,6,5,4,3,2,1]]},
"path":"/score",
"method":"POST",
"contentrange":"bytes 0-59/*",
"correlationid":"f6e806c9-1a9a-446b-baa2-901373162105","xrequestid":"f6e806c9-1a9a-446b-baa2-901373162105"}

次の JSON コードは、HTTP "応答" で収集されたその他の JSON の例です。

{"specversion":"1.0",
"id":"bbd80e51-8855-455f-a719-970023f41e7d",
"source":"/subscriptions/d511f82f-71ba-49a4-8233-d7be8a3650f4/resourceGroups/mire2etesting/providers/Microsoft.MachineLearningServices/workspaces/mirmasterenvws/onlineEndpoints/localdev-endpoint/deployments/localdev",
"type":"azureml.inference.response",
"datacontenttype":"application/json",
"time":"2022-05-25T08:59:48Z",
"data":[11055.977245525679, 4503.079536107787],
"contentrange":"bytes 0-38/39",
"correlationid":"f6e806c9-1a9a-446b-baa2-901373162105","xrequestid":"f6e806c9-1a9a-446b-baa2-901373162105"}

収集したデータを BLOB ストレージに格納する

データ コレクションを使用すると、運用環境の推論データを、選択した Blob Storage の宛先にログ記録できます。 データ変換先の設定は、collection_name レベルで構成が可能です。

BLOB ストレージの出力と形式:

  • 既定では、収集されたデータは、ワークスペース Blob Storage のパス azureml://datastores/workspaceblobstore/paths/modelDataCollector に格納されます。

  • BLOB 内の最後のパスには、{endpoint_name}/{deployment_name}/{collection_name}/{yyyy}/{MM}/{dd}/{HH}/{instance_id}.jsonl が追加されます。

  • ファイル内の各行は、ログされた単一の推論要求または応答を表す JSON オブジェクトです。

Note

collection_name は、データコレクション名 (model_inputsmodel_outputs など) を参照します。 instance_id は、ログされたデータのグループを識別する一意の ID です。

収集されたデータは、次の JSON スキーマに従います。 収集されたデータは data キーから入手でき、追加のメタデータが提供されます。

{"specversion":"1.0",
"id":"725aa8af-0834-415c-aaf5-c76d0c08f694",
"source":"/subscriptions/636d700c-4412-48fa-84be-452ac03d34a1/resourceGroups/mire2etesting/providers/Microsoft.MachineLearningServices/workspaces/mirmasterws/onlineEndpoints/localdev-endpoint/deployments/localdev",
"type":"azureml.inference.inputs",
"datacontenttype":"application/json",
"time":"2022-12-01T08:51:30Z",
"data":[{"label":"DRUG","pattern":"aspirin"},{"label":"DRUG","pattern":"trazodone"},{"label":"DRUG","pattern":"citalopram"}],
"correlationid":"3711655d-b04c-4aa2-a6c4-6a90cbfcb73f","xrequestid":"3711655d-b04c-4aa2-a6c4-6a90cbfcb73f",
"modelversion":"default",
"collectdatatype":"pandas.core.frame.DataFrame",
"agent":"monitoring-sdk/0.1.2",
"contentrange":"bytes 0-116/117"}

ヒント

改行は、読みやすくするためにのみ示されています。 収集された .jsonl ファイルには、改行は含まれていません。

大きなペイロードを格納する

データのペイロードが 4 MB を超える場合、生のファイル パスを指す {endpoint_name}/{deployment_name}/request/.../{instance_id}.jsonl パス内に含まれる {instance_id}.jsonl ファイル内に 1 つのイベントが存在します。これには、パス blob_url/{blob_container}/{blob_path}/{endpoint_name}/{deployment_name}/{rolled_time}/{instance_id}.jsonl が含まれています。 収集されたデータは、このパスに存在します。

バイナリ データを格納する

収集されたバイナリ データを使用して生のファイルを直接表示します。ファイル名として instance_id が使用されます。 バイナリ データは、rolling_rate に基づいて、要求ソース グループ パスと同じフォルダーに配置されます。 次の例は、データ フィールドのパスを反映しています。 形式は JSON で、改行は読みやすくするためにのみ示されています。

{
"specversion":"1.0",
"id":"ba993308-f630-4fe2-833f-481b2e4d169a",
"source":"/subscriptions//resourceGroups//providers/Microsoft.MachineLearningServices/workspaces/ws/onlineEndpoints/ep/deployments/dp",
"type":"azureml.inference.request",
"datacontenttype":"text/plain",
"time":"2022-02-28T08:41:07Z",
"data":"https://masterws0373607518.blob.core.windows.net/modeldata/mdc/%5Byear%5D%5Bmonth%5D%5Bday%5D-%5Bhour%5D_%5Bminute%5D/ba993308-f630-4fe2-833f-481b2e4d169a",
"path":"/score?size=1",
"method":"POST",
"contentrange":"bytes 0-80770/80771",
"datainblob":"true"
}

データ コレクターのバッチ処理

要求が互いに短い時間間隔で送信された場合、データ コレクターはそれらを同じ JSON オブジェクトの中にバッチ処理します。 たとえば、サンプル データをエンドポイントに送信するスクリプトを実行し、デプロイでデータ収集が有効になっている場合には、それらの間の時間間隔に応じて、一部の要求がバッチ処理されることがあります。 Azure Machine Learning モデルモニタリングでデータ収集を使用している場合、このモデルモニタリング サービスは各要求を個別に処理します。 ただし、ログに記録された各データ行に独自で一意の correlationid が含まれることが想定される場合は、データ コレクターを使用してログ記録する pandas DataFrame に、列として correlationid を含めることができます。 pandas DataFrame に列として一意の correlationid を含める方法の詳細については、「モデル パフォーマンスの監視のためのデータ収集」を参照してください。

互いにバッチされログ記録された 2 つの要求の例を次に示します。

{"specversion":"1.0",
"id":"720b8867-54a2-4876-80eb-1fd6a8975770",
"source":"/subscriptions/79a1ba0c-35bb-436b-bff2-3074d5ff1f89/resourceGroups/rg-bozhlinmomoignite/providers/Microsoft.MachineLearningServices/workspaces/momo-demo-ws/onlineEndpoints/credit-default-mdc-testing-4/deployments/main2",
"type":"azureml.inference.model_inputs",
"datacontenttype":"application/json",
"time":"2024-03-05T18:16:25Z",
"data":[{"LIMIT_BAL":502970,"AGE":54,"BILL_AMT1":308068,"BILL_AMT2":381402,"BILL_AMT3":442625,"BILL_AMT4":320399,"BILL_AMT5":322616,"BILL_AMT6":397534,"PAY_AMT1":17987,"PAY_AMT2":78764,"PAY_AMT3":26067,"PAY_AMT4":24102,"PAY_AMT5":-1155,"PAY_AMT6":2154,"SEX":2,"EDUCATION":2,"MARRIAGE":2,"PAY_0":0,"PAY_2":0,"PAY_3":0,"PAY_4":0,"PAY_5":0,"PAY_6":0},{"LIMIT_BAL":293458,"AGE":35,"BILL_AMT1":74131,"BILL_AMT2":-71014,"BILL_AMT3":59284,"BILL_AMT4":98926,"BILL_AMT5":110,"BILL_AMT6":1033,"PAY_AMT1":-3926,"PAY_AMT2":-12729,"PAY_AMT3":17405,"PAY_AMT4":25110,"PAY_AMT5":7051,"PAY_AMT6":1623,"SEX":1,"EDUCATION":3,"MARRIAGE":2,"PAY_0":-2,"PAY_2":-2,"PAY_3":-2,"PAY_4":-2,"PAY_5":-1,"PAY_6":-1}],
"contentrange":"bytes 0-6794/6795",
"correlationid":"test",
"xrequestid":"test",
"modelversion":"default",
"collectdatatype":"pandas.core.frame.DataFrame",
"agent":"azureml-ai-monitoring/0.1.0b4"}

スタジオ UI でデータを表示する

スタジオ UI から Blob Storage 内の収集されたデータを表示するには、次の手順を行います。

  1. Azure Machine Learning ワークスペースの [データ] タブに移動します。

    Azure Machine Learning ワークスペースの [データ] ページを強調表示しているスクリーンショット

  2. [データストア] に移動し、[workspaceblobstore (既定値)] を選択します。

    AzureML ワークスペースの [データストア] ページを強調表示しているスクリーンショット

  3. [参照] メニューを使用して、収集された運用データを表示します。

    [データストア] 内のデータのツリー構造を強調表示しているスクリーンショット

MLflow モデルのデータを収集する

MLflow モデルを Azure Machine Learning オンライン エンドポイントにデプロイしている場合は、スタジオ UI の単一のトグルで運用推論データの収集を有効にできます。 データ コレクションをオンにすると、Azure Machine Learning はカスタム ログ コードを使用してスコアリング スクリプトを自動的にインストルメント化し、運用データがワークスペース Blob Storage に確実にログされるようになります。 その後、モデル モニターはデータを使用して、運用環境での MLflow モデルのパフォーマンスを監視できます。

モデルのデプロイを構成している間に、運用データ収集を有効にすることができます。 [デプロイ] タブで、[データ収集][有効] を選びます。

データ収集を有効にすると、運用推論データが Azure Machine Learning ワークスペース Blob Storage にログされ、<endpoint_name>-<deployment_name>-model_inputs<endpoint_name>-<deployment_name>-model_outputs という名前の 2 つのデータ資産が作成されます。 これらのデータ資産は、デプロイを運用環境で使用するとリアルタイムで更新されます。 その後、モデル モニターはデータ資産を使用して、運用環境でのモデルのパフォーマンスを監視できます。