적용 대상:
Azure CLI ml 확장 v2(현재)
이 문서에서는 실시간 및 일괄 처리 유추를 위해 Azure Machine Learning에 MLflow 모델을 배포하는 방법과 배포를 관리하는 데 사용할 수 있는 다양한 도구에 대해 알아봅니다.
코드 없는 배포
사용자 지정 모델 배포와 달리 Azure Machine Learning에 MLflow 모델을 배포하는 경우 채점 스크립트 또는 환경을 제공할 필요가 없습니다. Azure Machine Learning은 점수 매기기 스크립트 및 환경을 자동으로 생성합니다. 이 기능을 코드 없는 배포라고 합니다.
코드 없는 배포의 경우 Azure Machine Learning은 다음을 수행합니다.
- MLflow 모델에 표시된 모든 패키지 종속성이 충족되는지 확인합니다.
- 다음 항목을 포함하는 MLflow 기본 이미지 또는 큐레이팅된 환경을 제공합니다.
-
mlflow-skinny를 포함하여 Azure Machine Learning이 유추를 수행하는 데 필요한 패키지 - 유추를 수행할 채점 스크립트
-
패키지 및 종속성
Azure Machine Learning은 MLflow 모델의 유추를 실행하는 환경을 자동으로 생성합니다. 환경을 빌드하기 위해 Azure Machine Learning은 MLflow 모델에 지정된 Conda 종속성을 읽고 추론 서버를 실행하는 데 필요한 패키지를 추가합니다. 이러한 추가 패키지는 배포 유형에 따라 다릅니다.
다음 예제 conda.yaml 파일은 MLflow 모델에 지정된 Conda 종속성을 보여 줍니다.
channels:
- conda-forge
dependencies:
- python=3.12.3
- pip<=23.1.2
- pip:
- mlflow
- scikit-learn==1.6.1
- psutil==5.9.4
- azureml-ai-monitoring
- azureml-inference-server-http
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.12.3
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"}]'
Tip
MLflow 모델의 서명은 데이터 호환성 문제를 검색하는 편리한 방법을 제공하기 때문에 권장됩니다. 서명이 있는 모델을 기록하는 방법에 대한 자세한 내용은 사용자 지정 서명, 환경 또는 샘플을 사용하는 로그 모델을 참조하세요.
MLflow 기본 제공 서버에 배포 vs. Azure Machine Learning 유추 서버에 배포
모델 개발자는 MLflow 기본 제공 배포 도구를 사용하여 모델을 로컬에서 테스트할 수 있습니다. 예를 들어 MLflow CLImlflow models serve를 사용하여 mlflow models predict MLflow 서버 레지스트리에 등록된 모델의 로컬 인스턴스를 실행할 수 있습니다. MLflow 기본 제공 배포 도구에 대한 자세한 내용은 MLflow 설명서의 기본 제공 배포 도구를 참조하세요.
Azure Machine Learning은 온라인 및 일괄 처리 엔드포인트에 모델을 배포하는 것도 지원합니다. 이러한 엔드포인트는 다양한 기능을 가질 수 있는 다양한 유추 기술을 실행합니다.
Azure Machine Learning 온라인 엔드포인트는 MLflow 기본 제공 서버와 유사하며, 유추를 위해 모델을 실행하는 확장 가능하고 동기식이며 가벼운 방법을 제공합니다.
Azure Machine Learning 일괄 처리 엔드포인트는 대량의 데이터로 크기 조정 가능한 장기 실행 유추 프로세스에 대해 비동기 유추를 실행할 수 있습니다. Spark 작업을 사용하여 비슷한 기능을 달성할 수 있지만 MLflow 서버에는 이 기능이 없습니다. 일괄 처리 엔드포인트 및 MLflow 모델에 대해 자세히 알아보려면 일괄 처리 배포에 MLflow 모델 사용을 참조하세요.
입력 형식
다음 표에서는 MLflow 기본 제공 서버에서 지원하는 입력 유형과 Azure Machine Learning 온라인 엔드포인트에서 지원하는 입력 형식을 보여 줍니다.
| 입력 형식 | MLflow 기본 제공 서버 | Azure Machine Learning 온라인 엔드포인트 |
|---|---|---|
| 분할 방향의 JSON 직렬화 pandas DataFrames | ✓ | ✓ |
| 레코드 방향의 JSON 직렬화 pandas DataFrames | Deprecated | |
| CSV로 직렬화된 pandas 데이터 프레임 | ✓ | 일괄 처리 유추를 사용합니다. 자세한 내용은 일괄 처리 엔드포인트에 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]
]
}
}
텐서 입력
{
"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.Pipelinepyspark.ml.Pipeline 파이프라인을 구현하는 인기 있는 방법이며 성능을 향상시키는 것이 좋습니다.
사용자 지정 모델을 로깅하여 모델이 유추를 수행하는 방식을 사용자 지정할 수도 있습니다.
점수 매기기 스크립트를 사용하여 유추 사용자 지정
MLflow 모델에는 채점 스크립트가 필요하지 않지만, 필요한 경우 MLflow 모델에 대한 유추 실행을 사용자 지정하기 위해 스크립트를 제공할 수 있습니다. 유추를 사용자 지정하는 방법에 대한 자세한 내용은 온라인 엔드포인트의 경우 MLflow 모델 배포 사용자 지정 또는 일괄 처리 엔드포인트의 경우 채점 스크립트를 사용하여 모델 배포 사용자 지정을 참조하세요.
Important
MLflow 모델 배포를 위한 채점 스크립트를 지정하도록 선택한 경우 배포 환경도 제공해야 합니다.
배포 도구
Azure Machine Learning은 MLflow 모델을 온라인 및 일괄 처리 엔드포인트에 배포하기 위한 다음 도구를 제공합니다.
- MLflow SDK
- Azure Machine Learning CLI v2
- Python용 Azure Machine Learning SDK
- Azure Machine Learning 스튜디오
각 도구는 서로 다른 기능을 가지고 있으며, 특히 어떤 형식의 컴퓨팅을 대상으로 할 수 있는지가 다릅니다. 다음 표는 다양한 MLflow 배포 시나리오에 대한 지원을 보여 줍니다.
| Scenario | MLflow SDK | Azure Machine Learning CLI/SDK 또는 스튜디오 |
|---|---|---|
| 관리형 온라인 엔드포인트에 배포합니다. 1 | Supported. 온라인 엔드포인트에 대한 MLflow 모델의 점진적 출시를 참조하세요. | Supported. 온라인 엔드포인트에 MLflow 모델 배포를 참조하세요. |
| 점수 매기기 스크립트를 사용하여 관리되는 온라인 엔드포인트에 배포합니다. | 지원되지 않습니다. 3 | Supported. MLflow 모델 배포 사용자 지정을 참조하세요. |
| 일괄 처리 엔드포인트에 배포합니다. | 지원되지 않습니다. 3 | Supported. 일괄 배포에서 MLflow 모델 사용을 참조하세요. |
| 점수 매기기 스크립트를 사용하여 일괄 처리 엔드포인트에 배포합니다. | 지원되지 않습니다. 3 | Supported. 점수 매기기 스크립트를 사용하여 모델 배포 사용자 지정을 참조하세요. |
| Azure Container Instances 또는 AKS(Azure Kubernetes Service)와 같은 웹 서비스에 배포합니다. | 레거시 지원. 2개 | 지원되지 않습니다. 2개 |
| 채점 스크립트를 사용하여 Container Instances 또는 AKS와 같은 웹 서비스에 배포합니다. | 지원되지 않습니다. 3 | 레거시 지원. 2개 |
1 가능하면 관리되는 온라인 엔드포인트로 전환합니다 .
2 오픈 소스 MLflow는 채점 스크립트 또는 일괄 처리를 지원하지 않습니다.
배포 도구 선택
다음 중 둘 다 true인 경우 MLflow SDK를 사용합니다.
- MLflow에 익숙하고 동일한 메서드를 계속 사용하려고 합니다.
- MLflow를 기본적으로 지원하는 Azure Databricks와 같은 플랫폼을 사용하고 있는 경우
다음 중 어느 것이라도 해당하는 경우 Azure Machine Learning CLI v2 또는 Python용 SDK를 사용합니다.
- 도구에 대해 잘 알고 있습니다.
- 파이프라인을 사용하여 배포를 자동화하려고 합니다.
- 배포 구성을 Git 리포지토리에 저장하려고 합니다.
MLflow로 학습된 모델을 신속하게 배포하고 테스트하려면 Azure Machine Learning 스튜디오 UI를 사용합니다.