MLflow를 사용하여 Azure Machine Learning에서 모델 레지스트리 관리

Azure Machine Learning은 작업 영역에 연결된 경우 모델 관리를 위한 MLflow를 지원합니다. 이러한 접근 방식은 MLFlow 클라이언트에 익숙한 사용자를 위해 전체 모델 수명 주기를 지원하는 편리한 방법을 나타냅니다. 다음 문서에서는 다양한 기능과 다른 옵션과 비교하는 방법에 대해 설명합니다.

필수 조건

  • MLflow SDK 패키지 mlflow 및 MLflow azureml-mlflow용 Azure Machine Learning 플러그 인을 설치합니다.

    pip install mlflow azureml-mlflow
    

    SQL Storage, 서버, UI 또는 데이터 과학 종속성이 없는 경량 MLflow 패키지인 패키지를 사용할 mlflow-skinny 수 있습니다. mlflow-skinny 는 배포를 비롯한 전체 기능 모음을 가져오지 않고 MLflow의 추적 및 로깅 기능이 주로 필요한 사용자에게 권장됩니다.

  • Azure Machine Learning 작업 영역 기계 학습 리소스 만들기 자습서따라 만들 수 있습니다.

    • 작업 영역에서 MLflow 작업을 수행하는 데 필요한 액세스 권한을 확인합니다.
  • 원격 추적(즉, Azure Machine Learning 외부에서 실행되는 실험 추적)을 수행하는 경우 Azure Machine Learning 작업 영역의 추적 URI를 가리키도록 MLflow를 구성합니다. MLflow를 작업 영역에 연결하는 방법에 대한 자세한 내용은 Azure Machine Learning용 MLflow 구성을 참조하세요.

  • MLflow를 사용한 모델 관리에는 조직 레지스트리가 지원되지 않습니다.

  • 일부 작업은 MLflow 흐름 API(mlflow.<method>)를 사용하여 직접 실행될 수 있습니다. 그러나 다른 사용자는 MLflow 프로토콜에서 Azure Machine Learning과 통신할 수 있는 MLflow 클라이언트를 만들어야 할 수 있습니다. 다음과 같이 개체를 MlflowClient 만들 수 있습니다. 이 자습서에서는 개체 client 를 사용하여 이러한 MLflow 클라이언트를 참조합니다.

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

레지스트리에 새 모델 등록

모델 레지스트리는 작업 영역에서 모델을 관리하는 편리하고 중앙 집중식 방법을 제공합니다. 각 작업 영역에는 고유한 독립 모델 레지스트리가 있습니다. 다음 섹션에서는 MLflow SDK를 사용하여 레지스트리에 모델을 등록하는 여러 가지 방법을 설명합니다.

기존 실행에서 모델 만들기

실행 내부에 기록된 MLflow 모델이 있고 레지스트리에 등록하려는 경우 실행 ID와 모델이 기록된 경로를 사용합니다. 정보가 없는 경우 이 정보를 쿼리하는 방법을 알아보려면 MLflow로 실험 및 실행 관리를 참조하세요.

mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)

참고 항목

모델은 실행이 추적된 동일한 작업 영역의 레지스트리에만 등록할 수 있습니다. 작업 영역 간 작업은 현재 Azure Machine Learning에서 지원되지 않습니다.

자산을 생성한 작업에서 계보를 유지하려면 실행에서 모델을 등록하거나 실행 내부에서 메서드 mlflow.<flavor>.log_model 를 사용하는 것이 좋습니다.

자산에서 모델 만들기

MLModel MLflow 모델이 있는 폴더가 있으면 직접 등록할 수 있습니다. 모델이 항상 실행 컨텍스트에 있을 필요는 없습니다. 이를 위해 URI 스키마 file://path/to/model을 사용하여 로컬 파일 시스템에 저장된 MLflow 모델을 등록할 수 있습니다. Scikit-Learn을 사용하여 간단한 모델을 만들고 로컬 스토리지에 MLflow 형식으로 저장해 보겠습니다.

from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

mlflow.sklearn.save_model(reg, "./regressor")

