일괄 처리 엔드포인트에 사용자 지정 모델 배포

완료됨

MLflow 모델 형식을 사용하지 않고 일괄 처리 엔드포인트에 모델을 배포하려면 점수 매기기 스크립트 및 환경을 만들어야 합니다.

모델을 배포하려면 이미 엔드포인트를 만들었어야 합니다. 그런 다음, 모델을 엔드포인트에 배포할 수 있습니다.

채점 스크립트 만들기

채점 스크립트는 새 데이터를 읽고, 모델을 로드하고, 채점을 수행하는 파일입니다.

점수 매기기 스크립트에는 다음 두 가지 함수가 포함되어야 합니다.

  • init(): 프로세스 시작 시 한 번 호출되므로 모델 로드와 같은 비용이 많이 들거나 일반적인 준비에 사용합니다.
  • run(): 각 미니 일괄 처리에 대해 점수 매기기를 수행하도록 호출되었습니다.

메서드는 run() pandas DataFrame 또는 배열/목록을 반환해야 합니다.

점수 매기기 스크립트는 다음과 같이 보일 수 있습니다.

import os
import mlflow
import pandas as pd


def init():
    global model

    # get the path to the registered model file and load it
    model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
    model = mlflow.pyfunc.load(model_path)


def run(mini_batch):
    print(f"run method start: {__file__}, run({len(mini_batch)} files)")
    resultList = []

    for file_path in mini_batch:
        data = pd.read_csv(file_path)
        pred = model.predict(data)

        df = pd.DataFrame(pred, columns=["predictions"])
        df["file"] = os.path.basename(file_path)
        resultList.extend(df.values)

    return resultList

예제 스크립트에서 유의해야 할 몇 가지 사항이 있습니다.

  • AZUREML_MODEL_DIR 는 모델과 연결된 파일을 찾는 데 사용할 수 있는 환경 변수입니다.
  • 변수를 사용하여 global 로드된 모델과 같이 새 데이터의 점수를 매기는 데 필요한 모든 자산을 사용할 수 있도록 합니다.
  • mini_batch 크기는 배포 구성에 정의됩니다. 미니 일괄 처리의 파일이 너무 커서 처리할 수 없을 경우 파일을 더 작은 파일로 분할해야 합니다.
  • 기본적으로 예측은 단일 파일에 기록됩니다.

팁 (조언)

일괄 처리 배포에 대한 점수 매기기 스크립트를 작성하는 방법에 대해 자세히 알아봅니다.

환경 만들기

배포에는 점수 매기기 스크립트를 실행할 실행 환경이 필요합니다. 코드에 필요한 모든 종속성이 환경에 포함되어야 합니다.

Conda 종속성을 사용하거나 Dockerfile을 사용하여 Docker 이미지를 사용하여 환경을 만들 수 있습니다.

일괄 처리 배포가 작동하려면 라이브러리 azureml-core 를 추가해야 합니다.

기본 Docker 이미지를 사용하여 환경을 만들려면 파일에서 conda.yaml Conda 종속성을 정의할 수 있습니다.

name: basic-env-cpu
channels:
  - conda-forge
dependencies:
  - python=3.8
  - pandas
  - pip
  - pip:
      - azureml-core
      - mlflow

그런 다음, 환경을 만들려면 다음 코드를 실행합니다.

from azure.ai.ml.entities import Environment

env = Environment(
    image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
    conda_file="./src/conda-env.yml",
    name="deployment-environment",
    description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env)

배포 구성 및 만들기

마지막으로 클래스를 사용하여 배포 BatchDeployment 를 구성하고 만들 수 있습니다.

from azure.ai.ml.entities import BatchDeployment, BatchRetrySettings
from azure.ai.ml.constants import BatchDeploymentOutputAction

deployment = BatchDeployment(
    name="forecast-mlflow",
    description="A sales forecaster",
    endpoint_name=endpoint.name,
    model=model,
    compute="aml-cluster",
    code_path="./code",
    scoring_script="score.py",
    environment=env,
    instance_count=2,
    max_concurrency_per_instance=2,
    mini_batch_size=2,
    output_action=BatchDeploymentOutputAction.APPEND_ROW,
    output_file_name="predictions.csv",
    retry_settings=BatchRetrySettings(max_retries=3, timeout=300),
    logging_level="info",
)
ml_client.batch_deployments.begin_create_or_update(deployment)

팁 (조언)

참조 설명서를 탐색하여 Python SDK v2를 사용하여 배치 배포를 생성하십시오.