일괄 처리 엔드포인트를 사용하여 학습 파이프라인을 운영하는 방법
적용 대상:Azure CLI ml 확장 v2(현재)Python SDK azure-ai-ml v2(현재)
이 문서에서는 일괄 처리 엔드포인트에서 학습 파이프라인을 운영하는 방법을 알아봅니다. 파이프라인은 모델 학습, 데이터 전처리, 모델 평가를 포함하는 여러 구성 요소(또는 단계)를 사용합니다.
다음에 대해 알아봅니다.
- 학습 파이프라인 만들기 및 테스트
- 일괄 처리 엔드포인트에 파이프라인 배포
- 파이프라인을 수정하고 동일한 엔드포인트에서 새 배포를 만듭니다.
- 새 배포를 테스트하고 기본 배포로 설정
이 예에 대해
이 예에서는 입력 학습 데이터(레이블이 지정됨)를 가져와 평가 결과 및 전처리 중에 적용된 변환과 함께 예측 모델을 생성하는 학습 파이프라인을 배포합니다. 파이프라인은 UCI 심장병 데이터 세트의 표 형식 데이터를 사용하여 XGBoost 모델을 학습합니다. 모델을 맞추고 평가하기 위해 데이터가 학습 구성 요소로 전송되기 전에 데이터 전처리 구성 요소를 사용하여 데이터를 전처리합니다.
파이프라인의 시각화는 다음과 같습니다.
이 문서의 예는 azureml-examples 리포지토리에 포함된 코드 샘플을 기반으로 합니다. YAML 및 기타 파일을 복사/붙여넣기하지 않고 로컬로 명령을 실행하려면 먼저 리포지토리를 복제한 후 디렉터리를 폴더로 변경합니다.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
이 예의 파일은 다음 위치에 있습니다.
cd endpoints/batch/deploy-pipelines/training-with-components
Jupyter Notebooks에서 따라 하기
복제된 리포지토리에서 sdk-deploy-and-test.ipynb Notebook을 열어 이 예의 Python SDK 버전을 따라갈 수 있습니다.
필수 구성 요소
Azure 구독 Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다. Azure Machine Learning 평가판 또는 유료 버전을 사용해 보세요.
Azure Machine Learning 작업 영역 작업 영역을 만들려면 Azure Machine Learning 작업 영역 관리를 참조하세요.
Machine Learning 작업 영역에서 다음 권한이 있는지 확인합니다.
- 일괄 처리 엔드포인트 및 배포 만들기 또는 관리:
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
를 허용하는 소유자, 기여자 또는 사용자 지정 역할을 사용합니다. - 작업 영역 리소스 그룹에서 Azure Resource Manager 배포를 만듭니다. 작업 영역이 배포된 리소스 그룹에서
Microsoft.Resources/deployments/write
을(를) 허용하는 소유자, 기여자 또는 사용자 지정 역할을 사용합니다.
- 일괄 처리 엔드포인트 및 배포 만들기 또는 관리:
Machine Learning을 사용하려면 다음 소프트웨어를 설치합니다.
다음 명령을 실행하여 Azure CLI 및
ml
Azure Machine Learning 확장을 설치합니다.az extension add -n ml
Azure CLI용
ml
확장의 버전 2.7에서 일괄 처리 엔드포인트에 대한 파이프라인 구성 요소 배포가 도입되었습니다.az extension update --name ml
명령을 사용하여 최신 버전을 가져옵니다.
작업 영역에 연결
작업 영역은 Machine Learning의 최상위 리소스입니다. 작업 영역은 Machine Learning를 사용하는 경우 만드는 모든 아티팩트를 사용할 수 있는 중앙 집중식 위치를 제공합니다. 이 섹션에서는 배포 작업을 수행하는 작업 영역에 연결합니다.
다음 명령에서 구독 ID, 작업 영역, 위치 및 리소스 그룹에 대한 값을 입력합니다.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
학습 파이프라인 구성 요소 만들기
이 섹션에서는 학습 파이프라인에 필요한 모든 자산을 만듭니다. 모델을 학습하는 데 필요한 라이브러리가 포함된 환경을 만드는 것부터 시작할 예정입니다. 그런 다음 일괄 처리 배포가 실행될 컴퓨팅 클러스터를 만들고 마지막으로 입력 데이터를 데이터 자산으로 등록합니다.
환경 만들기
이 예의 구성 요소는 XGBoost
및 scikit-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
- pandas==1.4
name: mlflow-env
다음과 같이 환경을 만듭니다.
환경을 정의합니다.
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.
환경 만들기:
컴퓨팅 클러스터 만들기
일괄 처리 엔드포인트 및 배포는 컴퓨팅 클러스터에서 실행됩니다. 작업 영역에 이미 존재하는 모든 Azure Machine Learning 컴퓨팅 클러스터에서 실행할 수 있습니다. 따라서 여러 일괄 처리 배포가 동일한 컴퓨팅 인프라를 공유할 수 있습니다. 이 예에서는 batch-cluster
라는 Azure Machine Learning 컴퓨팅 클러스터에 대해 작업합니다. 컴퓨팅이 작업 영역에 있는지 확인하고, 없으면 만들겠습니다.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
학습 데이터를 데이터 자산으로 등록
학습 데이터는 CSV 파일로 표시됩니다. 보다 프로덕션 수준의 워크로드를 모방하기 위해 heart.csv
파일의 학습 데이터를 작업 영역의 데이터 자산으로 등록할 예정입니다. 이 데이터 자산은 나중에 엔드포인트에 대한 입력으로 표시됩니다.
az ml data create --name heart-classifier-train --type uri_folder --path data/train
파이프라인 만들기
Microsoft가 운영하려는 파이프라인은 하나의 입력, 즉 학습 데이터를 취하고 학습된 모델, 평가 결과, 전처리로 적용된 데이터 변환이라는 세 가지 출력을 생성합니다. 파이프라인은 두 가지 구성 요소로 구성됩니다.
preprocess_job
: 이 단계에서는 입력 데이터를 읽고 준비된 데이터와 적용된 변환을 반환합니다. 이 단계는 세 가지 입력을 받습니다.data
: 변환하고 점수를 매길 입력 데이터가 포함된 폴더transformations
: (선택 사항) 적용할 변환에 대한 경로입니다(사용 가능한 경우). 경로가 제공되지 않으면 입력 데이터에서 변환이 학습됩니다.transformations
입력은 선택 사항이므로 학습 및 채점 중에preprocess_job
구성 요소를 사용할 수 있습니다.categorical_encoding
: 범주형 기능(ordinal
또는onehot
)에 대한 인코딩 전략입니다.
train_job
: 이 단계에서는 준비된 데이터를 기반으로 XGBoost 모델을 학습시키고 평가 결과와 학습된 모델을 반환합니다. 이 단계는 세 가지 입력을 받습니다.data
: 전처리된 데이터입니다.target_column
: 예측하려는 열입니다.eval_size
: 평가에 사용된 입력 데이터의 비율을 나타냅니다.
파이프라인 구성은 deployment-ordinal/pipeline.yml
파일에 정의됩니다.
deployment-ordinal/pipeline.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
type: pipeline
name: uci-heart-train-pipeline
display_name: uci-heart-train
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.
inputs:
input_data:
type: uri_folder
outputs:
model:
type: mlflow_model
mode: upload
evaluation_results:
type: uri_folder
mode: upload
prepare_transformations:
type: uri_folder
mode: upload
jobs:
preprocess_job:
type: command
component: ../components/prepare/prepare.yml
inputs:
data: ${{parent.inputs.input_data}}
categorical_encoding: ordinal
outputs:
prepared_data:
transformations_output: ${{parent.outputs.prepare_transformations}}
train_job:
type: command
component: ../components/train_xgb/train_xgb.yml
inputs:
data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
target_column: target
register_best_model: false
eval_size: 0.3
outputs:
model:
mode: upload
type: mlflow_model
path: ${{parent.outputs.model}}
evaluation_results:
mode: upload
type: uri_folder
path: ${{parent.outputs.evaluation_results}}
참고 항목
pipeline.yml
파일에서 transformations
입력이 preprocess_job
에서 누락되었습니다. 따라서 스크립트는 입력 데이터에서 변환 매개 변수를 학습합니다.
파이프라인의 시각화는 다음과 같습니다.
파이프라인 테스트
몇 가지 샘플 데이터를 사용하여 파이프라인을 테스트해 보겠습니다. 이를 위해 파이프라인과 이전에 만들어진 batch-cluster
컴퓨팅 클러스터를 사용하여 작업을 만들 예정입니다.
다음 pipeline-job.yml
파일에는 파이프라인 작업에 대한 구성이 포함되어 있습니다.
deployment-ordinal/pipeline-job.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
experiment_name: uci-heart-train-pipeline
display_name: uci-heart-train-job
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.
compute: batch-cluster
component: pipeline.yml
inputs:
input_data:
type: uri_folder
outputs:
model:
type: mlflow_model
mode: upload
evaluation_results:
type: uri_folder
mode: upload
prepare_transformations:
mode: upload
테스트 작업을 만듭니다.
az ml job create -f deployment-ordinal/pipeline-job.yml --set inputs.input_data.path=azureml:heart-classifier-train@latest
일괄 처리 엔드포인트 만들기
엔드포인트에 사용할 이름을 입력합니다. 일괄 처리 엔드포인트의 이름은 호출 URI를 구성하는 데 사용되므로 각 지역에서 고유해야 합니다. 고유성을 보장하려면 다음 코드에 지정된 이름에 후행 문자를 추가합니다.
엔드포인트 구성:
엔드포인트 만들기:
엔드포인트 URI를 쿼리합니다.
파이프라인 구성 요소 배포
파이프라인 구성 요소를 배포하려면 일괄 처리 배포를 만들어야 합니다. 배포는 실제 작업을 수행하는 자산을 호스팅하는 데 필요한 리소스 집합입니다.
배포 구성:
deployment-ordinal/deployment.yml
파일에는 배포 구성이 포함되어 있습니다. 추가 속성은 전체 일괄 처리 엔드포인트 YAML 스키마를 확인합니다.deployment-ordinal/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: uci-classifier-train-xgb description: A sample deployment that trains an XGBoost model for the UCI dataset. endpoint_name: uci-classifier-train type: pipeline component: pipeline.yml settings: continue_on_step_failure: false default_compute: batch-cluster
배포 만들기:
배포를 사용할 준비가 되었습니다.
배포 테스트
배포가 만들어지면 작업을 수신할 준비가 된 것입니다. 테스트하려면 다음 단계를 따릅니다.
배포에서는 하나의 데이터 입력을 표시해야 합니다.
inputs.yml
파일에는 입력 데이터 자산에 대한 정의가 포함되어 있습니다.inputs.yml
inputs: input_data: type: uri_folder path: azureml:heart-classifier-train@latest
팁
입력을 표시하는 방법에 대해 자세히 알아보려면 일괄 처리 엔드포인트에 대한 작업 및 입력 데이터 만들기를 참조하세요.
다음과 같이 기본 배포를 호출할 수 있습니다.
다음을 사용하여 쇼 진행 상황을 모니터링하고 로그를 스트리밍할 수 있습니다.
파이프라인의 입력만 일괄 처리 엔드포인트의 입력으로 게시된다는 점을 언급할 가치가 있습니다. 예를 들어, categorical_encoding
은 파이프라인 단계의 입력이지만 파이프라인 자체의 입력은 아닙니다. 이 팩트를 사용하여 클라이언트에게 노출할 입력과 숨길 입력을 제어합니다.
작업 출력에 액세스
작업이 완료되면 일부 출력에 액세스할 수 있습니다. 이 파이프라인은 해당 구성 요소에 대해 다음과 같은 출력을 생성합니다.
preprocess job
: 출력은transformations_output
입니다.train job
: 출력은model
및evaluation_results
입니다.
다음을 사용하여 관련 결과를 다운로드할 수 있습니다.
az ml job download --name $JOB_NAME --output-name transformations
az ml job download --name $JOB_NAME --output-name model
az ml job download --name $JOB_NAME --output-name evaluation_results
엔드포인트에서 새 배포 만들기
엔드포인트는 한 번에 여러 배포를 호스팅하면서 하나의 배포만 기본값으로 유지할 수 있습니다. 따라서 다양한 모델을 반복하고, 다양한 모델을 엔드포인트에 배포하고 테스트한 다음, 마지막으로 기본 배포를 자신에게 가장 적합한 모델 배포로 전환할 수 있습니다.
더 나은 성능을 발휘하는 모델을 가져올 수 있는지 알아보기 위해 파이프라인에서 전처리가 수행되는 방식을 변경해 보겠습니다.
파이프라인의 전처리 구성 요소에서 매개 변수 변경
전처리 구성 요소에는 categorical_encoding
이라는 입력이 있으며, 이는 ordinal
또는 onehot
값을 가질 수 있습니다. 이러한 값은 범주형 기능을 인코딩하는 두 가지 다른 방법에 해당합니다.
ordinal
:[1:n]
의 숫자 값(서수)으로 기능 값을 인코딩합니다. 여기서n
은 기능의 범주 수입니다. 서수 인코딩은 기능 범주 간에 자연스러운 순위 순서가 있음을 의미합니다.onehot
: 자연스러운 순위 관계를 의미하지는 않지만 범주 수가 많은 경우 차원 문제가 발생합니다.
기본적으로 이전에는 ordinal
을 사용했습니다. 이제 onehot
을 사용하도록 범주형 인코딩을 변경하고 모델이 어떻게 작동하는지 살펴보겠습니다.
팁
또는 categorial_encoding
입력을 파이프라인 작업 자체에 대한 입력으로 클라이언트에 노출할 수도 있습니다. 그러나 배포 내부에서 매개 변수를 숨기고 제어하고 동일한 엔드포인트에서 여러 배포를 수행할 수 있는 기회를 활용할 수 있도록 전처리 단계에서 매개 변수 값을 변경하기로 결정했습니다.
파이프라인을 수정합니다. 다음과 같이 보입니다.
파이프라인 구성은
deployment-onehot/pipeline.yml
파일에 정의됩니다.deployment-onehot/pipeline.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json type: pipeline name: uci-heart-train-pipeline display_name: uci-heart-train description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset. inputs: input_data: type: uri_folder outputs: model: type: mlflow_model mode: upload evaluation_results: type: uri_folder mode: upload prepare_transformations: type: uri_folder mode: upload jobs: preprocess_job: type: command component: ../components/prepare/prepare.yml inputs: data: ${{parent.inputs.input_data}} categorical_encoding: onehot outputs: prepared_data: transformations_output: ${{parent.outputs.prepare_transformations}} train_job: type: command component: ../components/train_xgb/train_xgb.yml inputs: data: ${{parent.jobs.preprocess_job.outputs.prepared_data}} target_column: target eval_size: 0.3 outputs: model: type: mlflow_model path: ${{parent.outputs.model}} evaluation_results: type: uri_folder path: ${{parent.outputs.evaluation_results}}
배포 구성:
deployment-onehot/deployment.yml
파일에는 배포 구성이 포함되어 있습니다. 추가 속성은 전체 일괄 처리 엔드포인트 YAML 스키마를 확인합니다.deployment-onehot/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: uci-classifier-train-onehot description: A sample deployment that trains an XGBoost model for the UCI dataset using onehot encoding for variables. endpoint_name: uci-classifier-train type: pipeline component: pipeline.yml settings: continue_on_step_failure: false default_compute: batch-cluster
배포 만들기:
배포를 사용할 준비가 되었습니다.
기본이 아닌 배포 테스트
배포가 만들어지면 작업을 수신할 준비가 된 것입니다. 이전과 동일한 방식으로 테스트할 수 있지만 이제 특정 배포를 호출할 예정입니다.
특정 배포
uci-classifier-train-onehot
을 트리거하도록 배포 매개 변수를 지정하여 다음과 같이 배포를 호출합니다.다음을 사용하여 쇼 진행 상황을 모니터링하고 로그를 스트리밍할 수 있습니다.
새 배포를 기본 배포로 구성
새 배포의 성능에 만족하면 이 새 배포를 기본값으로 설정할 수 있습니다.
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
이전 배포 삭제
완료한 후 더 이상 필요하지 않으면 이전 배포를 삭제할 수 있습니다.
az ml batch-deployment delete --name uci-classifier-train-xgb --endpoint-name $ENDPOINT_NAME --yes
리소스 정리
완료되면 작업 영역에서 연결된 리소스를 삭제합니다.
다음 코드를 실행하여 일괄 처리 엔드포인트와 기본 배포를 삭제합니다. 삭제를 확인하려면 --yes
를 사용합니다.
az ml batch-endpoint delete -n $ENDPOINT_NAME --yes
(선택 사항) 이후 배포에서 컴퓨팅 클러스터를 재사용할 계획이 아닌 경우 컴퓨팅을 삭제합니다.