다음을 통해 공유


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

Azure Machine Learning은 작업 영역에 연결될 때 모델 관리를 위해 MLflow를 지원합니다. 이 방법은 MLFlow 클라이언트에 익숙한 사용자를 위해 전체 모델 수명 주기를 지원하는 편리한 방법입니다.

이 문서에서는 MLflow를 사용하여 모델 레지스트리를 관리하는 기능과 이 메서드를 다른 관리 옵션과 비교하는 방법을 설명합니다.

필수 조건

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

    pip install mlflow azureml-mlflow
    

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

  • Azure Machine Learning 작업 영역 작업 영역을 만들려면 기계 학습 리소스 만들기 자습서를 참조하세요. 작업 영역에서 MLflow 작업을 수행하는 데 필요한 액세스 권한을 검토합니다.

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

  • 이 문서의 절차에서는 client 개체를 사용하여 MLflow 클라이언트를 참조합니다.

    일부 작업은 MLflow 흐름 API(mlflow.<method>)를 사용하여 직접 실행할 수 있습니다. 다른 작업에는 MLflow 프로토콜에서 Machine Learning과 통신할 수 있도록 MLflow 클라이언트가 필요합니다. 다음 코드에서는 MlflowClient 개체를 만듭니다.

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

제한 사항

  • Azure Machine Learning은 모델 이름을 바꾸는 것을 지원하지 않습니다.

  • Machine Learning은 전체 모델 컨테이너 삭제를 지원하지 않습니다.

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

  • 특정 모델 스테이지의 모델 배포는 현재 Machine Learning에서 지원되지 않습니다.

  • 작업 영역 간 작업은 현재 Machine Learning에서 지원되지 않습니다.

새 모델 등록

모델 레지스트리는 작업 영역에서 모델을 관리하는 편리하고 중앙화된 방법을 제공합니다. 각 작업 영역에는 자체 독립 모델 레지스트리가 있습니다. 다음 섹션에서는 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}")

order_by 메서드를 사용하여 특정 속성(예: name, version, creation_timestamp 또는 last_updated_timestamp)으로 출력을 구성합니다.

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

참고 항목

2.0 이전 MLflow 버전의 경우 대신 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.<flavor>.load_model() 함수와 mlflow.pyfunc.load_model() 함수 간의 차이점을 이해하려면 MLflow 모델을 로드하기 위한 워크플로를 참조하세요.

모델 스테이지 작업

MLflow는 모델 수명 주기를 관리하는 모델의 스테이지를 지원합니다. 모델 버전은 한 스테이지에서 다른 스테이지로 전환될 수 있습니다. 스테이지는 모델의 특정 버전에 할당됩니다. 모델에는 여러 스테이지의 여러 버전이 있을 수 있습니다.

Important

스테이지는 MLflow SDK를 사용해야만 액세스할 수 있습니다. 이는 Azure Machine Learning 스튜디오에는 표시되지 않습니다. Azure Machine Learning SDK, Azure Machine Learning CLI 또는 Azure Machine Learning REST API를 사용하여 스테이지를 검색할 수 없습니다. 특정 모델 스테이지의 배포는 현재 지원되지 않습니다.

쿼리 모델 스테이지

다음 코드는 MLflow 클라이언트를 사용하여 모델에 대해 가능한 모든 스테이지를 확인합니다.

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

레지스트리에서 모델을 검색하여 각 모델 스테이지의 모델 버전을 볼 수 있습니다. 다음 코드는 현재 Staging 스테이지에 있는 모델 버전을 가져옵니다.

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

여러 모델 버전이 MLflow에서 동시에 동일한 스테이지에 있을 수 있습니다. 이전 예제에서 메서드는 스테이지의 모든 버전 중에서 최신(가장 최근) 버전을 반환합니다.

Important

MLflow SDK에서 스테이지 이름은 대/소문자를 구분합니다.

모델 버전 전환

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에서 직접 특정 단계의 모델을 로드할 수 있습니다. 이 메서드가 성공하려면 모든 라이브러리 및 종속성이 작업 환경에 설치되어야 합니다.

Staging 스테이지에서 모델을 로드합니다.

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

모델 편집 및 삭제

등록된 모델 편집은 MLflow와 Azure Machine Learning 모두에서 지원되지만 몇 가지 중요한 차이점이 있습니다. 다음 섹션에서는 몇 가지 옵션을 설명합니다.

참고 항목

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

모델 설명 및 태그 편집

MLflow SDK를 사용하여 모델의 설명 및 태그를 편집할 수 있습니다.

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")

태그를 제거하려면 delete_model_version_tag 메서드를 사용합니다.

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

모델 버전 삭제

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

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

참고 항목

Machine Learning은 전체 모델 컨테이너 삭제를 지원하지 않습니다. 이 작업을 수행하려면 지정된 모델에 대한 모든 모델 버전을 삭제합니다.

모델 관리에 지원되는 기능 검토

MLflow 클라이언트는 모델을 검색하고 관리하기 위한 여러 메서드를 노출합니다. 다음 표에서는 Azure Machine Learning에 연결된 경우 MLflow에서 현재 지원되는 메서드를 나열합니다. 또한 이 표에서는 Azure Machine Learning의 다른 모델 관리 기능과 MLflow를 비교합니다.


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

표 각주:

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