save_model() 메서드는 log_model()과 같은 방식으로 작동합니다. log_model()에서 활성 실행 시 모델을 내부에 저장하는 동안 save_model()에서 로컬 파일 시스템을 사용하여 모델을 저장합니다.

이제 로컬 경로에서 모델을 등록할 수 있습니다.

import os

model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")

모델 레지스트리 쿼리

MLflow SDK를 사용하여 레지스트리에 등록된 모델을 쿼리하고 검색할 수 있습니다. 다음 섹션에서는 이를 달성하는 여러 가지 방법을 설명합니다.

레지스트리의 모든 모델 쿼리

MLflow 클라이언트를 사용하여 레지스트리의 등록된 모든 모델을 쿼리할 수 있습니다. 다음 샘플은 모든 모델의 이름을 인쇄합니다.

for model in client.search_registered_models():
    print(f"{model.name}")

와 같은 creation_timestampnameversion특정 속성으로 순서를 지정하는 last_updated_timestamp데 사용합니다.order_by

client.search_registered_models(order_by=["name ASC"])

참고 항목

MLflow 2.0 권고: 이전 버전의 Mlflow(<2.0)에서는 대신 메서드 MlflowClient.list_registered_models() 를 사용합니다.

특정 버전의 모델 가져오기

search_registered_models() 명령은 모든 모델 버전을 포함하는 모델 개체를 검색합니다. 그러나 지정된 모델의 마지막으로 등록된 모델 버전을 가져오려면 get_registered_model을 사용할 수 있습니다.

client.get_registered_model(model_name)

특정 버전의 모델이 필요한 경우 다음과 같이 표시할 수 있습니다.

client.get_model_version(model_name, version=2)

레지스트리에서 모델 로드

레지스트리에서 직접 모델을 로드하여 기록된 모델 개체를 복원할 수 있습니다. 함수 mlflow.<flavor>.load_model() 또는 mlflow.pyfunc.load_model()을 통해 다음 구문을 사용하여 로드하려는 모델의 URI를 나타냅니다.

  • models:/<model-name>/latest - 모델의 마지막 버전을 로드합니다.
  • models:/<model-name>/<version-number> - 모델의 특정 버전을 로드합니다.
  • models:/<model-name>/<stage-name> - 모델에 대해 지정된 단계에서 특정 버전을 로드합니다. 자세한 내용은 모델 단계를 참조하세요.

MLflow mlflow.<flavor>.load_model()mlflow.pyfunc.load_model()모델 로드에 대한 워크플로를 확인하여 차이점을 알아봅니다.

모델 단계

MLflow는 모델의 수명 주기를 관리하기 위해 모델의 단계를 지원합니다. 모델의 버전은 한 단계에서 다른 단계로 전환될 수 있습니다. 단계는 모델 대신 모델의 버전에 할당됩니다. 즉, 지정된 모델이 다른 단계에서 여러 버전을 가질 수 있습니다.

Important

단계는 MLflow SDK를 통해서만 액세스할 수 있습니다. Azure ML Studio 포털에 표시되지 않으며 Azure ML SDK, Azure ML CLI 또는 Azure ML REST API를 사용하여 검색할 수 없습니다. 지정된 모델의 단계에서 배포를 만드는 것은 현재 지원되지 않습니다.

모델 단계 쿼리

MLflow 클라이언트를 사용하여 모델이 가능한 모든 단계를 확인할 수 있습니다.

client.get_model_version_stages(model_name, version="latest")

레지스트리에서 모델을 가져와 각 단계에 어떤 모델의 버전이 있는지 확인할 수 있습니다. 다음 예는 현재 단계 Staging에 있는 모델의 버전을 가져옵니다.

client.get_latest_versions(model_name, stages=["Staging"])

참고 항목

Mlflow에서는 여러 버전이 동시에 같은 단계에 있을 수 있지만 이 메서드는 모든 버전 중에서 최신 버전(더 큰 버전)을 반환합니다.

Warning

단계 이름은 대/소문자를 구분합니다.

