다음을 통해 공유


MLflow 모델 배포 지침

적용 대상: Azure CLI ml 확장 v2(현재)

이 문서에서는 실시간 유추 및 일괄 처리 유추를 위해 Azure Machine Learning에 MLflow 모델을 배포하는 방법과 배포를 관리하는 데 사용할 수 있는 다양한 도구에 대해 알아봅니다.

코드 없는 배포

사용자 지정 모델 배포와 달리 MLflow 모델을 Azure Machine Learning에 배포하면 채점 스크립트나 환경을 제공할 필요가 없습니다. Azure Machine Learning은 채점 스크립트와 환경을 자동으로 생성합니다. 이 기능을 코드 없는 배포라고 합니다.

코드 없는 배포의 경우 Azure Machine Learning은 다음을 수행합니다.

  • MLflow 모델에 표시된 모든 패키지 종속성이 충족되는지 확인합니다.
  • 다음 항목을 포함하는 MLflow 기본 이미지 또는 큐레이팅된 환경을 제공합니다.
    • mlflow-skinny를 포함하여 Azure Machine Learning이 유추를 수행하는 데 필요한 패키지
    • 유추를 수행할 채점 스크립트

공용 네트워크에 액세스할 수 없는 작업 영역: 송신 연결 없이 MLflow 모델을 온라인 엔드포인트에 배포하려면 먼저 모델 패키징(미리 보기)을 해야 합니다. 모델 패키징을 사용하면 인터넷 연결이 필요 없습니다. 그렇지 않으면 Azure Machine Learning이 MLflow 모델에 필요한 Python 패키지를 동적으로 설치해야 합니다.

패키지 및 종속성

Azure Machine Learning은 MLflow 모델의 유추를 실행하는 환경을 자동으로 생성합니다. 환경을 빌드하기 위해 Azure Machine Learning은 MLflow 모델에 지정된 conda 종속성을 읽고 유추 서버를 실행하는 데 필요한 모든 패키지를 추가합니다. 이러한 추가 패키지는 배포 유형에 따라 다릅니다.

다음 예 conda.yaml 파일은 MLflow 모델에 지정된 conda 종속성을 보여 줍니다.

channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
  - mlflow==2.7.1
  - cloudpickle==1.6.0
  - dataclasses==0.6
  - lz4==4.0.0
  - numpy==1.23.5
  - packaging==23.0
  - psutil==5.9.0
  - pyyaml==6.0
  - scikit-learn==1.1.2
  - scipy==1.10.1
  - uuid==1.30
name: mlflow-env

Important

MLflow는 모델을 기록할 때 자동으로 패키지를 검색하고 모델의 conda 종속성에 패키지 버전을 고정합니다. 이 자동 패키지 검색 기능은 사용자의 의도나 요구 사항을 반영하지 않을 수 있습니다. 또는 사용자 지정 서명, 환경 또는 샘플을 사용하여 모델을 기록할 수 있습니다.

서명이 있는 모델

MLflow 모델에는 예상 입력 및 해당 형식을 나타내는 서명이 포함될 수 있습니다. 이러한 모델이 온라인 또는 일괄 처리 엔드포인트에 배포되면 Azure Machine Learning은 데이터 입력의 수와 형식이 서명을 준수하도록 합니다. 입력 데이터를 예상대로 구문 분석할 수 없으면 모델 호출이 실패합니다.

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

다음 예 MLmodel 파일은 signature를 강조 표시합니다.

artifact_path: model
flavors:
  python_function:
    env:
      conda: conda.yaml
      virtualenv: python_env.yaml
    loader_module: mlflow.sklearn
    model_path: model.pkl
    predict_fn: predict
    python_version: 3.10.11
  sklearn:
    code: null
    pickled_model: model.pkl
    serialization_format: cloudpickle
    sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
  inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
    {"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
    "s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
    "double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
    {"name": "s6", "type": "double"}]'
  outputs: '[{"type": "double"}]'

MLflow 모델의 서명은 데이터 호환성 문제를 검색하는 편리한 방법을 제공하기 때문에 권장됩니다. 서명을 사용하여 모델을 로깅하는 방법에 대한 자세한 내용은 사용자 지정 서명, 환경 또는 샘플을 사용하여 모델 로깅을 참조하세요.

MLflow 기본 제공 서버에 배포 vs. Azure Machine Learning 유추 서버에 배포

