일괄 처리 배포로 MLflow 모델 배포

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

이 문서에서는 일괄 처리 엔드포인트를 사용하여 일괄 처리 유추를 위해 Azure Machine Learning에 MLflow 모델을 배포하는 방법을 알아봅니다. MLflow 모델을 일괄 처리 엔드포인트에 배포할 때 Azure Machine Learning은 다음을 수행합니다.

  • Azure Machine Learning 일괄 작업을 실행하는 데 필요한 종속성을 포함하고 있는 MLflow 기본 이미지/큐레이팅된 환경을 제공합니다.
  • 병렬 처리를 통해 데이터를 처리하는 데 사용할 수 있는 채점 스크립트를 사용하여 일괄 작업 파이프라인을 만듭니다.

참고 항목

지원되는 입력 파일 형식에 대한 자세한 내용과 MLflow 모델의 작동 방식에 대한 자세한 내용은 일괄 처리 유추 배포 시 고려 사항을 참조하세요.

이 예에 대해

이 예제에서는 일괄 처리 예측을 수행하기 위해 일괄 처리 엔드포인트에 MLflow 모델을 배포하는 방법을 보여줍니다. 이 예제에서는 UCI 심장 질환 데이터 세트를 기준으로 MLflow 모델을 사용합니다. 데이터베이스에는 76개의 특성이 포함되어 있지만, 여기서는 그중 14개만 사용합니다. 이 모델은 환자의 심장병 유무를 예측하려고 시도합니다. 값은 0(심장병 없음)에서 1(심장병 있음) 사이의 정수입니다.

이 모델은 XGBBoost 분류자를 사용하여 학습되었으며, 필요한 모든 전처리가 scikit-learn 파이프라인으로 패키징되어 있으므로 원시 데이터부터 예측까지 아우르는 엔드투엔드 파이프라인입니다.

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

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

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

cd endpoints/batch/deploy-models/heart-classifier-mlflow

Jupyter Notebooks에서 따라하기

다음 Notebooks에서 이 샘플을 따를 수 있습니다. 복제된 리포지토리에서 mlflow-for-batch-tabular.ipynb Notebook을 엽니다.

필수 조건

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

  • 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>

단계

