다음을 통해 공유


실시간 유추를 위해 배포된 모델에서 프로덕션 데이터 수집

적용 대상:Azure CLI ml 확장 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 RBAC(Azure 역할 기반 액세스 제어)는 Azure Machine Learning의 작업에 대한 액세스 권한을 부여하는 데 사용됩니다. 이 문서의 단계를 수행하려면 사용자 계정에 Azure Machine Learning 작업 영역에 대한 소유자 또는 기여자 역할이 할당되거나 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*를 허용하는 사용자 지정 역할이 할당되어야 합니다. 자세한 내용은 Azure Machine Learning 작업 영역 액세스 관리를 참조하세요.

모델 모니터링을 위한 사용자 지정 로깅 수행

사용자 지정 로깅을 통한 데이터 수집을 사용하면 데이터 변환 전, 도중, 후에 채점 스크립트에서 직접 Pandas DataFrames를 기록할 수 있습니다. 사용자 지정 로깅을 사용하면 표 형식 데이터가 작업 영역 Blob Storage 또는 사용자 지정 Blob Storage 컨테이너에 실시간으로 기록됩니다. 모델 모니터는 스토리지의 데이터를 사용할 수 있습니다.

사용자 지정 로깅 코드로 채점 스크립트 업데이트

시작하려면 채점 스크립트(score.py)에 사용자 지정 로깅 코드를 추가합니다. 사용자 지정 로깅을 위해서는 azureml-ai-monitoring 패키지가 필요합니다. 이 패키지에 대한 자세한 내용은 포괄적인 데이터 수집기 SDK에 대한 PyPI 페이지를 참조하세요.

  1. 채점 스크립트 상단에 다음 줄을 추가하여 azureml-ai-monitoring 패키지를 가져옵니다.

    from azureml.ai.monitoring import Collector
    
  2. init() 함수에서 데이터 수집 변수(최대 5개)를 선언합니다.

    참고 항목

    Collector 개체에 model_inputsmodel_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을 기록합니다. contextcollect()에 대한 첫 번째 호출에서 반환되며 나중에 모델 입력과 모델 출력을 상호 관련시키는 정보를 포함합니다.

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

    참고 항목

    현재 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 DataFrame을 로깅하는 것 외에도 원하는 고유 ID로 데이터를 로깅할 수 있습니다. 이러한 ID는 애플리케이션, 외부 시스템에서 가져오거나 생성할 수 있습니다. 이 섹션에 자세히 설명된 대로 사용자 지정 ID를 제공하지 않으면 데이터 수집기가 나중에 모델의 입력과 출력을 상호 연결하는 데 도움이 되도록 고유한 correlationid를 자동 생성합니다. 사용자 지정 ID를 제공하면 기록된 데이터의 correlationid 필드에 제공된 사용자 지정 ID 값이 포함됩니다.

  1. 먼저 이전 섹션의 단계를 완료한 후 채점 스크립트에 다음 줄을 추가하여 azureml.ai.monitoring.context 패키지를 가져옵니다.

    from azureml.ai.monitoring.context import BasicCorrelationContext
    
  2. 채점 스크립트에서 BasicCorrelationContext 개체를 인스턴스화하고 해당 행에 대해 기록하려는 id를 전달합니다. Blob Storage에서 기록된 각 행을 고유하게 식별할 수 있도록 이 id를 시스템의 고유 ID로 사용하는 것이 좋습니다. 이 개체를 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. 모델 입력과 출력이 함께 기록된 동일한 고유 ID를 가지며 나중에 쉽게 상호 관련될 수 있도록 컨텍스트를 outputs_collector에 전달하는지 확인합니다.

      # 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를 자동 생성하고 JSON 개체의 correlationid 필드에 이 자동 생성된 ID를 포함합니다. JSON 스키마에 대한 자세한 내용은 Blob Storage에 수집된 데이터 저장을 참조하세요.

데이터 수집기는 서로 근접한 요청을 일괄 처리하므로, 프로덕션 데이터 로깅에 고유한 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: 스토리지의 데이터를 분할하는 비율입니다. Minute, Hour, Day, Month 또는 Year 값 중에서 선택합니다.
  • data_collector.sampling_rate: 수집할 데이터의 백분율(소수점 비율로 표시)입니다. 예를 들어, 1.0 값은 데이터의 100% 수집을 나타냅니다.
  • data_collector.collections.<collection_name>.data.name: 수집된 데이터에 등록할 데이터 자산의 이름입니다.
  • data_collector.collections.<collection_name>.data.path: 수집된 데이터가 데이터 자산으로 등록되어야 하는 전체 Azure Machine Learning 데이터 저장소 경로입니다.
  • data_collector.collections.<collection_name>.data.version: Blob Storage에 수집된 데이터에 등록할 데이터 자산의 버전입니다.

사용자 지정 Blob Storage 컨테이너에 데이터 수집