모델 개발자는 MLflow 기본 제공 배포 도구를 사용하여 모델을 로컬에서 테스트할 수 있습니다. 예를 들어, mlflow models serve 또는 MLflow CLI mlflow models predict를 사용하여 MLflow 서버 레지스트리에 등록된 모델의 로컬 인스턴스를 실행할 수 있습니다. MLflow 기본 제공 배포 도구에 대한 자세한 내용은 MLflow 설명서의 기본 제공 배포 도구를 참조하세요.

Azure Machine Learning은 온라인 및 일괄 처리 엔드포인트에 모델을 배포하는 것도 지원합니다. 이러한 엔드포인트는 다양한 기능을 가질 수 있는 다양한 유추 기술을 실행합니다.

  • Azure Machine Learning 온라인 엔드포인트는 MLflow 기본 제공 서버와 유사하며, 유추를 위해 모델을 실행하는 확장 가능하고 동기식이며 가벼운 방법을 제공합니다.

  • Azure Machine Learning 일괄 처리 엔드포인트는 대량의 데이터로 크기 조정 가능한 장기 실행 유추 프로세스에 대해 비동기 유추를 실행할 수 있습니다. MLflow 서버에는 이 기능이 없지만 Spark 작업을 사용하면 유사한 기능을 얻을 수 있습니다. 일괄 처리 엔드포인트 및 MLflow 모델에 대해 자세히 알아보려면 일괄 처리 배포에 MLflow 모델 사용을 참조하세요.

입력 형식

다음 표는 MLflow 기본 제공 서버와 Azure Machine Learning 온라인 엔드포인트에서 지원하는 입력 형식을 보여 줍니다.

Input type MLflow 기본 제공 서버 Azure Machine Learning 온라인 엔드포인트
분할 방향의 JSON 직렬화 pandas DataFrames
레코드 방향의 JSON 직렬화 pandas DataFrames 더 이상 사용되지 않음
CSV 직렬화 pandas DataFrames 일괄 처리 유추를 사용합니다. 자세한 내용은 일괄 처리 엔드포인트에 MLflow 모델 배포를 참조하세요.
JSON 직렬화된 목록(텐서) 및 목록 사전(명명된 텐서)으로서의 TensorFlow 입력
TensorFlow 서비스 제공 API를 사용한 TensorFlow 입력

다음 섹션에서는 Azure Machine Learning 온라인 엔드포인트에 배포된 MLflow 모델에 중점을 둡니다.

입력 구조

입력 형식에 관계없이 Azure Machine Learning에서는 사전 키 input_data의 JSON 페이로드로 입력을 제공해야 합니다. mlflow models serve 명령을 사용하여 모델을 제공할 때는 이 키가 필요하지 않으므로 Azure Machine Learning 온라인 엔드포인트와 MLflow 기본 제공 서버에서 페이로드를 서로 바꿔 사용할 수 없습니다.

Important

MLflow 2.0에서는 페이로드 구조가 변경되었습니다.

다음 페이로드 예는 MLflow 기본 제공 서버와 Azure Machine Learning 유추 서버에 배포된 모델 간의 차이점을 보여 줍니다.

분할 방향의 JSON 직렬화된 Pandas DataFrame