다음 단계에 따라 새 데이터에 대한 일괄 처리 유추를 실행하도록 일괄 처리 엔드포인트에 MLflow 모델을 배포합니다.

  1. 일괄 처리 엔드포인트는 등록된 모델만 배포할 수 있습니다. 이 예제의 경우 리포지토리에 모델의 로컬 복사본이 이미 있으므로 작업 영역의 레지스트리에만 모델을 게시하면 됩니다. 배포하려는 모델이 이미 등록된 경우 이 단계를 건너뛸 수 있습니다.

    MODEL_NAME='heart-classifier-mlflow'
    az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
    
  2. 진행하기 전에, 만들려는 일괄 처리 배포가 일부 인프라(컴퓨팅)에서 실행되도록 만들어야 합니다. 일괄 처리 배포는 작업 영역에 이미 있는 모든 Azure Machine Learning 컴퓨팅에서 실행할 수 있습니다. 즉, 여러 일괄 처리 배포가 동일한 컴퓨팅 인프라를 공유할 수 있습니다. 이 예에서는 cpu-cluster라는 Azure Machine Learning 컴퓨팅 클러스터에서 작업할 것입니다. 컴퓨팅이 작업 영역에 있는지 확인하고, 없으면 만들겠습니다.

    다음과 같이 컴퓨팅 클러스터를 만듭니다.

    az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
    
  3. 이제 일괄 처리 엔드포인트 및 배포를 만들어야 합니다. 엔드포인트부터 시작하겠습니다. 엔드포인트는 이름과 설명만 만들면 됩니다. 엔드포인트의 이름은 엔드포인트와 연결된 URI에서 끝납니다. 따라서 일괄 처리 엔드포인트 이름은 Azure 지역 내에서 고유해야 합니다. 예를 들어, westus2에는 이름이 mybatchendpoint인 일괄 처리 엔드포인트가 하나만 있을 수 있습니다.

    이 경우 나중에 쉽게 참조할 수 있도록 엔드포인트의 이름을 변수에 배치해 보겠습니다.

    ENDPOINT_NAME="heart-classifier"
    
  4. 엔드포인트 만들기:

    새 엔드포인트를 만들려면 다음과 같이 YAML 구성을 만듭니다.

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: heart-classifier-batch
    description: A heart condition classifier for batch inference
    auth_mode: aad_token
    

    그런 후 다음 명령을 사용하여 엔드포인트를 만듭니다.

    az ml batch-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
    
  5. 이제 배포를 만들겠습니다. MLflow 모델은 배포를 만들 때 자동으로 만들어지므로 환경 또는 채점 스크립트를 나타낼 필요가 없습니다. 그러나 배포에서 유추를 수행하는 방법을 사용자 지정하려면 지정해도 됩니다.

    만들어진 엔드포인트에서 새 배포를 만들려면 다음과 같이 YAML 구성을 만듭니다. 추가 속성은 전체 일괄 처리 엔드포인트 YAML 스키마를 확인합니다.

    deployment-simple/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    endpoint_name: heart-classifier-batch
    name: classifier-xgboost-mlflow
    description: A heart condition classifier based on XGBoost
    type: model
    model: azureml:heart-classifier-mlflow@latest
    compute: azureml:batch-cluster
    resources:
      instance_count: 2
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 2
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 300
      error_threshold: -1
      logging_level: info
    

    그런 후 다음 명령을 사용하여 배포를 만듭니다.

    az ml batch-deployment create --file deployment-simple/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
    

    Important

    모델이 단일 일괄 처리에서 유추를 실행하는 데 걸리는 시간을 기반으로 배포에서 timeout을 구성합니다. 일괄 처리 크기가 클수록 이 값은 더 길어져야 합니다. mini_batch_size는 샘플 수가 아니라 일괄 처리의 파일 수를 나타냅니다. 테이블 형식 데이터를 사용할 때 각 파일에는 여러 행이 포함될 수 있으며, 이로 인해 일괄 처리 엔드포인트가 각 파일을 처리하는 데 걸리는 시간이 늘어나게 됩니다. 이러한 경우에 높은 값을 사용하여 시간 초과 오류를 방지합니다.

  6. 엔드포인트 내에서 특정 배포를 호출할 수 있지만 일반적으로 엔드포인트 자체를 호출하고 엔드포인트에서 사용할 배포를 결정하도록 합니다. 이러한 배포를 "기본" 배포라고 합니다. 이렇게 하면 기본 배포를 변경할 수 있으므로 엔드포인트를 호출하는 사용자와의 계약을 변경하지 않고도 배포를 제공하는 모델을 변경할 수 있습니다. 다음 지침을 사용하여 기본 배포를 업데이트합니다.

    DEPLOYMENT_NAME="classifier-xgboost-mlflow"
    az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
    
  7. 이제 일괄 처리 엔드포인트를 사용할 준비가 되었습니다.

배포 테스트

