Microsoft Azure ML Service 프레임워크

마지막 업데이트 날짜: 2024년 11월 22일
Microsoft Azure ML Service 프레임워크

Microsoft Azure ML 서비스를 사용하여 페이로드 로깅, 피드백 로깅을 수행하고 모델 평가를 위한 성능 정확도, 런타임 편향 탐지, 설명 가능성 및 자동 편향 제거 기능을 측정할 수 있습니다.

모델 평가에는 다음 Microsoft Azure Machine Learning 서비스 프레임워크가 지원됩니다:

테이블 1. 프레임워크 지원 세부사항

프레임워크 지원 세부사항
프레임워크 문제점 유형 데이터 유형
원시 분류 구조화됨
scikit-learn 분류 구조화됨
scikit-learn 회귀 구조화됨

드리프트 감지 모델을 생성하려면 노트북에서 scikit-learn 버전 0.20.2를 사용해야 합니다.

Azure 자동화된 Machine Learning 관리 엔드포인트와 모델 평가를 위한 노트북으로 Azure 모델을 관리합니다.

Microsoft Azure ML 서비스 추가

다음 방법 중 하나를 사용하여 Microsoft Azure ML Service에서 작동하도록 모델 평가를 구성할 수 있습니다.

  • 처음으로 머신 러닝 공급자를 추가하는 경우 구성 인터페이스를 사용할 수 있습니다. 자세한 정보는 Microsoft Azure ML Service 인스턴스 지정을 참조하십시오.
  • Python SDK를 사용하여 기계 학습 제공자를 추가할 수도 있습니다. 둘 이상의 제공자를 원하는 경우 이 방법을 사용해야 합니다. 자세한 정보는 Microsoft Azure 머신 러닝 엔진 추가를 참조하십시오.

Azure ML 서비스와 상호 작용하는 데 필요한 다양한 REST 엔드포인트가 호출됩니다. 이렇게 하려면 Azure Machine Learning Service를 바인딩해야 합니다.

  1. Azure Active Directory Service 프린시펄을 작성하십시오.
  2. UI 또는 Python SDK를 통해 Azure ML Service 서비스 바인딩을 추가할 때 자격 증명 세부 정보를 지정하세요.

JSON 요청 및 응답 파일에 대한 요구사항

Azure ML Service에서 모델 평가를 수행하려면 만든 웹 서비스 배포가 특정 요구 사항을 충족해야 합니다. 아래에 설명된 요구사항에 따라, 작성하는 웹 서비스 배치에서는 JSON 요청을 승인하고 JSON 응답을 리턴해야 합니다.

필요한 웹 서비스 JSON 요청 형식

  • REST API 요청 본문은 JSON 오브젝트의 하나의 JSON 배열이 포함된 문서여야 합니다.
  • JSON 배열의 이름은 "input"로 지정되어야 합니다.
  • 각 JSON 오브젝트에는 단순 키-값 쌍만 포함될 수 있으며, 여기서 값은 문자열, 숫자, true, false 또는 null일 수 있습니다.
  • 값은 JSON 오브젝트 또는 배열이 될 수 없습니다.
  • 배열의 각 JSON 오브젝트는 사용 가능한 비null 값이 있는지 여부에 관계없이 지정된 동일한 키(및 키의 수)를 모두 지정해야 함

다음 샘플 JSON 파일은 앞에 나온 요구사항을 충족해야 하고 자체 JSON 요청 파일을 작성하기 위해 템플리트로 사용될 수 있습니다.

{
  "input": [
    {
      "field1": "value1",
      "field2": 31,
      "field3": true,
      "field4": 2.3
    },
    {
      "field1": "value2",
      "field2": 15,
      "field3": false,
      "field4": 0.1
    },
    {
      "field1": null,
      "field2": 5,
      "field3": true,
      "field4": 6.1
    }
  ]
}

필요한 웹 서비스 JSON 응답 형식