모델 전환

MLflow 클라이언트를 사용하여 모델 버전을 특정 단계로 전환할 수 있습니다.

client.transition_model_version_stage(model_name, version=3, stage="Staging")

기본적으로 해당 특정 단계에서 기존 모델 버전이 있는 경우 다시 기본. 따라서 여러 모델의 버전이 동시에 동일한 단계에 있을 수 있으므로 대체되지 않습니다. 또는 archive_existing_versions=True를 지정하여 MLflow에 기존 모델의 버전을 Archived 단계로 이동하도록 지시할 수 있습니다.

client.transition_model_version_stage(
    model_name, version=3, stage="Staging", archive_existing_versions=True
)

단계에서 모델 로드

load_model 함수와 다음 URI 형식을 사용하여 Python에서 직접 특정 단계의 모델을 로드할 수 있습니다. 이 방법이 성공하려면 작업 중인 환경에 모든 라이브러리와 종속성이 이미 설치되어 있어야 합니다.

model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")

모델 편집 및 삭제

등록된 모델 편집은 Mlflow와 Azure ML 모두에서 지원됩니다. 그러나 주의해야 할 몇 가지 차이점이 있습니다.

Warning

모델 개체는 변경할 수 없으므로 모델 이름 바꾸기는 Azure Machine Learning에서 지원되지 않습니다.

모델 편집

Mlflow를 사용하여 모델에서 모델의 설명과 태그를 편집할 수 있습니다.

client.update_model_version(model_name, version=1, description="My classifier description")

태그를 편집하려면 set_model_version_tagremove_model_version_tag 메서드를 사용해야 합니다.

client.set_model_version_tag(model_name, version="1", key="type", value="classification")

태그 제거:

client.delete_model_version_tag(model_name, version="1", key="type")

모델 버전 삭제

다음 예와 같이 MLflow 클라이언트를 사용하여 레지스트리에서 모든 모델 버전을 삭제할 수 있습니다.

client.delete_model_version(model_name, version="2")

참고 항목

Azure Machine Learning은 전체 모델 컨테이너 삭제를 지원하지 않습니다. 동일한 결과를 가져오려면 지정된 모델에서 모든 모델 버전을 삭제해야 합니다.

MLflow로 모델 관리를 위한 지원 행렬

MLflow 클라이언트는 모델을 검색하고 관리하기 위한 여러 메서드를 노출합니다. 다음 표에서는 Azure ML에 연결할 때 MLflow에서 현재 지원되는 방법을 보여 줍니다. 또한 Azure ML의 다른 모델 관리 기능과 비교합니다.

기능 MLflow MLflow를 사용한 Azure ML Azure ML CLIv2 Azure ML Studio
MLflow 형식의 모델 등록
MLflow 형식이 아닌 모델 등록
실행 출력/아티팩트에서 모델 등록 1 2
다른 추적 서버/작업 영역의 실행 출력/아티팩트에서 모델 등록 5 5
등록된 모델 검색/나열
등록된 모델의 버전 세부 정보 검색
등록된 모델의 버전 설명 편집
등록된 모델의 버전 태그 편집
등록된 모델의 이름 바꾸기 3 3 3
등록된 모델(컨테이너) 삭제 3 3 3
등록된 모델의 버전 삭제
MLflow 모델 단계 관리
등록된 모델명으로 검색 4
문자열 비교기 LIKEILIKE를 사용하여 등록된 모델 검색 4
태그로 등록된 모델 검색 4
조직 레지스트리 지원

참고 항목

  • 1runs:/<ruin-id>/<path> 형식의 URI를 사용합니다.
  • 2azureml://jobs/<job-id>/outputs/artifacts/<path> 형식의 URI를 사용합니다.
  • 3 등록된 모델은 Azure ML에서 변경할 수 없는 개체입니다.
  • 4 Azure ML Studio에서 검색 상자를 사용합니다. 부분 일치가 지원됩니다.
  • 5 계보를 유지하면서 레지스트리를 사용하여 여러 작업 영역에서 모델을 이동합니다.

다음 단계