엔드포인트를 테스트하기 위해, 이 리포지토리에 있으며 모델과 함께 사용할 수 있는 레이블이 지정되지 않은 데이터 샘플을 사용하려고 합니다. 일괄 처리 엔드포인트는 클라우드에 있고 Azure Machine Learning 작업 영역에서 액세스할 수 있는 데이터만 처리할 수 있습니다. 이 예에서는 Azure Machine Learning 데이터 저장소에 업로드합니다. 특히 채점을 위해 엔드포인트를 호출하는 데 사용할 수 있는 데이터 자산을 만들 것입니다. 그러나 일괄 처리 엔드포인트는 다양한 위치에 배치할 수 있는 데이터를 허용합니다.

  1. 먼저 데이터 자산을 만들어 보겠습니다. 이 데이터 자산은 일괄 처리 엔드포인트를 사용하여 병렬로 처리하려는 여러 CSV 파일이 있는 폴더로 구성됩니다. 데이터가 이미 데이터 자산으로 등록되었거나 다른 입력 형식을 사용하려는 경우 이 단계를 건너뛰어도 됩니다.

    a. YAML에서 데이터 자산 정의를 만듭니다.

    heart-dataset-unlabeled.yml

    $schema: https://azuremlschemas.azureedge.net/latest/data.schema.json
    name: heart-dataset-unlabeled
    description: An unlabeled dataset for heart classification.
    type: uri_folder
    path: data
    

    b. 데이터 자산을 만듭니다.

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. 이제 데이터가 업로드되고 사용할 준비가 되었으므로 엔드포인트를 호출해 보겠습니다.

    JOB_NAME = $(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input azureml:heart-dataset-unlabeled@latest --query name -o tsv)
    

    참고 항목

    설치 버전에 따라 jq 유틸리티가 설치되지 않을 수도 있습니다. 이 링크에서 지침을 받을 수 있습니다.

    호출 작업에서 배포 이름을 표시하지 않는 방법에 유의합니다. 엔드포인트가 자동으로 작업을 기본 배포로 라우팅하기 때문입니다. 엔드포인트에는 배포가 하나만 있으므로 해당 배포가 기본 배포입니다. 인수/매개 변수 deployment_name을 표시하여 특정 배포를 대상으로 지정할 수 있습니다.

  3. 명령이 반환되는 즉시 일괄 작업이 시작됩니다. 완료될 때까지 작업 상태를 모니터링할 수 있습니다.

    az ml job show -n $JOB_NAME --web
    

출력 분석

출력 예측은 배포 구성에 표시된 대로 predictions.csv 파일에 생성됩니다. 이 작업에서는 이 파일이 배치되는 score라는 명명된 출력을 생성합니다. 일괄 처리 작업당 하나의 파일만 생성됩니다.

파일의 구조는 다음과 같습니다.

  • 모델에 전송된 데이터 포인트마다 하나의 행이 있습니다. 표 형식 데이터의 경우 이는 파일(predictions.csv)에 처리된 각 파일에 있는 모든 행에 대해 하나의 행이 포함되어 있음을 의미합니다. 다른 데이터 형식(예: 이미지, 오디오, 텍스트)의 경우 처리된 각 파일당 하나의 행이 있습니다.

  • 파일에는 다음 열이 순서대로 있습니다.

    • row(선택 사항): 입력 데이터 파일의 해당 행 인덱스입니다. 이는 입력 데이터가 테이블 형식인 경우에만 적용됩니다. 예측은 입력 파일에 나타나는 것과 동일한 순서로 반환되므로 행 번호를 사용하여 해당 예측과 일치할 수 있습니다.
    • prediction, 입력 데이터와 연결된 예측입니다. 이 값은 모델의 predict(). 함수에서 제공한 "그대로" 반환됩니다.
    • file_name, 데이터를 읽어 온 파일 이름입니다. 표 형식 데이터에서는 이 필드를 사용하여 어떤 예측이 어떤 입력 데이터에 속하는지 알 수 있습니다.

다음과 같이 작업 이름을 사용하여 작업 결과를 다운로드할 수 있습니다.

예측을 다운로드하려면 다음 명령을 사용합니다.

az ml job download --name $JOB_NAME --output-name score --download-path ./

파일이 다운로드되면 선호하는 도구를 사용하여 파일을 열 수 있습니다. 다음 예제에서는 Pandas 데이터 프레임을 사용하여 예측을 로드합니다.

import pandas as pd

score = pd.read_csv(
    "named-outputs/score/predictions.csv", names=["row", "prediction", "file"]
)

출력은 다음과 같습니다.

row 예측 파일
0 0 heart-unlabeled-0.csv
1 1 heart-unlabeled-0.csv
2 0 heart-unlabeled-0.csv
... ... ...
307 0 heart-unlabeled-3.csv