다음 단계에 따라 데이터 수집기를 사용하여 프로덕션 유추 데이터를 사용자 지정 Blob Storage 컨테이너에 수집할 수 있습니다.

  1. 스토리지 컨테이너를 Azure Machine Learning 데이터 저장소에 연결합니다. 스토리지 컨테이너를 Azure Machine Learning 데이터 저장소에 연결하는 방법에 대한 자세한 내용은 데이터 저장소 만들기를 참조하세요.

  2. Azure Machine Learning 엔드포인트에 데이터 저장소 대상에 쓰는 데 필요한 권한이 있는지 확인합니다.

    데이터 수집기는 SAMI(시스템 할당 관리 ID)와 UAMI(사용자 할당 관리 ID)를 모두 지원합니다. 엔드포인트에 ID를 추가합니다. 데이터 대상으로 사용할 Blob Storage 컨테이너를 사용하여 이 ID에 Storage Blob Data Contributor 역할을 할당합니다. Azure에서 관리 ID를 사용하는 방법을 알아보려면 관리 ID에 Azure 역할 할당을 참조하세요.

  3. 각 컬렉션 내에 data 속성을 포함하도록 배포 YAML을 업데이트합니다.

    • 필수 매개 변수인 data.name은 수집된 데이터에 등록할 데이터 자산의 이름을 지정합니다.
    • 필수 매개 변수인 data.path는 Azure Blob Storage 컨테이너에 연결되는 완전한 형태의 Azure Machine Learning 데이터 저장소 경로를 지정합니다.
    • 선택적 매개 변수인 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
    

    참고 항목

    또한 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를 사용한 사용자 지정 로깅 외에도 채점 스크립트(score.py)를 보강할 필요 없이 요청 및 응답 HTTP 페이로드 데이터를 직접 수집할 수 있습니다.

  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 Storage로 이동합니다. 다음 JSON 코드는 수집된 HTTP 요청의 예입니다.

{"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 응답의 또 다른 예입니다.

{"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 Storage에 저장

데이터 수집을 사용하면 선택한 Blob Storage 대상에 프로덕션 유추 데이터를 기록할 수 있습니다. 데이터 대상 설정은 collection_name 수준에서 구성할 수 있습니다.

Blob Storage 출력/형식:

  • 기본적으로 수집된 데이터는 작업 영역 Blob Storage의 다음 경로에 저장됩니다. azureml://datastores/workspaceblobstore/paths/modelDataCollector.

  • Blob의 최종 경로에는 {endpoint_name}/{deployment_name}/{collection_name}/{yyyy}/{MM}/{dd}/{HH}/{instance_id}.jsonl이 추가됩니다.

  • 파일의 각 줄은 기록된 단일 유추 요청/응답을 나타내는 JSON 개체입니다.

참고 항목

collection_name은 데이터 수집 이름(예: model_inputs 또는 model_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 파일에는 줄 바꿈이 없습니다.

대용량 페이로드 저장

데이터의 페이로드가 4MB보다 큰 경우 원시 파일 경로를 가리키는 {endpoint_name}/{deployment_name}/request/.../{instance_id}.jsonl 경로에 포함된 {instance_id}.jsonl 파일에 이벤트가 발생합니다. 이 경로는 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를 포함하는 방법에 대한 자세한 내용은 모델 성능 모니터링을 위한 데이터 수집을 참조하세요.

다음은 함께 일괄 처리되는 두 개의 기록된 요청의 예입니다.

{"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. Datastores로 이동하여 workspaceblobstore(기본값)을 선택합니다.

    AzureML 작업 영역의 데이터 저장소 페이지를 강조하는 스크린샷

  3. 수집된 프로덕션 데이터를 보려면 찾아보기 메뉴를 사용합니다.

    데이터 저장소의 데이터 트리 구조를 강조한 스크린샷

MLflow 모델에 대한 데이터 수집

Azure Machine Learning 온라인 엔드포인트에 MLflow 모델을 배포하는 경우 스튜디오 UI에서 단일 토글을 사용하여 프로덕션 유추 데이터 수집을 사용하도록 설정할 수 있습니다. 데이터 수집이 켜져 있으면 Azure Machine Learning은 사용자 지정 로깅 코드를 사용하여 채점 스크립트를 자동 계측하여 프로덕션 데이터가 작업 영역 Blob Storage에 기록되도록 합니다. 그러면 모델 모니터는 데이터를 사용하여 프로덕션에서 MLflow 모델의 성능을 모니터링할 수 있습니다.

모델 배포를 구성하는 동안 프로덕션 데이터 수집을 사용하도록 설정할 수 있습니다. 배포 탭에서 데이터 수집에 대해 사용을 선택합니다.

데이터 수집을 사용하도록 설정하면 프로덕션 유추 데이터가 Azure Machine Learning 작업 영역 Blob Storage에 기록되고 이름이 <endpoint_name>-<deployment_name>-model_inputs<endpoint_name>-<deployment_name>-model_outputs인 두 개의 데이터 자산이 만들어집니다. 이러한 데이터 자산은 프로덕션에서 배포를 사용할 때 실시간으로 업데이트됩니다. 그러면 모델 모니터가 데이터 자산을 사용하여 프로덕션에서 모델 성능을 모니터링할 수 있습니다.