MLflow 모델을 Azure 웹 서비스로 배포
적용 대상: Python SDK azureml v1
MLFlow는 기계 학습 실험의 수명 주기를 관리하기 위한 오픈 소스 라이브러리입니다. MLflow가 Azure Machine Learning과 통합되어 관리 기능을 모델 학습을 넘어 프로덕션 모델의 배포 단계로 확장할 수 있습니다. 이 문서에서는 Mlflow 모델을 Azure 웹 서비스로 배포하고, Azure Machine Learning 모델 관리 및 데이터 드리프트 검색 기능을 프로덕션 모델에 적용합니다.
다음 다이어그램에서는 MLflow 배포 API가 Azure Machine Learning과 통합하여 모델을 배포하는 방법을 보여 줍니다. PyTorch, Tensorflow 또는 scikit-learn과 같은 인기 있는 프레임워크를 사용하여 모델을 Azure 웹 서비스로 만들고 작업 영역에서 서비스를 관리합니다.
팁
이 문서는 Azure Machine Learning 웹 서비스 엔드포인트에 MLflow 모델을 배포하려는 데이터 과학자 및 개발자를 지원합니다. 할당량, 완료된 학습 실행 또는 완료된 모델 배포와 같이 Azure Machine Learning의 리소스 사용량 및 이벤트를 모니터링하려는 관리자인 경우 Azure Machine Learning 모니터링을 참조하세요.
필수 조건
기계 학습 모델 학습 학습된 모델이 없는 경우 GitHub의 Azure Machine Learning Notebook 리포지토리에서 컴퓨팅 시나리오에 가장 적합한 Notebook을 다운로드합니다. Notebook의 지침에 따라 셀을 실행하여 모델을 준비합니다.
azureml-mlflow 패키지를 설치합니다. 이 패키지는 Azure Machine Learning Python SDK에 azureml-core 정의를 자동으로 로드하여 작업 영역에 액세스하기 위한 MLflow에 대한 연결을 제공합니다.
작업 영역에서 MLflow 작업을 수행하는 데 필요한 액세스 권한이 있는지 확인합니다.
배포 옵션
Azure Machine Learning은 다음에 대한 배포 구성 옵션을 제공합니다.
- Azure Container Instances: 빠른 개발-테스트 배포에 적합합니다.
- AKS(Azure Kubernetes Service): 스케일링 가능한 프로덕션 배포에 권장됩니다.
참고 항목
Azure Machine Learning 엔드포인트(v2)는 더 간단하고 향상된 배포 환경을 제공합니다. 엔드포인트는 실시간 및 일괄 처리 유추 시나리오를 둘 다 지원합니다. 엔드포인트는 컴퓨팅 유형 간에 모델 배포를 호출하고 관리할 수 있는 통합 인터페이스를 제공합니다. Azure Machine Learning 엔드포인트란?을 참조하세요.
더 많은 MLflow 및 Azure Machine Learning 기능 통합에 대해서는 v2 SDK를 사용하는 MLflow 및 Azure Machine Learning(v2)을 참조하세요.
Azure Container Instances에 배포
Azure Machine Learning 웹 서비스에 MLflow 모델을 배포하려면, Azure Machine Learning에 연결하기 위한 Mlflow 추적 URI를 사용하여 모델을 설정해야 합니다.
Azure Container Instances에 배포하는 경우 배포 구성을 정의할 필요가 없습니다. 구성이 제공되지 않으면 서비스는 기본적으로 Azure Container Instances 배포로 설정됩니다. Azure Machine Learning에 대해 MLflow의 deploy 메서드를 사용하여 한 번에 모델을 등록하고 배포할 수 있습니다.
from mlflow.deployments import get_deploy_client
# Set the tracking URI as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())
# Set the model path
model_path = "model"
# Define the model path and the name as the service name
# The model is registered automatically and a name is autogenerated by using the "name" parameter
client.create_deployment(name="mlflow-test-aci", model_uri='runs:/{}/{}'.format(run.id, model_path))
배포 구성 json 파일 사용자 지정
기본값을 사용하지 않으려는 경우 deploy_configuration() 메서드의 매개 변수를 참조로 사용하는 배포 구성 json 파일을 통해 배포를 설정할 수 있습니다.
배포 구성 매개 변수 정의
배포 구성 json 파일에서 각 배포 구성 매개 변수를 사전 형식으로 정의합니다. 다음의 코드 조각이 예를 제공합니다. 배포 구성 json 파일에 포함될 수 있는 항목에 대한 자세한 내용은 Azure Machine Learning Azure CLI 참조에서 Azure Container Instance 배포 구성 스키마를 참조하세요.
{"computeType": "aci",
"containerResourceRequirements": {"cpu": 1, "memoryInGB": 1},
"location": "eastus2"
}
그런 다음, 구성 json 파일을 사용하여 배포를 만들 수 있습니다.
# Set the deployment config json file
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path), config=test_config, name="mlflow-test-aci")
AKS(Azure Kubernetes Service)에 배포
Azure Machine Learning 웹 서비스에 MLflow 모델을 배포하려면, Azure Machine Learning에 연결하기 위한 Mlflow 추적 URI를 사용하여 모델을 설정해야 합니다.
AKS에 배포하려면 먼저 ComputeTarget.create() 메서드를 사용하여 AKS 클러스터를 만듭니다. 이 프로세스에서 새 클러스터를 만드는 데 20~25분이 걸릴 수 있습니다.
from azureml.core.compute import AksCompute, ComputeTarget
# Use the default configuration (can also provide parameters to customize)
prov_config = AksCompute.provisioning_configuration()
aks_name = 'aks-mlflow'
# Create the cluster
aks_target = ComputeTarget.create(workspace=ws, name=aks_name, provisioning_configuration=prov_config)
aks_target.wait_for_completion(show_output = True)
print(aks_target.provisioning_state)
print(aks_target.provisioning_errors)
deploy_configuration() 메서드 값을 참조로 사용하여 배포 구성 json을 만듭니다. 다음 예제와 같이 각 배포 구성 매개 변수를 사전으로 정의합니다.
{"computeType": "aks", "computeTargetName": "aks-mlflow"}
그런 다음, MLflow의 배포 클라이언트를 사용하여 단일 단계로 모델을 등록하고 배포합니다.
from mlflow.deployments import get_deploy_client
# Set the tracking URI as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())
# Set the model path
model_path = "model"
# Set the deployment config json file
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}
# Define the model path and the name as the service name
# The model is registered automatically and a name is autogenerated by using the "name" parameter
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path), config=test_config, name="mlflow-test-aci")
서비스 배포에는 몇 분 정도 걸릴 수 있습니다.
리소스 정리
배포된 웹 서비스를 사용할 계획이 없는 경우, service.delete()
메서드를 사용하여 Notebook에서 서비스를 삭제합니다. 자세한 내용은 Python SDK 설명서에서 WebService 클래스의 delete() 메서드를 참조하세요.
예제 Notebook 살펴보기
Azure Machine Learning Notebook을 사용한 MLflow는 이 문서에 나와 있는 개념에 따라 시연하고 확장합니다.
참고 항목
MLflow를 사용하는 예제의 커뮤니티 기반 리포지토리는 GitHub의 Azure Machine Learning 예제 리포지토리를 참조하세요.