이 예제에서 입력 데이터는 CSV 형식의 표 형식 데이터였으며 4개의 서로 다른 입력 파일(heart-unlabeled-0.csv, heart-unlabeled-1.csv, heart-unlabeled-2.csv 및 heart-unlabeled-3.csv)이 있었습니다.

일괄 처리 유추에 배포할 때 고려 사항

Azure Machine Learning은 채점 스크립트를 표시하지 않고 엔드포인트 일괄 처리에 MLflow 모델을 배포하는 것을 지원합니다. 이는 대량의 데이터를 일괄 처리 방식으로 처리해야 하는 모델을 배포하는 편리한 방법을 나타냅니다. Azure Machine Learning은 MLflow 모델 사양의 정보를 사용하여 유추 프로세스를 오케스트레이션합니다.

작업자에게 작업을 배포하는 방법

Batch 엔드포인트는 정형 데이터와 비정형 데이터에 대해 파일 수준에서 작업을 분산합니다. 따라서 이 기능에는 URI 파일URI 폴더만 지원됩니다. 각 작업자는 Mini batch size 파일의 일괄 처리를 한 번에 처리합니다. 테이블 형식 데이터의 경우 일괄 처리 엔드포인트는 작업을 배포할 때 각 파일 내의 행 수를 고려하지 않습니다.

Warning

중첩된 폴더 구조는 유추 중에 탐색되지 않습니다. 폴더를 사용하여 데이터를 분할하는 경우 구조를 미리 평면화해야 합니다.

일괄 처리 배포는 파일마다 한 번씩 MLflow 모델의 predict 함수를 호출합니다. 여러 행을 포함하는 CSV 파일의 경우 기본 컴퓨팅에 메모리 압박이 가해질 수 있으며 모델이 단일 파일(대용량 언어 모델과 같은 고가의 모델용)을 채점하는 데 걸리는 시간이 늘어나게 될 수 있습니다. 로그에서 몇 가지 메모리 부족 예외 또는 시간 초과 항목이 발생하는 경우 행이 적은 작은 파일로 데이터를 분할하거나 모델/채점 스크립트 내의 행 수준에서 일괄 처리를 구현하는 것이 좋습니다.

파일의 형식 지원

다음은 환경 및 채점 스크립트 없이 MLflow 모델을 배포할 때 일괄 처리 유추를 지원하는 데이터 형식입니다. 다른 파일 형식을 처리하거나 일괄 처리 엔드포인트가 기본적으로 수행하는 다른 방식으로 유추를 실행하려면 채점 스크립트와 함께 MLflow 모델 사용에 설명된 대로 언제든지 채점 스크립트를 사용하여 배포를 만들면 됩니다.

파일 확장명 모델의 입력으로 반환된 형식 서명 요구 사항
.csv, .parquet, .pqt pd.DataFrame ColSpec. 입력하지 않으면 열 입력이 적용되지 않습니다.
.png, .jpg, .jpeg, .tiff, .bmp, .gif np.ndarray TensorSpec. 입력은 사용 가능한 경우 텐서 셰이프와 일치하도록 변형됩니다. 사용할 수 있는 서명이 없으면 np.uint8 형식의 텐서가 유추됩니다. 추가 지침은 이미지를 처리하는 MLflow 모델에 대한 고려 사항을 참조하세요.

Warning

지원되지 않는 파일이 입력 데이터에 들어 있으면 작업이 실패합니다. 다음과 같은 오류 항목이 표시됩니다. "ERROR:azureml:입력 파일 처리 오류: "/mnt/batch/tasks/.../a-given-file.avro". 파일 형식 "avro"는 지원되지 않습니다.".

MLflow 모델에 서명 적용

