MLflow 모델 배포 지침

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

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

MLflow 모델 배포와 사용자 지정 모델 배포

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

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

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

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

Python 패키지 및 종속성

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

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

conda.yaml

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

Warning

MLflow는 모델을 로깅할 때 자동으로 패키지를 검색하고 모델의 conda 종속성에 패키지 버전을 고정합니다. 그러나 이 자동 패키지 검색이 항상 사용자의 의도나 요구 사항을 반영하는 것은 아닙니다. 이러한 경우에는 사용자 지정 Conda 종속성 정의가 포함된 로깅 모델을 고려해 보세요.

서명이 있는 모델 사용의 의미

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

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

다음 파일은 MLflow 모델과 연결된 MLmodel 파일을 보여 줍니다.

MLmodel

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 모델의 서명은 선택 사항이지만 데이터 호환성 문제를 조기에 검색하는 편리한 방법을 제공하므로 적극 권장됩니다. 서명을 사용하여 모델을 로깅하는 방법에 대한 자세한 내용은 사용자 지정 서명, 환경 또는 샘플을 사용하여 모델 로깅을 참조하세요.

Azure Machine Learning에 배포된 모델과 MLflow 기본 제공 서버에 배포된 모델

MLflow에는 모델 개발자가 모델을 로컬로 테스트하는 데 사용할 수 있는 기본 제공 배포 도구가 포함되어 있습니다. 예를 들어, mlflow models serve -m my_model 또는 MLflow CLI mlflow models predict를 사용하여 MLflow 서버 레지스트리에 등록된 모델의 로컬 인스턴스를 실행할 수 있습니다.

일괄 처리 엔드포인트와 온라인 엔드포인트를 사용한 유추

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

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

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

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

입력 형식

Input type MLflow 기본 제공 서버 Azure Machine Learning 온라인 엔드포인트
분할 방향의 JSON 직렬화 pandas DataFrames
레코드 방향의 JSON 직렬화 pandas DataFrames 더 이상 사용되지 않음
CSV 직렬화 pandas DataFrames 일괄 처리 사용1
JSON 직렬화 목록(텐서) 및 목록 사전(명명된 텐서)의 텐서 입력 형식
TF Serving의 API에서와 같이 형식이 지정된 텐서 입력

1 일괄 처리 유추를 사용하여 파일을 처리하는 것이 좋습니다. 자세한 내용은 일괄 처리 엔드포인트에 MLflow 모델 배포를 참조하세요.

입력 구조

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

Important

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

이 섹션에서는 MLflow 기본 제공 서버와 Azure Machine Learning 유추 서버에 배포된 모델의 차이점과 다양한 페이로드 예를 보여 줍니다.

분할 방향의 JSON 직렬화 pandas DataFrames에 대한 페이로드 예제

{
    "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]
        ]
    }
}

텐서 입력에 대한 페이로드 예제

{
    "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 모델 배포 시 유추 사용자 지정

사용자 지정 모델에 대해 유추가 실행되는 방식을 사용자 지정하기 위해 채점 스크립트를 작성하는 데 익숙할 수 있습니다. 그러나 Azure Machine Learning에 MLflow 모델을 배포할 때 유추를 실행하는 방법에 대한 결정은 DevOps 엔지니어(모델을 배포하려는 사람)가 아닌 모델 작성자(모델을 빌드한 사람)가 내립니다. 각 모델 프레임워크는 특정 유추 루틴을 자동으로 적용할 수 있습니다.

언제든지 MLflow 모델의 유추가 실행되는 방식을 변경해야 하는 경우 다음 두 가지 작업 중 하나를 수행할 수 있습니다.

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

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

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

그러나 경우에 따라 모델 실행 전후에 전처리나 사후 처리를 수행해야 할 수도 있습니다. 때로는 반환되는 내용을 변경하고 싶을 수도 있습니다(예: 확률 및 클래스). 한 가지 솔루션은 입력에서 출력으로 직접 이동하는 기계 학습 파이프라인을 구현하는 것입니다. 예를 들어, sklearn.pipeline.Pipeline 또는 pyspark.ml.Pipeline은 파이프라인을 구현하는 데 널리 사용되는 방법이며 때로는 성능 고려 사항으로 권장됩니다. 또 다른 대안은 사용자 지정 모델 버전을 사용하여 모델이 유추를 수행하는 방식을 사용자 지정하는 것입니다.

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

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

Important

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

배포 도구

Azure Machine Learning은 MLflow 모델을 온라인 및 일괄 처리 엔드포인트에 배포하는 여러 가지 방법을 제공합니다. 다음 도구를 사용하여 모델을 배포할 수 있습니다.

  • MLflow SDK
  • Azure Machine Learning CLI
  • Python용 Azure Machine Learning SDK
  • Azure Machine Learning Studio

각 워크플로에는 다양한 기능, 특히 대상으로 지정할 수 있는 컴퓨팅 유형에 대한 기능이 있습니다. 다음 표에서는 다양한 기능을 보여 줍니다.

시나리오 MLflow SDK Azure Machine Learning CLI/SDK Azure Machine Learning Studio
관리형 온라인 엔드포인트에 배포 예제 참조1 예제 참조1 예제 참조1
관리형 온라인 엔드포인트에 배포(채점 스크립트 사용) 지원되지 않음3 예제 참조 예제 참조
일괄 처리 엔드포인트에 배포 지원되지 않음3 예제 참조 예제 참조
일괄 처리 엔드포인트에 배포(채점 스크립트 사용) 지원되지 않음3 예제 참조 예제 참조
웹 서비스에 배포(ACI/AKS) 레거시 지원2 지원되지 않음2 지원되지 않음2
웹 서비스에 배포(ACI/AKS - 채점 스크립트 사용) 지원되지 않음3 레거시 지원2 레거시 지원2

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

2 대신 관리형 온라인 엔드포인트로 전환하는 것이 좋습니다.

3 MLflow(OSS)에는 채점 스크립트 개념이 없으며 현재 일괄 처리 실행을 지원하지 않습니다.

어떤 배포 도구를 사용해야 하나요?

  • 다음 조건이 모두 적용되는 경우 MLflow SDK를 사용합니다.

    • MLflow에 익숙하거나 기본적으로 MLflow를 지원하는 플랫폼(예: Azure Databricks)을 사용하고 있습니다.
    • MLflow의 동일한 메서드 집합을 계속 사용하려고 합니다.
  • 다음 조건 중 하나라도 해당되는 경우 Azure Machine Learning CLI v2를 사용합니다.

    • 사용자는 Azure Machine Learning CLI v2에 더 익숙합니다.
    • 자동화 파이프라인을 사용하여 배포를 자동화하려고 합니다.
    • git 리포지토리에 배포 구성을 유지하려고 합니다.
  • MLflow로 학습된 모델을 빠르게 배포하고 테스트하려면 Azure Machine Learning 스튜디오 UI 배포를 사용합니다.