{
    "input_data": {
        "columns": [
            "age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
        ],
        "index": [1],
        "data": [
            [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
        ]
    }
}

Tensor 입력

{
    "input_data": [
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
    ]
}

명명된 텐서 입력

{
    "input_data": {
        "tokens": [
          [0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
        ],
        "mask": [
          [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
        ]
    }
}

MLflow 모델에 대한 유추 사용자 지정

채점 스크립트는 사용자 지정 모델에 대한 유추를 실행하는 방법을 사용자 지정합니다. 하지만 MLflow 모델 배포의 경우 유추를 실행하는 방법에 대한 결정은 배포 엔지니어가 아닌 모델 작성기가 내립니다. 각 모델 프레임워크는 특정 유추 루틴을 자동으로 적용할 수 있습니다.

MLflow 모델에 대한 유추가 실행되는 방식을 변경해야 하는 경우 다음 작업 중 하나를 수행할 수 있습니다.

  • 모델이 학습 루틴에 기록되는 방식을 변경합니다.
  • 배포 시 채점 스크립트를 사용하여 유추를 사용자 지정합니다.

학습 중에 모델이 기록되는 방식 변경

mlflow.autolog 또는 mlflow.<flavor>.log_model을 사용하여 모델을 기록하는 경우 모델에 사용된 버전에 따라 유추를 실행하는 방법과 반환할 결과가 결정됩니다. MLflow는 특정 동작을 predict() 함수가 결과를 생성하는 방법에 적용하지 않습니다.

어떤 경우에는 모델을 실행하기 전 및 후에 전처리 또는 후처리를 수행해야 할 수도 있습니다. 또는 반환되는 내용을 변경할 수도 있습니다. 예를 들어, 클래스 대신 확률을 변경할 수 있습니다. 한 가지 솔루션은 입력에서 출력으로 직접 이동하는 기계 학습 파이프라인을 구현하는 것입니다.

예를 들어, sklearn.pipeline.Pipeline 또는 pyspark.ml.Pipeline은 파이프라인을 구현하는 데 널리 사용되는 방법이며 성능상의 이유로 권장되기도 합니다. 사용자 지정 모델을 로깅하여 모델이 유추를 수행하는 방식을 사용자 지정할 수도 있습니다.

채점 스크립트를 사용하여 유추 사용자 지정

MLflow 모델에는 채점 스크립트가 필요하지 않지만, 필요한 경우 MLflow 모델에 대한 유추 실행을 사용자 지정하기 위해 스크립트를 제공할 수 있습니다. 유추를 사용자 지정하는 방법에 대한 자세한 내용은 온라인 엔드포인트의 경우 MLflow 모델 배포 사용자 지정 또는 일괄 처리 엔드포인트의 경우 채점 스크립트를 사용하여 모델 배포 사용자 지정을 참조하세요.

Important

MLflow 모델 배포를 위한 채점 스크립트를 지정하도록 선택한 경우 배포 환경도 제공해야 합니다.

배포 도구

Azure Machine Learning은 MLflow 모델을 온라인 및 일괄 처리 엔드포인트에 배포하기 위한 다음 도구를 제공합니다.

각 도구는 서로 다른 기능을 가지고 있으며, 특히 어떤 형식의 컴퓨팅을 대상으로 할 수 있는지가 다릅니다. 다음 표는 다양한 MLflow 배포 시나리오에 대한 지원을 보여 줍니다.

시나리오 MLflow SDK Azure Machine Learning CLI/SDK 또는 스튜디오
관리형 온라인 엔드포인트에 배포1 지원. 온라인 엔드포인트에 대한 MLflow 모델의 점진적 롤아웃 참조 지원. 온라인 엔드포인트에 MLflow 모델 배포 참조
채점 스크립트를 사용하여 관리형 온라인 엔드포인트에 배포 지원되지 않음3 지원. MLflow 모델 배포 사용자 지정 참조
일괄 처리 엔드포인트에 배포 지원되지 않음3 지원. 일괄 처리 배포에서 MLflow 모델 사용 참조
채점 스크립트를 사용하여 일괄 처리 엔드포인트에 배포 지원되지 않음3 지원. 채점 스크립트를 사용하여 모델 배포 사용자 지정 참조
Azure Container Instances 또는 AKS(Azure Kubernetes Service)와 같은 웹 서비스에 배포 레거시 지원2 지원되지 않음2
채점 스크립트를 사용하여 Container Instances 또는 AKS와 같은 웹 서비스에 배포 지원되지 않음3 레거시 지원2

1 프라이빗 링크가 사용하도록 설정된 작업 영역에 있는 온라인 엔드포인트에 배포하려면 배포(미리 보기) 전에 모델을 패키지해야 합니다.

2 가능하면 관리형 온라인 엔드포인트로 전환합니다.

3 오픈 소스 MLflow에는 채점 스크립트 개념이 없으며 일괄 처리 실행을 지원하지 않습니다.

배포 도구 선택

다음의 경우 MLflow SDK를 사용합니다.

  • MLflow에 익숙하고 동일한 방법을 계속 사용하려는 경우
  • MLflow를 기본적으로 지원하는 Azure Databricks와 같은 플랫폼을 사용하고 있는 경우

다음의 경우 Azure Machine Learning CLI v2 또는 Python용 SDK를 사용합니다.

  • 이러한 도구에 익숙한 경우
  • 파이프라인을 사용하여 배포를 자동화하려는 경우
  • Git 리포지토리에 배포 구성을 유지하려는 경우

MLflow로 학습된 모델을 신속하게 배포하고 테스트하려면 Azure Machine Learning 스튜디오 UI를 사용합니다.