입력의 데이터 형식은 사용 가능한 MLflow 모델 서명을 사용하여 데이터를 읽는 동안 일괄 처리 배포 작업에 의해 적용됩니다. 즉, 데이터 입력은 모델 서명에 표시된 형식을 준수해야 합니다. 데이터를 예상대로 구문 분석할 수 없는 경우 작업이 실패하고 "ERROR:azureml:Error processing input file: '/mnt/batch/tasks/.../a-given-file.csv'. Exception: invalid literal for int() with base 10: 'value'"와 비슷한 오류 메시지가 표시됩니다.

MLflow 모델의 서명은 선택 사항이지만 데이터 호환성 문제를 조기에 발견하는 편리한 방법을 제공하므로 사용하는 것이 좋습니다. 서명을 사용하여 모델을 로깅하는 방법에 대한 자세한 내용은 사용자 지정 서명, 환경 또는 샘플을 사용하여 모델 로깅을 참조하세요.

MLflow 모델과 연결된 MLmodel 파일을 열어 모델의 모델 서명을 검사할 수 있습니다. MLflow에서 서명이 작동하는 방식에 대한 자세한 내용은 MLflow의 서명을 참조하세요.

버전 지원

일괄 처리 배포는 pyfunc 버전을 사용하는 MLflow 모델 배포만 지원합니다. 다른 버전을 배포하려면 채점 스크립트와 함께 MLflow 모델 사용을 참조하세요.

채점 스크립트로 MLflow 모델 배포 사용자 지정

배포 정의에서 채점 스크립트를 표시하지 않고도 MLflow 모델을 일괄 처리 엔드포인트에 배포할 수 있습니다. 그러나 이 파일(일반적으로 일괄 처리 드라이버라고 함)을 나타내도록 옵트인하여 유추가 실행되는 방법을 사용자 지정할 수 있습니다.

일반적으로 다음과 같은 경우에 이 워크플로를 선택합니다.

  • 일괄 처리 배포 MLflow 배포에서 지원되지 않는 파일 형식을 처리해야 합니다.
  • 모델이 실행되는 방식을 사용자 지정해야 합니다. 예를 들어 특정 버전을 사용하여 mlflow.<flavor>.load() 명령으로 모델을 로드합니다.
  • 모델 자체에서 사전/사후 처리가 수행되지 않는 경우 채점 루틴에서 사전/사후 처리를 수행해야 합니다.
  • 모델의 출력을 표 형식 데이터로 잘 나타낼 수 없습니다. 이미지를 나타내는 텐서를 예로 들 수 있습니다.
  • 메모리 제한 때문에 모델이 각 파일을 한 번에 처리할 수 없고 청크로 읽어야 합니다.

Important

MLflow 모델 배포에 대한 채점 스크립트를 지정하도록 선택하는 경우 배포가 실행될 환경도 지정해야 합니다.

단계

