MLflow 플랫폼은 크게 MLflow Tracking, MLflow Projects, MLflow Models, MLflow Model Registry의 컴포넌트로 구성된다.
이 글에서는 그 중 MLflow Tracking 기능에 대해서 정리한다. MLflow Model Registry의 기본적인 기능은 아래와 같다.
- MLflow Model Registry
- MLflow 모델의 전체 수명 주기를 공동으로 관리하기 위한 중앙 집중식 모델 스토어, API 및 UI 모음
- 모델 계보(MLflow 실험 및 실행이 모델을 생성함), 모델 버전 관리, 단계 전환(예: 스테이징에서 프로덕션으로) 및 주석을 제공.
단순하게 설명하면 $Model Registry$ 는 이름에서 파악이 되듯 모델의 저장소 역할을 한다. 모델은 앞서 설명했지만 간단하게 MLflow 프로젝트의 개별 실행을 통해 생성되는 아티팩트 중 하나인 모델을 저장하는 것이다.
이렇게 $Model Registry$에 저장된 모델은 어디서든 쉽게 불러와 사용할 수 있다.
Model Registry의 컨셉
- Model
- MLflow Model은 $mlflow.<model_flavor>.log_model()$ API를 사용하여 생성된 실험 또는 실행에서 생성된다. 일단 이렇게 모델로 생성이 되어야 Model Registry에 등록할 수 있다.
- Registered Model (등록된 모델)
- 등록된 모델은 고유한 이름을 가지며 버전과 스테이지 변환과 관련된 단계, 모델 계보, 기타 메타데이터 등으 포함된다.
- Model Version
- 각 등록된 모델은 하나 이상의 버전을 가지고 있다. 새로운 모델이 추가되면 버전 1로 등록이 되며, 동일한 모델명을 가진 모델이 추가되면 새로운 버전으로 기존 버전에 1추가하여 등록된다.
- Model Stage
- 각 개별 모델 버전은 주어진 시간에 하나의 스테이지에 할당될 수 있다. MLflow는 스테이징, 프로덕션 또는 아카이브와 같은 일반적인 사용 사례에 대해 미리 정의된 단계를 제공한다. 한 스테이지에서 다른 스테이지로 모델 버전을 전환할 수 있다.
- Annotation and Descriptions
- 알고리즘 설명, 사용된 데이터 세트 또는 방법론과 같은 팀에 유용한 설명 및 관련 정보를 포함하여 Markdown을 사용하여 최상위 모델 및 각 버전에 개별적으로 주석을 추가할 수
MLflow Model 등록하기
1. mlflow ui 에서 등록하기
mlflow run을 통해 예제를 실행한 후 mlflow ui를 들어가면 아래와 같은 화면을 볼 수 있다.
위 화면 우측 하단에 표기된 Register Model을 클릭하면 방금 학습한 모델을 Model Registry에 등록할 수 있다.
이렇게 등록한 모델은 상단 Models 메뉴에 들어가면 Registered Models 항목으로 볼 수 있다. 방금 등록한 모델이 Vesrion 1로 등록되어있는 것을 확인할 수 있다.
Version 1을 클릭해서 들어가보자. 들어가면 Stage를 Staging, Production, Archived로 변경할 수 있는 기능을 제공한다.
2. mlflow log_model API 사용하여 등록하기
예제코드에서 아래와 같이 코드를 수정한다. 등록하려는 모델명을 log_model()의 파라미터로 전달한다.
@@ -12,5 +12,5 @@ if __name__ == "__main__":
score = lr.score(X, y)
print("Score: %s" % score)
mlflow.log_metric("score", score)
- mlflow.sklearn.log_model(lr, "model")
+ mlflow.sklearn.log_model(lr, "model", registered_model_name = "Sklearn_LogisticRegression")
print("Model saved in run %s" % mlflow.active_run().info.run_uuid)
코드를 수정한 다음 다시 mlflow를 실행해 본다.
$ mlflow run . --env-manager=local --experiment-name="regression-test"
2023/04/07 15:51:26 INFO mlflow.projects.utils: === Created directory /tmp/tmpbktorz9c for downloading remote URIs passed to arguments of type 'path' ===
2023/04/07 15:51:26 INFO mlflow.projects.backend.local: === Running command 'python train.py' in run with ID '2f7a52208731481fa5a45e85fcb94b18' ===
Score: 0.6666666666666666
/usr/local/lib/python3.8/dist-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils.
warnings.warn("Setuptools is replacing distutils.")
Registered model 'Sklearn_LogisticRegression' already exists. Creating a new version of this model...
2023/04/07 15:51:29 INFO mlflow.tracking._model_registry.client: Waiting up to 300 seconds for model version to finish creation. Model name: Sklearn_LogisticRegression, version 2
Created version '2' of model 'Sklearn_LogisticRegression'.
Model saved in run 2f7a52208731481fa5a45e85fcb94b18
2023/04/07 15:51:29 INFO mlflow.projects: === Run (ID '2f7a52208731481fa5a45e85fcb94b18') succeeded ===
그럼 아래와 같이 버전이 1에서 2로 변경된 것을 볼 수 있다. 만약 registered_model_name에 전달한 모델명이 기존에 등록된 모델이 아니라면 Version 1으로 등록된다.
3. mlflow register_model() API 사용하여 등록하기
'AI > MLOps' 카테고리의 다른 글
[Poetry] requirements.txt 파일로 Poetry에 import 하기 (0) | 2024.05.17 |
---|---|
[MLflow] MLflow Project와 Model의 차이 (0) | 2023.05.21 |
[MLflow] #4. MLflow Projects 정리하기 (0) | 2023.04.05 |
[MLflow] #3. MLflow Model 정리하기 (0) | 2023.04.01 |
[MLflow] #2. Tracking 기능 사용해보기 (0) | 2023.03.30 |