Share via


전처리를 통해 일괄 처리 채점을 수행하기 위해 파이프라인을 배포하는 방법(미리 보기)

적용 대상:Azure CLI ml 확장 v2(현재)Python SDK azure-ai-ml v2(현재)

이 문서에서는 일괄 처리 엔드포인트 아래에 유추(또는 채점) 파이프라인을 배포하는 방법을 알아봅니다. 파이프라인은 등록된 모델에 대해 점수를 매기는 동시에 모델이 학습되었을 때의 전처리 구성 요소를 재사용합니다. 동일한 전처리 구성 요소를 재사용하면 채점 중에 동일한 전처리가 적용됩니다.

다음에 대해 알아봅니다.

  • 작업 영역의 기존 구성 요소를 재사용하는 파이프라인 만들기
  • 엔드포인트에 파이프라인 배포
  • 파이프라인에서 생성된 예측 사용

이 예에 대해

이 예에서는 유추를 위해 모델을 사용하기 전에 전처리 중에 학습된 전처리 코드와 매개 변수를 재사용하는 방법을 보여 줍니다. 전처리 코드와 학습된 매개 변수를 재사용함으로써 학습 중에 입력 데이터에 적용된 동일한 변환(예: 정규화 및 기능 인코딩)이 유추 중에도 적용되도록 할 수 있습니다. 유추에 사용되는 모델은 UCI 심장병 데이터 세트의 표 형식 데이터에 대한 예측을 수행합니다.

파이프라인의 시각화는 다음과 같습니다.

학습 파이프라인의 출력 및 준비 구성 요소와 함께 채점 구성 요소로 구성된 유추 파이프라인의 스크린샷.

이 문서의 예는 azureml-examples 리포지토리에 포함된 코드 샘플을 기반으로 합니다. YAML 및 기타 파일을 복사/붙여넣기하지 않고 로컬로 명령을 실행하려면 먼저 리포지토리를 복제한 후 디렉터리를 폴더로 변경합니다.

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

이 예의 파일은 다음 위치에 있습니다.

cd endpoints/batch/deploy-pipelines/batch-scoring-with-preprocessing

Jupyter Notebooks에서 따라 하기

복제된 리포지토리에서 sdk-deploy-and-test.ipynb Notebook을 열어 이 예의 Python SDK 버전을 따라갈 수 있습니다.

필수 조건