다음 단계에 따라 사용자 지정 채점 스크립트를 사용하여 MLflow 모델을 배포합니다.

  1. MLflow 모델이 배치된 폴더를 식별합니다.

    a. Azure Machine Learning 포털로 이동합니다.

    b. 모델 섹션으로 이동합니다.

    c. 배포하려는 모델을 선택하고 아티팩트 탭을 클릭합니다.

    d. 표시되는 폴더를 기록해 둡니다. 이 폴더는 모델을 등록할 때 표시되었습니다.

    모델 아티팩트가 있는 폴더를 보여 주는 스크린샷.

  2. 다음 채점 스크립트를 만듭니다. 이전에 식별한 폴더 이름 modelinit() 함수에 어떻게 포함되었는지 확인합니다.

    deployment-custom/code/batch_driver.py

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license.
    
    import os
    import glob
    import mlflow
    import pandas as pd
    import logging
    
    
    def init():
        global model
        global model_input_types
        global model_output_names
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        # It is the path to the model folder
        # Please provide your model's folder name if there's one
        model_path = glob.glob(os.environ["AZUREML_MODEL_DIR"] + "/*/")[0]
    
        # Load the model, it's input types and output names
        model = mlflow.pyfunc.load(model_path)
        if model.metadata and model.metadata.signature:
            if model.metadata.signature.inputs:
                model_input_types = dict(
                    zip(
                        model.metadata.signature.inputs.input_names(),
                        model.metadata.signature.inputs.pandas_types(),
                    )
                )
            if model.metadata.signature.outputs:
                if model.metadata.signature.outputs.has_input_names():
                    model_output_names = model.metadata.signature.outputs.input_names()
                elif len(model.metadata.signature.outputs.input_names()) == 1:
                    model_output_names = ["prediction"]
        else:
            logging.warning(
                "Model doesn't contain a signature. Input data types won't be enforced."
            )
    
    
    def run(mini_batch):
        print(f"run method start: {__file__}, run({len(mini_batch)} files)")
    
        data = pd.concat(
            map(
                lambda fp: pd.read_csv(fp).assign(filename=os.path.basename(fp)), mini_batch
            )
        )
    
        if model_input_types:
            data = data.astype(model_input_types)
    
        # Predict over the input data, minus the column filename which is not part of the model.
        pred = model.predict(data.drop("filename", axis=1))
    
        if pred is not pd.DataFrame:
            if not model_output_names:
                model_output_names = ["pred_col" + str(i) for i in range(pred.shape[1])]
            pred = pd.DataFrame(pred, columns=model_output_names)
    
        return pd.concat([data, pred], axis=1)
    
  3. 채점 스크립트를 실행할 수 있는 환경을 만듭니다. 모델이 MLflow이므로 conda 요구 사항도 모델 패키지에 지정됩니다(MLflow 모델 및 이 모델에 포함된 파일에 대한 자세한 내용은 MLmodel 형식 참조). 그 후에는 이 파일의 conda 종속성을 사용하여 환경을 빌드합니다. 그러나 일괄 처리 배포에 필요한 azureml-core 패키지도 포함시켜야 합니다.

    모델이 모델 레지스트리에 이미 등록된 경우 Azure Machine Learning 스튜디오> 모델 > 목록에서 모델 선택 > 아티팩트로 이동하여 모델과 연결된 conda.yml 파일을 다운로드/복사할 수 있습니다. 탐색에서 루트 폴더를 열고 나열된 conda.yml 파일을 선택합니다. [다운로드]를 클릭하거나 내용을 복사합니다.

    Important

    이 예제에서는 /heart-classifier-mlflow/environment/conda.yaml에 지정된 conda 환경을 사용합니다. 이 파일은 원래 MLflow conda 종속성 파일을 결합하고 azureml-core 패키지를 추가하여 만들었습니다. 모델에서 직접 conda.yml 파일을 사용할 수 없습니다.

    환경 정의는 배포 정의 자체에 익명 환경으로 포함됩니다. 배포의 다음 줄에 표시됩니다.

    environment:
      name: batch-mlflow-xgboost
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    
  4. 배포 구성:

    만들어진 엔드포인트에서 새 배포를 만들려면 다음과 같이 YAML 구성을 만듭니다. 추가 속성은 전체 일괄 처리 엔드포인트 YAML 스키마를 확인합니다.

    deployment-custom/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    endpoint_name: heart-classifier-batch
    name: classifier-xgboost-custom
    description: A heart condition classifier based on XGBoost
    type: model
    model: azureml:heart-classifier-mlflow@latest
    environment:
      name: batch-mlflow-xgboost
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    compute: azureml:batch-cluster
    resources:
      instance_count: 2
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 2
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 300
      error_threshold: -1
      logging_level: info
    
  5. 이제 배포를 만듭니다.

    az ml batch-deployment create --file deployment-custom/deployment.yml --endpoint-name $ENDPOINT_NAME
    
  6. 이제 일괄 처리 엔드포인트를 사용할 준비가 되었습니다.

리소스 정리

일괄 처리 엔드포인트와 모든 기본 배포를 삭제하려면 다음 코드를 실행합니다. 일괄 처리 채점 작업은 삭제되지 않습니다.

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

다음 단계