JSON 응답 파일 작성 시 다음 항목에 유의하십시오.

  • REST API 응답 본문은 JSON 오브젝트의 하나의 JSON 배열이 포함된 문서여야 합니다.

  • JSON 배열의 이름은 "output"로 지정되어야 합니다.

  • 각 JSON 오브젝트는 키-값 쌍만 포함할 수 있으며, 여기서 값은 문자열, 숫자, true, false, null 또는 다른 JSON 오브젝트 또는 배열을 포함하지 않는 배열일 수 있음

  • 값은 JSON 오브젝트가 될 수 없습니다.

  • 배열의 각 JSON 오브젝트는 사용 가능한 비null 값이 있는지 여부에 관계없이 동일한 키(및 키 수)를 지정해야 함

  • 분류 모델의 경우, 웹 서비스가 각 클래스마다 가능성이 있는 배열을 리턴해야 하고 가능성이 있는 순서 지정은 배열의 각 JSON 오브젝트마다 동일해야 합니다.

    • 예: 신용 위험이 예측된 2진 분류 모델이 있다고 가정하십시오. 여기서, 클래스는 Risk 또는 No Risk입니다.
    • "output" 배열에서 다시 리턴된 모든 결과의 경우 오브젝트는 다음 양식의 고정 순서로 확률을 포함하는 키-값 쌍을 포함해야 합니다.
    {
    "output": [
      {
        "Scored Probabilities": ["Risk" probability,"No Risk" probability
        ]
        },
        {
          "Scored Probabilities": ["Risk" probability,"No Risk" probability
            ]
           }
        ]
    

Azure ML Studio 및 Service 모두에서 사용되는 Azure ML 시각적 도구와 일치하려면 다음 키 이름을 사용하십시오.

  • 모델의 예측 값을 표시하는 출력 키의 키 이름 "Scored Labels"
  • 각 클래스의 확률 배열을 나타내는 출력 키의 키 이름 "Scored Probabilities"

다음 샘플 JSON 파일은 앞에 나온 요구사항을 충족해야 하고 자체 JSON 응답 파일을 작성하기 위해 템플리트로 사용될 수 있습니다.

{
  "output": [
    {
      "Scored Labels": "No Risk",
      "Scored Probabilities": [
        0.8922524675865824,
        0.10774753241341757
      ]
    },
    {
      "Scored Labels": "No Risk",
      "Scored Probabilities": [
        0.8335192848546905,
        0.1664807151453095
      ]
    }
  ]
}

샘플 노트북

다음 노트북에서는 Microsoft Azure ML Service에서 작동하는 방법을 보여줍니다.

Microsoft Azure ML Service 인스턴스 지정

모델 평가를 구성하는 첫 번째 단계는 Microsoft Azure ML Service 인스턴스를 지정하는 것입니다. Azure ML Service 인스턴스는 AI 모델과 배치를 저장하는 곳입니다.

AI 모델과 배포는 모델 평가를 위해 Azure ML Service 인스턴스에 연결됩니다. 서비스를 연결하려면 구성 탭 아이콘 구성 탭으로 이동하여 머신 러닝 공급자를 추가하고 편집 아이콘 편집 아이콘을 클릭합니다. 이름 및 설명 외에 환경이 사전 프로덕션 또는 프로덕션인지에 따라 다음 정보를 제공해야 합니다.

  • 클라이언트 ID: 클라이언트 ID의 실제 문자열 값입니다. 사용자를 확인하고 인증하며 Azure Service 호출 권한을 부여합니다.
  • 클라이언트 시크릿: 시크릿의 실제 문자열 값입니다. 사용자를 확인하고 인증하며 Azure Service 호출 권한을 부여합니다.
  • 테넌트: 테넌트 ID는 조직에 해당하며 Azure AD의 전용 인스턴스입니다. 테넌트 ID를 찾으려면 계정 이름 위로 마우스를 이동하여 디렉토리 및 테넌트 ID를 가져오거나 Azure 포털에서 Azure Active Directory > Properties > Directory ID를 선택하십시오.
  • 구독 ID: Microsoft Azure 구독을 고유하게 식별하는 구독 인증 정보입니다. 구독 ID는 모든 서비스 호출에 대한 URL의 일부를 구성합니다.

Microsoft Azure 인증 정보를 가져오는 방법에 대한 지시사항은 How to: Use the portal to create an Azure AD application and service principal that can access resources를 참조하십시오.

이제 배치된 모델을 선택하고 모니터를 구성할 준비가 되었습니다. 대시 보드에 모델을 배포하고 대시보드에 추가를 클릭하면 됩니다. 모니터할 배치를 선택하고 구성을 클릭하십시오.

자세한 정보는 모니터 구성을 참조하십시오.

Microsoft Azure ML Service 엔진으로 페이로드 로깅

Microsoft Azure ML Service 엔진 추가

watsonx.ai IBM 런타임 엔진은 사용자 지정으로 바인딩되며 메타데이터로 구성됩니다. IBM이 IBM watsonx.ai 런타임 서비스와의 직접적인 통합은 없습니다.

service_type = "azure_machine_learning_service"
added_service_provider_result = wos_client.service_providers.add(
        name=SERVICE_PROVIDER_NAME,
        description=SERVICE_PROVIDER_DESCRIPTION,
        service_type = service_type,
        credentials=AzureCredentials(
            subscription_id= AZURE_ENGINE_CREDENTIALS['subscription_id'],
            client_id = AZURE_ENGINE_CREDENTIALS['client_id'],
            client_secret= AZURE_ENGINE_CREDENTIALS['client_secret'],
            tenant = AZURE_ENGINE_CREDENTIALS['tenant']
        ),
        background_mode=False
    ).result

다음 명령을 사용하여 서비스 바인딩을 볼 수 있습니다.

client.service_providers.list()

샘플 출력:

uid	                                   name	                      service_type	                   created
410e730f-8462-45fe-8b41-a029d6d6043a	My Azure ML Service engine azure_machine_learning_service2019-06-10T22:10:29.398Z

Microsoft Azure ML Service 구독 추가

등록 추가

asset_deployment_details = wos_client.service_providers.list_assets(data_mart_id=data_mart_id, service_provider_id=service_provider_id).result
asset_deployment_details
 
deployment_id=''
for model_asset_details in asset_deployment_details['resources']:
    if model_asset_details['metadata']['guid']==deployment_id:
        break
 
azure_asset = Asset(
            asset_id=model_asset_details["entity"]["asset"]["asset_id"],
            name=model_asset_details["entity"]["asset"]["name"],
            url=model_asset_details["entity"]["asset"]["url"],
            asset_type=model_asset_details['entity']['asset']['asset_type'] if 'asset_type' in model_asset_details['entity']['asset'] else 'model',
            input_data_type=InputDataType.STRUCTURED,
            problem_type=ProblemType.BINARY_CLASSIFICATION
        )
 
deployment_scoring_endpoint = model_asset_details['entity']['scoring_endpoint']
scoring_endpoint = ScoringEndpointRequest(url = model_asset_details['entity']['scoring_endpoint']['url'],request_headers = model_asset_details['entity']['scoring_endpoint']['request_headers'],
                                                 credentials = None)  
 
deployment = AssetDeploymentRequest(
    deployment_id=model_asset_details['metadata']['guid'],
    url=model_asset_details['metadata']['url'],
    name=model_asset_details['entity']['name'],
    description=model_asset_details['entity']['description'],
    deployment_type=model_asset_details['entity']['type'],
    scoring_endpoint = scoring_endpoint
)
 
asset_properties = AssetPropertiesRequest(
        label_column="Risk ",
        prediction_field='Scored Labels',
        probability_fields=['Scored Probabilities'],
        training_data_reference=training_data_reference,
        training_data_schema=None,
        input_data_schema=None,
        output_data_schema=None,
    )
 
subscription_details = wos_client.subscriptions.add(
        data_mart_id=data_mart_id,
        service_provider_id=service_provider_id,
        asset=azure_asset,
        deployment=deployment,
        asset_properties=asset_properties,
        background_mode=False
).result

구독 목록 가져오기

subscription_id = subscription_details.metadata.id
subscription_id
 
details: wos_client.subscriptions.get(subscription_id).result.to_dict()

페이로드 로깅 사용 설정

구독에서 페이로드 로깅 사용 설정

payload_data_set_id = None
payload_data_set_id = wos_client.data_sets.list(type=DataSetTypes.PAYLOAD_LOGGING, 
                                                target_target_id=subscription_id, 
                                                target_target_type=TargetTypes.SUBSCRIPTION).result.data_sets[0].metadata.id

로깅 세부사항 가져오기

subscription.payload_logging.get_details()

스코어링 및 페이로드 로깅

모델을 스코어링하십시오. 전체 예제를 보려면 Azure Machine Learning Service Engine 노트북을 참조하십시오.

페이로드 로깅 테이블에 요청 및 응답 저장:

wos_client.data_sets.store_records(data_set_id=payload_data_set_id, request_body=[PayloadRecord(
           scoring_id=str(uuid.uuid4()),
           request=request_data,
           response=response_data,
           response_time=460
)])

Python 외의 언어의 경우 REST API를 사용하여 페이로드를 로깅할 수도 있습니다.

상위 주제: 지원되는 머신 러닝 엔진, 프레임워크 및 모델