이 문서의 단계를 수행하기 전에 다음과 같은 필수 구성 요소가 있는지 확인합니다.

  • Azure 구독 Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다. Azure Machine Learning 평가판 또는 유료 버전을 사용해 보세요.

  • Azure Machine Learning 작업 영역 작업 영역이 없으면 Azure Machine Learning 작업 영역 관리 문서의 단계에서 새로 만듭니다.

  • 작업 영역에 다음 권한이 있는지 확인합니다.

    • 일괄 처리 엔드포인트 및 배포 만들기 또는 관리: Microsoft.MachineLearningServices/workspaces/batchEndpoints/*를 허용하는 소유자, 기여자 또는 사용자 지정 역할을 사용합니다.

    • 작업 영역 리소스 그룹에서 ARM 배포 만들기: 작업 영역이 배포된 리소스 그룹에서 Microsoft.Resources/deployments/write를 허용하는 소유자, 기여자 또는 사용자 지정 역할을 사용합니다.

  • Azure Machine Learning을 사용하려면 다음 소프트웨어를 설치해야 합니다.

    Azure CLImlAzure Machine Learning용 확장.

    az extension add -n ml
    

    참고 항목

    일괄 처리 엔드포인트에 대한 파이프라인 구성 요소 배포는 Azure CLI용 ml 확장 버전 2.7에 도입되었습니다. 최신 버전을 가져오려면 az extension update --name ml을 사용합니다.

작업 영역에 연결

작업 영역은 Azure Machine Learning의 최상위 리소스로, Azure Machine Learning을 사용할 때 만든 모든 아티팩트를 사용할 수 있는 중앙 집중식 환경을 제공합니다. 이 섹션에서는 배포 작업을 수행할 작업 영역에 연결합니다.

다음 코드에서 구독 ID, 작업 영역, 위치 및 리소스 그룹에 대한 값을 전달합니다.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

유추 파이프라인 만들기

이 섹션에서는 유추 파이프라인에 필요한 모든 자산을 만듭니다. 파이프라인 구성 요소에 필요한 라이브러리가 포함된 환경을 만드는 것부터 시작할 예정입니다. 다음으로 일괄 처리 배포가 실행될 컴퓨팅 클러스터를 만듭니다. 그런 다음 유추 파이프라인을 빌드하는 데 필요한 구성 요소, 모델 및 변환을 등록합니다. 마지막으로 파이프라인을 빌드하고 테스트할 예정입니다.

환경 만들기

이 예의 구성 요소는 XGBoostscikit-learn 라이브러리가 있는 환경을 사용합니다. environment/conda.yml 파일에는 환경 구성이 포함되어 있습니다.

environment/conda.yml

channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
  - mlflow
  - azureml-mlflow
  - datasets
  - jobtools
  - cloudpickle==1.6.0
  - dask==2023.2.0
  - scikit-learn==1.1.2
  - xgboost==1.3.3
name: mlflow-env

다음과 같이 환경을 만듭니다.

  1. 환경을 정의합니다.

    environment/xgboost-sklearn-py38.yml

    $schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
    name: xgboost-sklearn-py38
    image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
    conda_file: conda.yml
    description: An environment for models built with XGBoost and Scikit-learn.
    
  2. 환경 만들기:

    az ml environment create -f environment/xgboost-sklearn-py38.yml
    

컴퓨팅 클러스터 만들기

일괄 처리 엔드포인트 및 배포는 컴퓨팅 클러스터에서 실행됩니다. 작업 영역에 이미 존재하는 모든 Azure Machine Learning 컴퓨팅 클러스터에서 실행할 수 있습니다. 따라서 여러 일괄 처리 배포가 동일한 컴퓨팅 인프라를 공유할 수 있습니다. 이 예에서는 batch-cluster라는 Azure Machine Learning 컴퓨팅 클러스터에 대해 작업합니다. 컴퓨팅이 작업 영역에 있는지 확인하고, 없으면 만들겠습니다.

az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5

구성 요소 및 모델 등록

유추 파이프라인을 빌드하는 데 필요한 구성 요소, 모델 및 변환을 등록할 예정입니다. 이러한 자산 중 일부를 학습 루틴에 재사용할 수 있습니다.

이 자습서에서는 이전 학습 파이프라인의 모델과 전처리 구성 요소를 재사용합니다. 일괄 처리 엔드포인트를 사용하여 학습 파이프라인을 배포하는 방법 예에 따라 만들기 방법을 확인할 수 있습니다.

  1. 예측에 사용할 모델을 등록합니다.

    az ml model create --name heart-classifier --type mlflow_model --path model
    
  2. 등록된 모델은 입력 데이터에 대해 직접 학습되지 않았습니다. 대신 입력 데이터는 학습 전에 준비 구성 요소를 사용하여 전처리(또는 변환)되었습니다. 또한 이 구성 요소를 등록해야 합니다. 준비 구성 요소를 등록합니다.

    az ml component create -f components/prepare/prepare.yml
    

    준비 구성 요소를 등록한 후 이제 작업 영역에서 참조할 수 있습니다. 예를 들어, azureml:uci_heart_prepare@latest는 준비 구성 요소의 마지막 버전을 가져옵니다.

  3. 준비 구성 요소의 데이터 변환의 일부로 입력 데이터가 정규화되어 예측 변수를 중앙에 배치하고 해당 값을 [-1, 1] 범위로 제한했습니다. 변환 매개 변수는 나중에 새 데이터가 있을 때 적용하도록 등록할 수도 있는 scikit-learn 변환에 캡처되었습니다. 다음과 같이 변환을 등록합니다.

    az ml model create --name heart-classifier-transforms --type custom_model --path transformations
    
  4. 지정된 모델에 대한 예측을 계산하는 score라는 다른 구성 요소를 사용하여 등록된 모델에 대한 유추를 수행합니다. 정의에서 직접 구성 요소를 참조할 예정입니다.

    가장 좋은 방법은 구성 요소를 등록하고 파이프라인에서 참조하는 것입니다. 그러나 이 예에서는 학습 파이프라인에서 재사용되는 구성 요소와 새로운 구성 요소를 확인하는 데 도움이 되도록 정의에서 직접 구성 요소를 참조할 것입니다.

파이프라인 빌드

이제 모든 요소를 하나로 묶을 차례입니다. 배포할 유추 파이프라인에는 두 가지 구성 요소(단계)가 있습니다.

  • preprocess_job: 이 단계에서는 입력 데이터를 읽고 준비된 데이터와 적용된 변환을 반환합니다. 단계는 두 가지 입력을 받습니다.
    • data: 점수를 매길 입력 데이터가 포함된 폴더입니다.
    • transformations: (선택 사항) 적용할 변환에 대한 경로입니다(사용 가능한 경우). 제공되면 경로에 표시된 모델에서 변환을 읽습니다. 그러나 경로가 제공되지 않으면 입력 데이터에서 변환이 학습됩니다. 그러나 유추의 경우 학습 중에 학습된 것과 동일한 매개 변수 값을 사용해야 하기 때문에 입력 데이터에서 변환 매개 변수(이 예에서는 정규화 계수)를 학습할 수 없습니다. 이 입력은 선택 사항이므로 학습 및 채점 중에 preprocess_job 구성 요소를 사용할 수 있습니다.
  • score_job: 이 단계에서는 입력 모델을 사용하여 변환된 데이터에 대한 유추를 수행합니다. 구성 요소는 MLflow 모델을 사용하여 유추를 수행합니다. 마지막으로 점수는 읽은 것과 동일한 형식으로 다시 기록됩니다.

파이프라인 구성은 pipeline.yml 파일에 정의됩니다.

pipeline.yml

$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
type: pipeline

name: batch_scoring_uci_heart
display_name: Batch Scoring for UCI heart
description: This pipeline demonstrates how to make batch inference using a model from the Heart Disease Data Set problem, where pre and post processing is required as steps. The pre and post processing steps can be components reusable from the training pipeline.

inputs:
  input_data:
    type: uri_folder
  score_mode:
    type: string
    default: append

outputs: 
  scores:
    type: uri_folder
    mode: upload

jobs:
  preprocess_job:
    type: command
    component: azureml:uci_heart_prepare@latest
    inputs:
      data: ${{parent.inputs.input_data}}
      transformations: 
        path: azureml:heart-classifier-transforms@latest
        type: custom_model
    outputs:
      prepared_data:
  
  score_job:
    type: command
    component: components/score/score.yml
    inputs:
      data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
      model:
        path: azureml:heart-classifier@latest
        type: mlflow_model
      score_mode: ${{parent.inputs.score_mode}}
    outputs:
      scores: 
        mode: upload
        path: ${{parent.outputs.scores}}

파이프라인의 시각화는 다음과 같습니다.

전처리를 통한 일괄 처리 채점을 보여 주는 유추 파이프라인 스크린샷.

파이프라인 테스트

몇 가지 샘플 데이터를 사용하여 파이프라인을 테스트해 보겠습니다. 이를 위해 파이프라인과 이전에 만들어진 batch-cluster 컴퓨팅 클러스터를 사용하여 작업을 만들 예정입니다.

다음 pipeline-job.yml 파일에는 파이프라인 작업에 대한 구성이 포함되어 있습니다.

pipeline-job.yml

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

display_name: uci-classifier-score-job
description: |-
  This pipeline demonstrate how to make batch inference using a model from the Heart \
  Disease Data Set problem, where pre and post processing is required as steps. The \
  pre and post processing steps can be components reused from the training pipeline.

compute: batch-cluster
component: pipeline.yml
inputs:
  input_data:
    type: uri_folder
  score_mode: append
outputs: 
  scores:
    mode: upload

테스트 작업을 만듭니다.

az ml job create -f pipeline-job.yml --set inputs.input_data.path=data/unlabeled

일괄 처리 엔드포인트 만들기

  1. 엔드포인트에 사용할 이름을 입력합니다. 일괄 처리 엔드포인트의 이름은 호출 URI를 구성하는 데 사용되므로 각 지역에서 고유해야 합니다. 고유성을 보장하려면 다음 코드에 지정된 이름에 후행 문자를 추가합니다.

    ENDPOINT_NAME="uci-classifier-score"
    
  2. 엔드포인트 구성:

    endpoint.yml 파일에는 엔드포인트 구성이 포함되어 있습니다.

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: uci-classifier-score
    description: Batch scoring endpoint of the Heart Disease Data Set prediction task.
    auth_mode: aad_token
    
  3. 엔드포인트 만들기:

    az ml batch-endpoint create --name $ENDPOINT_NAME -f endpoint.yml
    
  4. 엔드포인트 URI를 쿼리합니다.

    az ml batch-endpoint show --name $ENDPOINT_NAME
    

파이프라인 구성 요소 배포

파이프라인 구성 요소를 배포하려면 일괄 처리 배포를 만들어야 합니다. 배포는 실제 작업을 수행하는 자산을 호스팅하는 데 필요한 리소스 집합입니다.

  1. 배포 구성

    deployment.yml 파일에는 배포 구성이 포함되어 있습니다. 추가 속성은 전체 일괄 처리 엔드포인트 YAML 스키마를 확인합니다.

    deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json
    name: uci-classifier-prepros-xgb
    endpoint_name: uci-classifier-batch
    type: pipeline
    component: pipeline.yml
    settings:
        continue_on_step_failure: false
        default_compute: batch-cluster
    
  2. 배포 만들기

    다음 코드를 실행하여 일괄 처리 배포를 일괄 처리 엔드포인트 아래에 만들고 기본 배포로 설정합니다.

    az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment.yml --set-default
    

    이 새 배포가 이제 기본값임을 나타내기 위해 --set-default 플래그를 사용하는 것에 주목합니다.

  3. 배포를 사용할 준비가 되었습니다.

배포 테스트

배포가 만들어지면 작업을 수신할 준비가 된 것입니다. 테스트하려면 다음 단계를 따릅니다.

  1. 배포에서는 하나의 데이터 입력과 하나의 리터럴 입력을 표시해야 합니다.

    inputs.yml 파일에는 입력 데이터 자산에 대한 정의가 포함되어 있습니다.

    inputs.yml

    inputs:
      input_data:
        type: uri_folder
        path: data/unlabeled
      score_mode:
        type: string
        default: append
    outputs:
      scores:
        type: uri_folder
        mode: upload
    

    입력을 표시하는 방법에 대해 자세히 알아보려면 일괄 처리 엔드포인트에 대한 작업 및 입력 데이터 만들기를 참조하세요.

  2. 다음과 같이 기본 배포를 호출할 수 있습니다.

    JOB_NAME=$(az ml batch-endpoint invoke -n $ENDPOINT_NAME --f inputs.yml --query name -o tsv)
    
  3. 다음을 사용하여 쇼 진행 상황을 모니터링하고 로그를 스트리밍할 수 있습니다.

    az ml job stream -n $JOB_NAME
    

작업 출력에 액세스

작업이 완료되면 해당 출력에 액세스할 수 있습니다. 이 작업에는 scores라는 출력이 하나만 포함되어 있습니다.

az ml job download를 사용하여 관련 결과를 다운로드할 수 있습니다.

az ml job download --name $JOB_NAME --output-name scores

점수가 매겨진 데이터를 읽습니다.

import pandas as pd
import glob

output_files = glob.glob("named-outputs/scores/*.csv")
score = pd.concat((pd.read_csv(f) for f in output_files))
score

출력은 다음과 같습니다.

연령 sex ... thal 예측
0.9338 1 ... 2 0
1.3782 1 ... 3 1
1.3782 1 ... 4 0
-1.954 1 ... 3 0

출력에는 예측과 전처리된 점수 구성 요소에 제공된 데이터가 포함됩니다. 예를 들어, age 열은 정규화되었으며 thal 열에는 원래 인코딩 값이 포함되어 있습니다. 실제로는 예측만 출력한 다음 이를 원래 값과 연결하려고 할 수 있습니다. 이 작품은 읽기 권한자의 몫으로 남겨졌습니다.

리소스 정리

완료되면 작업 영역에서 연결된 리소스를 삭제합니다.

다음 코드를 실행하여 일괄 처리 엔드포인트와 기본 배포를 삭제합니다. 삭제를 확인하려면 --yes를 사용합니다.

az ml batch-endpoint delete -n $ENDPOINT_NAME --yes

(선택 사항) 이후 배포에서 컴퓨팅 클러스터를 재사용할 계획이 아닌 경우 컴퓨팅을 삭제합니다.

az ml compute delete -n batch-cluster

다음 단계