Unity Catalog에서 모델 수명 주기 관리하기
Important
- 이 문서에서는 모델 관리 및 배포를 위해 Databricks가 권장하는 Unity Catalog모델을 설명합니다. Unity Catalog작업 영역을 사용하도록 설정하지 않은 경우 이 페이지의 기능을 사용할 수 없습니다. 대신 작업 영역 모델 레지스트리를 사용하여 모델 수명 주기 관리(레거시)를 참조하세요. Unity
로 업그레이드하는 방법에 대한 지침은 작업 영역 모델 레지스트리에서 Unity 로 워크플로 및 모델을 마이그레이션하는 을 참조하세요. - Unity Catalog 모델은 Azure Government 지역에서 사용할 수 없습니다.
이 문서에서는 기계 학습 워크플로의 일부로 Unity Catalog 모델을 사용하여 ML 모델의 전체 수명 주기를 관리하는 방법을 설명합니다. Databricks는 Unity CatalogMLflow 모델 레지스트리의 호스트된 버전을 제공합니다. Unity Catalog 모델은 작업 영역에서 중앙 집중식 액세스 제어, 감사, 계보 및 모델 검색을 포함하여 Unity Catalog 이점을 ML 모델로 확장합니다. Unity Catalog 모델은 오픈 소스 MLflow Python 클라이언트와 호환됩니다.
모델 레지스트리 개념에 대한 개요는 gen AI 앱 및 모델 수명 주기대한
요구 사항
Unity Catalog을 귀하의 작업 영역에서 사용 가능하도록 설정해야 합니다. Get을 참조하여 Unity Catalog을 사용하여 Unity Catalog Metastore를 생성하고, 작업 영역에서 사용하도록 설정한 다음, catalog를 만드세요. Unity Catalog 사용하도록 설정되지 않은 경우 작업 영역 모델 레지스트리사용합니다.
Unity Catalog대한 액세스 권한이 있는 컴퓨팅 리소스를 사용해야 합니다. ML 워크로드의 경우 컴퓨팅에 대한 액세스 모드는 단일 사용자여야 합니다. 자세한 내용은 액세스 모델을 참조하세요.
등록된 새 모델을 만들려면 다음 권한이 필요합니다.
-
schema 및 그를 둘러싼 catalog에 대한
USE SCHEMA
및USE CATALOG
권한. -
schema에 대한
CREATE_MODEL
권한. 이 권한을 grantCatalog Explorer UI 또는 다음 SQL GRANT 명령사용합니다.
GRANT CREATE_MODEL ON SCHEMA <schema-name> TO <principal>
-
schema 및 그를 둘러싼 catalog에 대한
참고 항목
작업 영역은 권한 상속을 지원하는 Unity Catalog 메타스토어에 연결되어야 합니다. 2022년 8월 25일 이후에 생성된 모든 metastores 마찬가지입니다. 이전 메타스토어에서 실행 중인 경우 문서에 따라를 통해 업그레이드하세요.
Unity Catalog MLflow 클라이언트 설치 및 구성
이 섹션에는 Unity CatalogMLflow 클라이언트를 설치하고 구성하는 방법에 대한 지침이 포함되어 있습니다.
MLflow Python 클라이언트 설치하기
Unity Catalog 모델에 대한 지원은 Databricks Runtime 13.2 ML 이상(Azure 중국의 Databricks Runtime 15.0 ML 이상)에 포함됩니다.
다음 코드를 사용하여 Notebook에 최신 버전의 MLflow Python 클라이언트를 설치하여 Databricks Runtime 11.3 LTS 이상의 Unity Catalog 모델을 사용할 수도 있습니다.
%pip install --upgrade "mlflow-skinny[databricks]"
dbutils.library.restartPython()
Unity Catalog 모델에 액세스하도록 MLflow 클라이언트 구성
작업 영역의 기본 catalog가 Unity Catalog에 있고, ( hive_metastore
가 아니라) Databricks Runtime 13.3 LTS 이상(Azure 중국 지역에서는 Databricks Runtime 15.0 이상)을 사용하여 클러스터를 실행하는 경우, 모델이 자동으로 생성되어 기본 catalog에서 로드됩니다. 이 단계를 수행할 필요가 없습니다.
다른 작업 영역의 경우 MLflow Python 클라이언트는 Databricks 작업 영역 모델 레지스트리에 모델을 생성합니다. Unity Catalog모델로 업그레이드하려면 Notebook에서 다음 코드를 사용하여 MLflow 클라이언트를 구성합니다.
import mlflow
mlflow.set_registry_uri("databricks-uc")
소수의 where 워크스페이스에 대해 2024년 1월 이전에 Unity Catalog에서 기본 catalog이 catalog로 구성되었고 워크스페이스 모델 레지스트리가 사용되었다면, 위에 표시된 명령을 사용하여 기본 catalog를 Unity Catalog로 수동으로 set해야 합니다.
Unity Catalog호환되는 모델 학습 및 등록
권한 필요: 새 등록된 모델을 만들려면 포함하는 schema에 대한 CREATE_MODEL
및 USE SCHEMA
권한과 포함하는 catalog에 대한 USE CATALOG
권한이 필요합니다. 등록된 모델에서 새 모델 버전을 만들려면 등록된 모델의 소유자여야 하며 모델을 포함하는 schema 및 catalog 대한 USE SCHEMA
및 USE CATALOG
권한이 있어야 합니다.
UC의 ML 모델 버전에는 모델 서명이 있어야 합니다. 모델 학습 워크로드에서 서명으로 MLflow 모델을 아직 로깅하지 않은 경우 다음 중 하나를 수행할 수 있습니다.
- 많은 인기 있는 ML 프레임워크에 대한 서명이 있는 모델을 자동으로 기록하는 Databricks 자동 로깅을 사용합니다. MLflow 문서에서 지원되는 프레임워크를 참조하세요.
- MLflow 2.5.0 이상에서는
mlflow.<flavor>.log_model
호출에서 입력 예제를 지정하면 모델 서명이 자동으로 추론됩니다. 자세한 내용은 MLflow 설명서를 참조하세요.
그런 다음 모델의 3단계 이름을 <catalog>.<schema>.<model>
형식으로 MLflow API에 전달합니다.
이 섹션의 예제에서는 prod
catalog아래의 ml_team
schema 모델을 만들고 액세스합니다.
이 섹션의 모델 학습 예제는 새 모델 버전을 만들고 이를 prod
catalog에 등록합니다.
prod
catalog 사용하는 것이 반드시 모델 버전이 프로덕션 트래픽을 제공한다는 것을 의미하지는 않습니다. 모델 버전을 둘러싸는 catalog, schema및 등록된 모델은 환경(prod
) 및 관련 관리 규칙(예: 관리자만 prod
catalog에서 삭제할 수 있도록 권한을 set 설정할 수 있음)을 반영하지만 배포 상태는 반영하지 않습니다. 배포 상태를 관리하려면 모델 별칭을 사용합니다.
자동 로깅 기능을 사용하여 Unity Catalog에 모델을 등록하기
모델을 등록하려면 MLflow 클라이언트 API register_model()
메서드를 사용합니다.
mlflow.register_model을 참조하세요.
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
# Train a sklearn model on the iris dataset
X, y = datasets.load_iris(return_X_y=True, as_frame=True)
clf = RandomForestClassifier(max_depth=7)
clf.fit(X, y)
# Note that the UC model name follows the pattern
# <catalog_name>.<schema_name>.<model_name>, corresponding to
# the catalog, schema, and registered model name
# in Unity Catalog under which to create the version
# The registered model will be created if it doesn't already exist
autolog_run = mlflow.last_active_run()
model_uri = "runs:/{}/model".format(autolog_run.info.run_id)
mlflow.register_model(model_uri, "prod.ml_team.iris_model")
API를 사용하여 모델 등록
mlflow.register_model(
"runs:/<run_uuid>/model", "prod.ml_team.iris_model"
)
유니티 Catalog에 자동으로 유추된 서명과 함께 모델을 등록하십시오.
자동으로 유추된 서명에 대한 지원은 MLflow 버전 2.5.0 이상에서 사용할 수 있으며 Databricks Runtime 11.3 LTS ML 이상에서 지원됩니다. 자동으로 유추된 서명을 사용하려면 다음 코드를 사용하여 Notebook에 최신 MLflow Python 클라이언트를 설치합니다.
%pip install --upgrade "mlflow-skinny[databricks]"
dbutils.library.restartPython()
다음 코드는 자동으로 유추된 서명의 예를 보여줍니다.
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
with mlflow.start_run():
# Train a sklearn model on the iris dataset
X, y = datasets.load_iris(return_X_y=True, as_frame=True)
clf = RandomForestClassifier(max_depth=7)
clf.fit(X, y)
# Take the first row of the training dataset as the model input example.
input_example = X.iloc[[0]]
# Log the model and register it as a new version in UC.
mlflow.sklearn.log_model(
sk_model=clf,
artifact_path="model",
# The signature is automatically inferred from the input example and its predicted output.
input_example=input_example,
registered_model_name="prod.ml_team.iris_model",
)
UI를 사용하여 모델 등록
다음 단계를 수행합니다.
실험 실행 페이지에서 UI의 오른쪽 위 모서리에 있는 모델 등록을 클릭합니다.
대화 상자에서 selectUnity와 Catalog, 그리고 드롭다운 list에서 대상 모델 select을 선택하십시오.
등록을 클릭합니다.
모델 등록에는 시간이 걸릴 수 있습니다. 진행률을 모니터링하려면 주기적으로 Unity Catalog의 대상 모델에 이동하세요 그리고 refresh.
별칭을 사용하여 모델 배포
모델 별칭을 사용하면 등록된 모델의 특정 버전에 변경 가능한 명명된 참조를 할당할 수 있습니다. 별칭을 사용하여 모델 버전의 배포 상태를 나타낼 수 있습니다. 예를 들어 현재 프로덕션 중인 모델 버전에 "챔피언" 별칭을 할당하고 프로덕션 모델을 사용하는 워크로드에서 이 별칭을 대상으로 지정할 수 있습니다. 그런 다음, "챔피언" 별칭을 다른 모델 버전에 다시 할당하여 프로덕션 모델을 update 수 있습니다.
모델에서 별칭을 삭제하고, Set을 참조하기
권한이 필요한: 등록된 모델의 소유자와 모델을 포함하는 schema 및 catalog 대한 USE SCHEMA
및 USE CATALOG
권한입니다.
Catalog 탐색기를 사용하여 Unity Catalog 모델에 대한 별칭 set, update및 remove를 생성할 수 있습니다. 모델 세부 정보 페이지의 등록된 모델에서 별칭을 관리하고 모델 버전 세부 정보 페이지에서 특정 모델 버전에 대한 별칭을 구성할 수 있습니다.
MLflow 클라이언트 API를 사용하여 별칭을 생성(set), 변경(update), 및 삭제하려면 아래 예제를 참조하세요.
from mlflow import MlflowClient
client = MlflowClient()
# create "Champion" alias for version 1 of model "prod.ml_team.iris_model"
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 1)
# reassign the "Champion" alias to version 2
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 2)
# get a model version by alias
client.get_model_version_by_alias("prod.ml_team.iris_model", "Champion")
# delete the alias
client.delete_registered_model_alias("prod.ml_team.iris_model", "Champion")
별칭 클라이언트 API에 대한 자세한 내용은 MLflow API 설명서를 참조하세요.
유추 워크로드에 대한 별칭별 모델 버전 로드
권한 요구 사항: 등록된 모델에 대한 EXECUTE
권한, 그리고 모델을 포함하는 schema 및 catalog에 대한 USE SCHEMA
및 USE CATALOG
권한.
일괄 처리 유추 워크로드는 별칭으로 모델 버전을 참조할 수 있습니다. 아래 코드 조각은 일괄 처리 유추를 위해 "챔피언" 모델 버전을 로드하고 적용합니다. "챔피언" 버전이 새 모델 버전을 참조하도록 업데이트된 경우 일괄 처리 유추 워크로드는 다음 실행 시 자동으로 이를 선택합니다. 이렇게 하면 일괄 처리 유추 워크로드에서 모델 배포를 분리할 수 있습니다.
import mlflow.pyfunc
model_version_uri = "models:/prod.ml_team.iris_model@Champion"
champion_version = mlflow.pyfunc.load_model(model_version_uri)
champion_version.predict(test_x)
엔드포인트를 제공하는 모델은 별칭으로 모델 버전을 참조할 수도 있습니다. REST API제공하는
import mlflow
import requests
client = mlflow.tracking.MlflowClient()
champion_version = client.get_model_version_by_alias("prod.ml_team.iris_model", "Champion")
# Invoke the model serving REST API to update endpoint to serve the current "Champion" version
model_name = champion_version.name
model_version = champion_version.version
requests.request(...)
유추 워크로드에 대한 버전 번호별 모델 버전 로드
버전 번호별로 모델 버전을 로드할 수도 있습니다.
import mlflow.pyfunc
# Load version 1 of the model "prod.ml_team.iris_model"
model_version_uri = "models:/prod.ml_team.iris_model/1"
first_version = mlflow.pyfunc.load_model(model_version_uri)
first_version.predict(test_x)
작업 영역에서 모델 공유
동일한 지역의 사용자와 모델 공유
적절한 권한이 있는 한 모델을 포함하는 메타스토어에 연결된 모든 작업 영역에서 Unity Catalog 모델에 액세스할 수 있습니다. 예를 들어 개발 작업 영역의 prod
catalog 모델에 액세스하여 새로 개발된 모델을 프로덕션 기준과 쉽게 비교할 수 있습니다.
등록된 모델에 대해 다른 사용자와 공동 작업하고(쓰기 권한을 공유하려면), 자신과 공동 작업할 사용자가 포함된 그룹에 모델의 소유권을 grant 해야 합니다. 또한 협력자는 모델을 포함하는 catalog 및 schema 대한 USE CATALOG
및 USE SCHEMA
권한이 있어야 합니다. 자세한 내용은 Unity Catalog 권한 및 보안 개체 참조하세요.
다른 지역 또는 계정의 사용자와 모델 공유
다른 지역 또는 계정의 사용자와 모델을 공유하려면 Delta Sharing Databricks-to-Databricks 공유 흐름을 사용합니다.
Unity에서 모델의 데이터 계보 추적 Catalog
참고 항목
Unity Catalog 모델 계통에 대한 table 지원은 MLflow 2.11.0 이상에서 제공됩니다.
Unity Catalog에서 table 모델을 학습할 때, 이를 학습 및 평가한 상류 데이터 세트와의 계보를 추적할 수 있습니다. 이렇게 하려면 mlflow.log_input을 사용합니다. 이렇게 하면 모델을 생성한 MLflow 실행으로 입력 table 정보가 저장됩니다. 또한 기능 저장소 API를 사용하여 기록된 모델에 대해 데이터 계보가 자동으로 캡처됩니다. 기능 거버넌스 및 계보를 참조하세요.
Unity
다음은 예를 보여 주는 코드입니다.
import mlflow
import pandas as pd
import pyspark.pandas as ps
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestRegressor
# Write a table to Unity Catalog
iris = load_iris()
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_df.rename(
columns = {
'sepal length (cm)':'sepal_length',
'sepal width (cm)':'sepal_width',
'petal length (cm)':'petal_length',
'petal width (cm)':'petal_width'},
inplace = True
)
iris_df['species'] = iris.target
ps.from_pandas(iris_df).to_table("prod.ml_team.iris", mode="overwrite")
# Load a Unity Catalog table, train a model, and log the input table
dataset = mlflow.data.load_delta(table_name="prod.ml_team.iris", version="0")
pd_df = dataset.df.toPandas()
X = pd_df.drop("species", axis=1)
y = pd_df["species"]
with mlflow.start_run():
clf = RandomForestRegressor(n_estimators=100)
clf.fit(X, y)
mlflow.log_input(dataset, "training")
# Take the first row of the training dataset as the model input example.
input_example = X.iloc[[0]]
# Log the model and register it as a new version in UC.
mlflow.sklearn.log_model(
sk_model=clf,
artifact_path="model",
# The signature is automatically inferred from the input example and its predicted output.
input_example=input_example,
registered_model_name="prod.ml_team.iris_classifier",
)
모델에 대한 액세스 제어
Unity Catalog에 등록된 모델은 FUNCTION
보안 가능한 개체의 하위 유형입니다.
grant Unity Catalog에 등록된 모델에 액세스하려면 GRANT ON FUNCTION
를 사용합니다. 자세한 내용은 Unity Catalog 권한 및 보안 개체참조하세요.
catalogs 및 스키마에서 모델을 구성하는 모범 사례는 데이터구성을 참조하세요.
Grants REST API를 사용하여 프로그래밍 방식으로 모델 권한을 구성할 수 있습니다. 모델 권한을 구성할 때 REST API 요청에서 setsecurable_type
부터 "FUNCTION"
까지. 예를 들어, PATCH /api/2.1/unity-catalog/permissions/function/{full_name}
에서 update까지 등록된 모델 권한을 사용하십시오.
UI에서 모델 보기
권한 필요: UI에서 등록된 모델 및 해당 모델 버전을 보려면 등록된 모델에 대한 EXECUTE
권한과 모델을 포함하는 schema 및 catalog 대한 USE SCHEMA
및 USE CATALOG
권한이 필요합니다.
Catalog 탐색기사용하여 Unity Catalog 등록된 모델 및 모델 버전을 보고 관리할 수 있습니다.
모델 이름 바꾸기
권한이 필요한: 등록된 모델의 소유자, 등록된 모델이 포함된 schema에 대한 CREATE_MODEL
권한, 그리고 모델을 포함하는 schema 및 catalog에 대한 USE SCHEMA
및 USE CATALOG
권한
등록된 모델의 이름을 바꾸려면 MLflow 클라이언트 API rename_registered_model()
메서드를 사용합니다.
client=MlflowClient()
client.rename_registered_model("<full-model-name>", "<new-model-name>")
모델 버전 복사
Unity Catalog모델 버전을 한 모델에서 다른 모델로 복사할 수 있습니다.
UI를 사용하여 모델 버전 복사
다음 단계를 수행합니다.
모델 버전 페이지에서 UI의 오른쪽 상단에 있는 이 버전 복사를 클릭합니다.
드롭다운 list 대상 모델을 Select복사클릭합니다.
모델을 복사하는 데 시간이 걸릴 수 있습니다. 진행률을 모니터링하려면 Unity Catalog에서 대상 모델로 주기적으로 이동하십시오 refresh.
API를 사용하여 모델 버전 복사
모델 버전을 복사하려면 MLflow의 copy_model_version() Python API를 사용합니다.
client = MlflowClient()
client.copy_model_version(
"models:/<source-model-name>/<source-model-version>",
"<destination-model-name>",
)
모델 및 모델 버전 삭제
권한이 필요한: 등록된 모델의 소유자와 모델을 포함하는 schema 및 catalog에 대한 USE SCHEMA
및 USE CATALOG
권한입니다.
Catalog Explorer UI 또는 API를 사용하여 등록된 모델 내에서 등록된 모델 또는 모델 버전을 삭제할 수 있습니다.
Warning
이 작업은 실행 취소할 수 없습니다. 모델을 삭제하면 Unity Catalog 저장된 모든 모델 아티팩트와 등록된 모델과 연결된 모든 메타데이터가 삭제됩니다.
UI를 사용하여 모델 버전 또는 모델 삭제
Unity Catalog모델 또는 모델 버전을 삭제하려면 다음 단계를 수행합니다.
모델 페이지 또는 모델 버전 페이지에서 오른쪽 상단 모서리에 있는 kebab 메뉴 를 클릭합니다.
모델 페이지에서:
모델 버전 페이지에서 다음을 수행합니다.
Select 삭제.
확인 대화 상자가 나타납니다. 삭제를 클릭하여 확인합니다.
API를 사용하여 모델 버전 또는 모델 삭제
모델 버전을 삭제하려면 MLflow 클라이언트 API delete_model_version()
메서드를 사용합니다.
# Delete versions 1,2, and 3 of the model
client = MlflowClient()
versions=[1, 2, 3]
for version in versions:
client.delete_model_version(name="<model-name>", version=version)
모델을 삭제하려면 MLflow 클라이언트 API delete_registered_model()
메서드를 사용합니다.
client = MlflowClient()
client.delete_registered_model(name="<model-name>")
모델에서 태그 사용
태그는 등록된 모델 및 모델 버전과 연결하는 키-값 쌍으로, 함수 또는 상태에 따라 레이블을 지정하고 분류할 수 있습니다. 예를 들어, 질문 답변 작업을 위해 등록된 모델에 키 "task"
및 "question-answering"
값(UI에는 task:question-answering
로 표시됨)이 있는 태그를 적용할 수 있습니다. 모델 버전 수준에서 배포 전 유효성 검사 중인 버전은 validation_status:pending
로, 배포가 승인된 버전은 validation_status:approved
로 태그를 지정할 수 있습니다.
필요한 권한: 등록된 모델의 소유자이거나, 모델을 포함하는 schema 및 catalog에 대한 USE SCHEMA
및 USE CATALOG
권한뿐만 아니라 등록된 모델에 대한 APPLY_TAG
권한이 있어야 합니다.
UI를 사용하여 태그를
set을 적용하고 태그를 삭제하려면 MLflow 클라이언트 API를 사용하여 아래 예제를 참조하세요.
from mlflow import MlflowClient
client = MlflowClient()
# Set registered model tag
client.set_registered_model_tag("prod.ml_team.iris_model", "task", "classification")
# Delete registered model tag
client.delete_registered_model_tag("prod.ml_team.iris_model", "task")
# Set model version tag
client.set_model_version_tag("prod.ml_team.iris_model", "1", "validation_status", "approved")
# Delete model version tag
client.delete_model_version_tag("prod.ml_team.iris_model", "1", "validation_status")
등록된 모델 및 모델 버전 태그는 모두 플랫폼 전반의 제약 조건을 충족해야 합니다.
태그 클라이언트 API에 대한 자세한 내용은 MLflow API 설명서를 참조 하세요.
모델 또는 모델 버전에 설명(주석) 추가
필요 권한: 등록된 모델의 소유자와 모델이 들어 있는 schema 및 catalog에 대한 USE SCHEMA
및 USE CATALOG
특권.
Unity Catalog모든 모델 또는 모델 버전에 대한 텍스트 설명을 포함할 수 있습니다. 예를 들어 문제에 대한 개요나 사용된 방법론 및 알고리즘에 대한 정보를 제공할 수 있습니다.
모델의 경우 AI 생성 주석을 사용하는 옵션도 있습니다. AI 생성 주석을 Unity Catalog 개체에 추가참조하세요.
UI를 사용하여 모델에 설명 추가
모델에 대한 설명을 추가하려면 AI 생성 주석을 사용하거나 고유한 의견을 입력할 수 있습니다. 필요에 따라 AI 생성 주석을 편집할 수 있습니다.
- 자동으로 생성된 메모를 추가하려면 AI generate 단추를 클릭합니다.
- 고유한 메모를 추가하려면 추가를 클릭합니다. 대화 상자에 메모를 입력하고 저장을 클릭합니다.
UI를 사용하여 모델 버전에 설명 추가하기
Unity Catalog모델 버전에 설명을 추가하려면 다음 단계를 수행합니다.
모델 버전 페이지에서 설명 아래의 연필 아이콘을 클릭합니다.
대화 상자에 메모를 입력하고 저장을 클릭합니다.
API를 사용하여 모델 또는 모델 버전에 설명 추가하기
등록된 모델 설명을 update MLflow 클라이언트 API update_registered_model()
메서드를 사용합니다.
client = MlflowClient()
client.update_registered_model(
name="<model-name>",
description="<description>"
)
모델 버전 설명을 update MLflow 클라이언트 API update_model_version()
메서드를 사용합니다.
client = MlflowClient()
client.update_model_version(
name="<model-name>",
version=<model-version>,
description="<description>"
)
List 및 검색 모델
Unity Catalog에서 등록된 모델의 getlist을 위해 MLflow의 search_registered_models() Python API를 사용합니다.
client=MlflowClient()
client.search_registered_models()
특정 모델 이름과 해당 모델의 버전 정보(get)를 검색하려면 search_model_versions()
을 사용하세요.
from pprint import pprint
client=MlflowClient()
[pprint(mv) for mv in client.search_model_versions("name='<model-name>'")]
참고 항목
Unity Catalog모델에 대해 모든 검색 API 필드 및 연산자가 지원되는 것은 아닙니다. 자세한 내용은 제한 사항을 참조하세요.
모델 파일 다운로드(고급 사용 사례)
대부분의 경우 모델을 로드하려면 mlflow.pyfunc.load_model
또는 mlflow.<flavor>.load_model
(예: HuggingFace 모델의 경우 mlflow.transformers.load_model
)과 같은 MLflow API를 사용해야 합니다.
경우에 따라 모델 동작 또는 모델 로드 문제를 디버그하기 위해 모델 파일을 다운로드해야 할 수 있습니다. 다음과 같이 모델 파일을 mlflow.artifacts.download_artifacts
로 다운로드할 수 있습니다.
import mlflow
mlflow.set_registry_uri("databricks-uc")
model_uri = f"models:/{model_name}/{version}" # reference model by version or alias
destination_path = "/local_disk0/model"
mlflow.artifacts.download_artifacts(artifact_uri=model_uri, dst_path=destination_path)
환경 전반에서 모델 승격
Databricks는 ML 파이프라인을 코드로 배포하는 것이 좋습니다. 이렇게 하면 프로덕션 환경에서 자동화된 학습 워크플로를 통해 모든 프로덕션 모델을 생성할 수 있으므로 환경 전반에서 모델을 승격할 필요가 없습니다.
그러나 경우에 따라 환경 간에 모델을 다시 학습하는 데 비용이 너무 많이 들 수 있습니다. 대신 Unity Catalog 등록된 모델 간에 모델 버전을 복사하여 환경 간에 승격할 수 있습니다.
아래 예제 코드를 실행하려면 다음 권한이 필요합니다.
-
USE CATALOG
에 있는staging
와prod
catalogs. -
USE SCHEMA
및staging.ml_team
스키마에서prod.ml_team
. -
EXECUTE
의staging.ml_team.fraud_detection
.
또한 prod.ml_team.fraud_detection
모델에 등록된 소유자여야 합니다.
다음 코드 스니펫은 MLflow 버전 2.8.0 이상에서 사용할 수 있는 copy_model_version
MLflow 클라이언트 API를 사용합니다.
import mlflow
mlflow.set_registry_uri("databricks-uc")
client = mlflow.tracking.MlflowClient()
src_model_name = "staging.ml_team.fraud_detection"
src_model_version = "1"
src_model_uri = f"models:/{src_model_name}/{src_model_version}"
dst_model_name = "prod.ml_team.fraud_detection"
copied_model_version = client.copy_model_version(src_model_uri, dst_model_name)
모델 버전이 프로덕션 환경에 있으면 필요한 배포 전 유효성 검사를 수행할 수 있습니다. 그런 다음 별칭을 사용하여 배포용 모델 버전을 표시할 수 있습니다.
client = mlflow.tracking.MlflowClient()
client.set_registered_model_alias(name="prod.ml_team.fraud_detection", alias="Champion", version=copied_model_version.version)
위의 예에서는 staging.ml_team.fraud_detection
등록 모델에서 읽고 prod.ml_team.fraud_detection
등록 모델에 쓸 수 있는 사용자만 스테이징 모델을 프로덕션 환경으로 승격할 수 있습니다. 동일한 사용자가 별칭을 사용하여 프로덕션 환경 내에 배포되는 모델 버전을 관리할 수도 있습니다. 모델 승격 및 배포를 제어하기 위해 다른 규칙이나 정책을 구성할 필요가 없습니다.
이 흐름을 사용자 지정하여 설정과 일치하는 여러 환경(예: dev
, qa
및 prod
)에서 모델 버전을 승격할 수 있습니다. 액세스 제어는 각 환경에 구성된 대로 적용됩니다.
예제 노트북
이 예제 Notebook에서는 모델 및 모델 버전 등록, 설명 추가, 모델 로드 및 배포, 모델 별칭 사용, 모델 및 모델 버전 삭제 등 Unity Catalog API의 모델을 사용하여 Unity Catalog모델을 관리하는 방법을 보여 줍니다.
Unity Catalog 예제 노트북의 모델
Unity로 워크플로와 모델을 마이그레이션하기 Catalog
Databricks는 향상된 거버넌스, 작업 영역 및 환경 간 간편한 공유, 보다 유연한 MLOps 워크플로를 위해 Unity Catalog 모델을 사용하는 것이 좋습니다. 이 table 작업 영역 모델 레지스트리 및 Unity Catalog기능을 비교합니다.
기능 | 작업 영역 모델 레지스트리(레거시) | Unity Catalog 모델(권장) |
---|---|---|
명명된 별칭별 모델 버전 참조 | 모델 레지스트리 단계: 모델 버전을 4개의 고정 단계 중 하나로 이동하여 해당 스테이지에서 참조합니다. 스테이지의 이름을 바꾸거나 추가할 수 없습니다. | 모델 레지스트리 별칭: 등록된 각 모델의 모델 버전에 대해 최대 10개의 사용자 지정 및 재할당 가능한 명명된 참조를 만듭니다. |
모델에 대한 액세스 제어 환경 만들기 | 모델 레지스트리 단계: 등록된 한 모델 내의 단계를 사용하여 4개의 고정 단계 중 두 단계(Staging 및 Production )에 대한 액세스 제어를 사용하여 해당 모델 버전의 환경을 나타냅니다. |
등록된 모델: MLOps 워크플로의 각 환경에 대해 세 가지 수준의 네임스페이스 및 Unity Catalog 권한을 활용하여 거버넌스를 표현하는 등록된 모델을 만듭니다. |
환경 전반에서 모델 승격(모델 배포) |
transition_model_version_stage() MLflow 클라이언트 API를 사용하여 모델 버전을 다른 단계로 이동하면 이전 단계를 참조하는 워크플로가 손상될 수 있습니다. |
copy_model_version() MLflow 클라이언트 API를 사용하여 등록된 모델에서 다른 모델로 모델 버전을 복사합니다. |
여러 작업 공간에서 모델 액세스 및 공유 | 작업 공간 간에 모델을 수동으로 내보내고 가져오거나, 개인 액세스 토큰과 작업 공간 비밀 범위를 사용하여 원격 모델 레지스트리에 connections을(를) 구성합니다. | 동일한 계정의 작업 영역에서 모델에 대한 기본 액세스 권한입니다. 구성이 필요 없습니다. |
권한 구성 | 작업 공간 수준에서 Set 권한. | 계정 수준에서의 Set 권한은 작업 영역 전반에 걸쳐 일관된 거버넌스를 적용합니다. |
Databricks markplace에서 모델 액세스 | 사용할 수 없음 | Databricks 마켓플레이스에서 모델을 Unity Catalog 메타스토어로 로드하고 작업 영역 전반에서 액세스합니다. |
아래에 연결된 문서에서는 워크플로(모델 학습 및 일괄 처리 유추 작업)와 모델을 작업 영역 모델 레지스트리에서 Unity Catalog마이그레이션하는 방법을 설명합니다.
제한 사항
- Unity Catalog모델에는 단계가 지원되지 않습니다. Databricks는 Unity Catalog의 3단계 네임스페이스를 사용하여 모델이 속한 환경을 표현하고, 배포를 위해 모델을 승격시키기 위해 별칭을 사용하는 것을 권장합니다. 자세한 내용은 환경 전반에서 모델 승격을 참조하세요.
- Webhook는 Unity Catalog모델에 대해 지원되지 않습니다. 업그레이드 가이드에서 제안된 대안을 참조하세요.
- 일부 검색 API 필드 및 연산자는 Unity Catalog모델에 대해 지원되지 않습니다. 지원되는 필터를 사용하여 검색 API를 호출하고 결과를 검색하여 완화할 수 있습니다. 다음은 몇 가지 예제입니다.
-
order_by
매개 변수는 search_model_versions 또는 search_registered_models 클라이언트 API에서 지원되지 않습니다. - 태그 기반 필터(
tags.mykey = 'myvalue'
)는search_model_versions
또는search_registered_models
에 지원되지 않습니다. - 정확한 등호 이외의 연산자(예:
LIKE
,ILIKE
,!=
)는search_model_versions
또는search_registered_models
에 지원되지 않습니다. - 이름으로 등록된 모델 검색(예:
MlflowClient().search_registered_models(filter_string="name='main.default.mymodel'")
지원되지 않음). 이름으로 등록된 특정 모델을 가져오려면 get_registered_model 사용합니다.
-
- 등록된 모델 및 모델 버전에 대한 이메일 알림 및 주석 토론 스레드는 Unity Catalog지원되지 않습니다.
- Unity Catalog모델에서는 활동 로그가 지원되지 않습니다. Unity Catalog모델에서 작업을 추적하려면 감사 로그사용합니다.
-
search_registered_models
는 Delta 공유를 통해 공유된 모델의 부실 결과를 반환할 수 있습니다. 최신 결과를 확인하려면 Databricks CLI 또는 SDK 사용하여 schema모델을 list.