MLflow에 대해서 알아보자 - Model Registry
MLflow 모델 레지스트리 구성요소는 MLflow 모델의 전체 수명주기를 공동으로 관리하기 위한 중앙 집중식 모델 저장소, API 및 UI 집합이다. 모델 계보 (MLflow 실험 및 실행이 모델을 생성함), 모델 버전 관리, 단계 전환 및 주석을 제공한다.
개념
모델 레지스트리는 MLflow 모델의 전체 수명주기를 설명하고 용이하게 하는 몇 가지 개념을 도입한다.
Model
MLflow 모델은 모델 버전의 mlflow.
Registered Model
MLflow 모델은 모델 레지스트리에 등록할 수 있다. 등록 된 모델은 고유한 이름이 있으며 버전, 관련 전환 단계, 모델 계보 및 기타 메타 데이터가 포함된다.
Model Version
등록된 각 모델에는 하나 이상의 버전이 있을 수 있다. 새 모델이 모델 레지스트리에 추가되면 버전 1로 추가된다. 동일한 모델 이름에 등록된 새 모델은 버전 번호가 증가한다.
Model Stage
각 고유 모델 버전은 주어진 시간에 한 단계에 할당 될 수 있다. MLflow는 Staging, Production, 또는 Archived와 같은 일반적인 사용 사례에 대해 사전 정의 된 단계를 제공한다. 한 단계에서 다른 단계로 모델 버전을 전환할 수 있다.
Annotations and Descriptions
Markdown을 사용하여 알고리즘을 설명, 사용 된 데이터 세트 또는 방법론과 같은 팀에 유용한 관련 정보를 포함하여 최상위 모델과 각 버전에 개별적으로 주석을 달 수 있다.
모델 레지스트리 워크 플로우
Registering a Model
- MLflow 실행 세부 정보 페이지의 아티팩트 섹션에서 로깅된 MLflow 모델을 선택
- 모델 등록 버튼을 클릭
- 모델 이름 필드에서 새 모델을 추가하는 경우, 모델을 식별하고 고유한 이름을 지정한다. 기존 모델에 새 버전을 등록하는 경우 드롭 다운에서 기존 모델 이름을 선택
Using the Model Registry
- 등록된 모델 페이지로 이동하여 모델 속성을 확인
- 실행 세부 정보 페이지의 아티팩트 섹션으로 이동하여 모델을 클릭 한 다음 오른쪽 상단의 모델 버전을 클릭하여 방금 생성한 버전을 확인한다. 각 모델에는 활성 버전을 보여주는 개요 페이지가 있다.
- 버전을 클릭하여 세부 정보 페이지로 이동한다.
- 버전 세부 정보 페이지에서 모델 버전 세부 정보와 모델 버전의 현재 단계를 볼 수 있다. 오른쪽 상단의 stage 드롭 다운을 클릭하여 모델 버전을 다른 유효한 stage로 전환할 수 있다.
API Workflow
모델 레지스트리와 상호작용하는 또 다른 방법은 MLflow 모델 플레이버 또는 MLflow 클라이언트 추적 API 인터페이스를 사용하는 것입니다. 특히 MLflow 실험 실행 중 또는 모든 실험 실행 후에 모델을 등록 할 수 있습니다.
모델 레지스트리에 MLflow 모델 추가
레지스트리에 모델을 추가하는 3가지 방식이 있다.
(1) mlflow.<model_flavor>.log_model()
사용하는 방법
from random import random, randint
from sklearn.ensemble import RandomForestRegressor
import mlflow
import mlflow.sklearn
with mlflow.start_run(run_name="YOUR_RUN_NAME") as run:
params = {"n_estimators": 5, "random_state": 42}
sk_learn_rfr = RandomForestRegressor(**params)
# Log parameters and metrics using the MLflow APIs
mlflow.log_params(params)
mlflow.log_param("param_1", randint(0, 100))
mlflow.log_metrics({"metric_1": random(), "metric_2": random() + 1})
# Log the sklearn model and register as version 1
mlflow.sklearn.log_model(
sk_model=sk_learn_rfr,
artifact_path="sklearn-model",
registered_model_name="sk-learn-random-forest-reg-model"
)
위 코드 스니펫에서 이름으로 등록된 모델이 존재하지않으면 새롱누 모델을 등록하고 Version 1을 생성한다.
(2) mlflow.register_model()
사용하는 방법 : 모든 실험이 완료된 후 가장 적합한 모델을 결정하고 사용하는 방법. 이 메서드의 run_id
의 일부로 runs:URI
인수가 필요하다.
result = mlflow.register_model(
"runs:/d16076a3ec534311817565e6527539c0/sklearn-model",
"sk-learn-random-forest-reg"
)
이름으로 등록 된 모델이 없는 경우 메서드는 새 모델을 등록하고 버전 1을 만든 다음 ModelVersion MLflow 개체를 반환한다. 이름으로 등록된 모델이 있는 경우 메서드는 새 모델 보전을 생성하고 버전을 개체한다.
(3) create_registered_model()
사용하는 방법 : 모델 이름이 있는 경우 새로 등록된 모델을 만들려면 고유한 이름이 필요하므로 이 메서드를 MlflowException
throw한다.
from mlflow.tracking import MlflowClient
client = MlflowClient()
client.create_registered_model("sk-learn-random-forest-reg-model")
위 방법은 버전이 연결되지 않은 빈 등록 모델을 생성하지만 아래 방법은 모델의 새 버전을 생성한다.
client = MlflowClient()
result = client.create_model_version(
name="sk-learn-random-forest-reg-model",
source="mlruns/0/d16076a3ec534311817565e6527539c0/artifacts/sklearn-model",
run_id="d16076a3ec534311817565e6527539c0"
)
모델 레지스트리에서 MLflow 모델 가져오기
MLflow 모델을 등록한 후 사용하여 해당 모델을 가져올 수 있다. mlflow.
특정 모델 버전 가져오기
특정 모델 버전을 가져오려면 해당 버전 번호를 모델 URI의 일부로 제공하면 된다.
import mlflow.pyfunc
model_name = "sk-learn-random-forest-reg-model"
model_version = 1
model = mlflow.pyfunc.load_model(
model_uri=f"models:/{model_name}/{model_version}"
)
model.predict(data)
모델 레지스트리에서 MLflow 모델 제공
MLflow 모델을 등록한 후 호스트에서 모델을 서비스로 제공 할 수 있습니다