다음을 통해 공유


Unity 카탈로그에서 모델 수명 주기 관리

Important

  • 이 문서에서는 모델 관리 및 배포를 위해 Databricks가 권장하는 Unity 카탈로그의 모델을 설명합니다. Unity 카탈로그에 작업 영역을 사용하도록 설정하지 않은 경우 이 페이지의 기능을 사용할 수 없습니다. 대신 작업 영역 모델 레지스트리를 사용하여 모델 수명 주기 관리(레거시)를 참조하세요. 작업 영역 모델 레지스트리에서 Unity 카탈로그로 업그레이드하는 방법에 대한 지침은 워크플로 및 모델을 Unity 카탈로그로 마이그레이션을 참조하세요.
  • Unity 카탈로그의 모델은 Azure Government 지역에서 사용할 수 없습니다.

이 문서에서는 기계 학습 워크플로의 일부로 Unity 카탈로그의 모델을 사용하여 ML 모델의 전체 수명 주기를 관리하는 방법에 대해 설명합니다. Databricks는 Unity 카탈로그에서 호스팅 버전의 MLflow 모델 레지스트리를 제공합니다. Unity 카탈로그의 모델은 작업 영역에서 중앙 집중식 액세스 제어, 감사, 계보 및 모델 검색을 포함하여 Unity 카탈로그의 이점을 ML 모델로 확장합니다. Unity 카탈로그의 모델은 오픈 소스 MLflow Python 클라이언트와 호환됩니다.

모델 레지스트리 개념에 대한 개요는 MLflow를 사용한 ML 수명 주기 관리를 참조하세요.

요구 사항

  1. 작업 영역에서 Unity 카탈로그가 활성화되어 있어야 합니다. Unity 카탈로그 메타스토어를 생성하고, 워크스페이스에서 활성화하고, 카탈로그를 생성하려면 Unity 카탈로그 사용 시작하기를 참조하세요. Unity 카탈로그가 활성화되지 않은 경우 작업 공간 모델 레지스트리를 사용합니다.

  2. Unity 카탈로그에 대한 액세스 권한이 있는 컴퓨팅 리소스를 사용해야 합니다. ML 워크로드의 경우 컴퓨팅에 대한 액세스 모드는 단일 사용자여야 합니다. 자세한 내용은 액세스 모델을 참조하세요.

  3. 등록된 새 모델을 만들려면 다음 권한이 필요합니다.

    • 스키마 및 해당 스키마를 둘러싼 카탈로그에 대한 USE SCHEMAUSE CATALOG 권한이 있습니다.
    • 스키마에 대한 CREATE_MODEL 권한. 이 권한을 부여하려면 카탈로그 탐색기 UI 또는 다음 SQL GRANT 명령을 사용합니다:
    GRANT CREATE_MODEL ON SCHEMA <schema-name> TO <principal>
    

참고 항목

작업 영역은 권한 상속을 지원하는 Unity 카탈로그 메타스토어에 연결되어야 합니다. 이는 2022년 8월 25일 이후에 생성된 모든 메타스토어에 해당합니다. 이전 메타스토어에서 실행 중인 경우 문서에 따라를 통해 업그레이드하세요.

Unity 카탈로그용 MLflow 클라이언트 설치 및 구성

이 섹션에는 Unity 카탈로그용 MLflow 클라이언트 설치 및 구성에 대한 지침이 포함되어 있습니다.

MLflow Python 클라이언트 설치하기

다음 코드를 사용하여 Notebook에 최신 버전의 MLflow Python 클라이언트를 설치하여 Databricks Runtime 11.3 LTS 이상의 Unity 카탈로그에서 모델을 사용할 수도 있습니다.

%pip install --upgrade "mlflow-skinny[databricks]"
dbutils.library.restartPython()

Unity 카탈로그의 모델에 액세스하도록 MLflow 클라이언트 구성하기

워크스페이스의 기본 카탈로그가 (hive_metastore가 아닌) Unity 카탈로그에 있고 Databricks Runtime 13.3 LTS 이상(Azure 중국 지역의 경우 Databricks Runtime 15.0 이상)을 사용하여 클러스터를 실행하는 경우 기본 카탈로그에서 모델이 자동으로 생성되고 로드됩니다. 이 단계를 수행할 필요가 없습니다.

다른 작업 영역의 경우 MLflow Python 클라이언트는 Databricks 작업 영역 모델 레지스트리에 모델을 생성합니다. Unity 카탈로그의 모델로 업그레이드하려면 Notebook에서 다음 코드를 사용하여 MLflow 클라이언트를 구성합니다.

import mlflow
mlflow.set_registry_uri("databricks-uc")

2024년 1월 이전에 Unity 카탈로그의 카탈로그로 기본 카탈로그를 구성하고 2024년 1월 이전에 작업 영역 모델 레지스트리를 사용한 적은 수의 작업 영역의 경우 위에 표시된 명령을 사용하여 기본 카탈로그를 Unity 카탈로그로 수동으로 설정해야 합니다.

Unity 카탈로그 호환 모델 학습 및 등록

필요 권한: 새 등록 모델을 만들려면 묶는 스키마에 대한 CREATE_MODELUSE SCHEMA 권한과 묶는 카탈로그에 대한 USE CATALOG 권한이 필요합니다. 등록된 모델 아래에 새 모델 버전을 만들려면 등록된 모델의 소유자이고 해당 모델이 포함된 스키마 및 카탈로그에 대한 USE SCHEMAUSE CATALOG 권한이 있어야 합니다.

UC의 ML 모델 버전에는 모델 서명이 있어야 합니다. 모델 학습 워크로드에서 서명으로 MLflow 모델을 아직 로깅하지 않은 경우 다음 중 하나를 수행할 수 있습니다.

  • 많은 인기 있는 ML 프레임워크에 대한 서명이 있는 모델을 자동으로 기록하는 Databricks 자동 로깅을 사용합니다. MLflow 문서에서 지원되는 프레임워크를 참조하세요.
  • MLflow 2.5.0 이상에서는 mlflow.<flavor>.log_model 호출에서 입력 예제를 지정하면 모델 서명이 자동으로 추론됩니다. 자세한 내용은 MLflow 설명서를 참조하세요.

그런 다음 모델의 3단계 이름을 <catalog>.<schema>.<model> 형식으로 MLflow API에 전달합니다.

이 섹션의 예제에서는 prod 카탈로그 아래의 ml_team 스키마에서 모델을 생성하고 액세스합니다.

이 섹션의 모델 트레이닝 예제는 새 모델 버전을 생성하여 prod 카탈로그에 등록합니다. prod 카탈로그를 사용한다고 해서 반드시 모델 버전이 프로덕션 트래픽에 서비스를 제공한다는 의미는 아닙니다. 모델 버전을 포함하는 카탈로그, 스키마 및 등록된 모델은 해당 환경(prod) 및 관련 거버넌스 규칙(예: 관리자만 prod 카탈로그에서 삭제할 수 있도록 권한을 설정할 수 있음)을 반영하지만 배포 상태는 반영하지 않습니다. 배포 상태를 관리하려면 모델 별칭을 사용합니다.

자동 로깅을 사용하여 Unity 카탈로그에 모델 등록

모델을 등록하려면 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"
)

자동으로 유추된 서명을 사용하여 Unity 카탈로그에 모델 등록

자동으로 유추된 서명에 대한 지원은 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를 사용하여 모델 등록

다음 단계를 수행합니다.

  1. 실험 실행 페이지에서 UI의 오른쪽 위 모서리에 있는 모델 등록을 클릭합니다.

  2. 대화 상자에서 Unity 카탈로그를 선택하고 드롭다운 목록에서 대상 모델을 선택합니다.

    드롭다운 메뉴를 사용하여 모델 버전 등록 대화 상자

  3. 등록을 클릭합니다.

    단추를 사용하여 모델 버전 등록 대화 상자

모델 등록에는 시간이 걸릴 수 있습니다. 진행률을 모니터링하려면 Unity 카탈로그에서 대상 모델로 이동하여 주기적으로 새로 고칩니다.

별칭을 사용하여 모델 배포

모델 별칭을 사용하면 등록된 모델의 특정 버전에 변경 가능한 명명된 참조를 할당할 수 있습니다. 별칭을 사용하여 모델 버전의 배포 상태를 나타낼 수 있습니다. 예를 들어 현재 프로덕션 중인 모델 버전에 "챔피언" 별칭을 할당하고 프로덕션 모델을 사용하는 워크로드에서 이 별칭을 대상으로 지정할 수 있습니다. 그런 다음, "챔피언" 별칭을 다른 모델 버전으로 다시 할당하여 프로덕션 모델을 업데이트할 수 있습니다.

모델에서 별칭 설정 및 삭제

필요 권한: 등록된 모델의 소유자, 그리고 모델이 포함된 스키마 및 카탈로그에 대한 USE SCHEMAUSE CATALOG 권한이 있어야 합니다.

카탈로그 탐색기를 사용하여 Unity 카탈로그에서 모델의 별칭을 설정, 업데이트 및 제거할 수 있습니다. 모델 세부 정보 페이지의 등록된 모델에서 별칭을 관리하고 모델 버전 세부 정보 페이지에서 특정 모델 버전에 대한 별칭을 구성할 수 있습니다.

MLflow 클라이언트 API를 사용하여 별칭을 설정, 업데이트 및 삭제하려면 아래 예제를 참조하세요.

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 권한과 해당 모델이 포함된 스키마 및 카탈로그에 대한 USE SCHEMAUSE 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 카탈로그의 모델에 액세스할 수 있습니다. 예를 들어 개발 작업 영역의 prod 카탈로그에서 모델에 액세스하여 새로 개발된 모델을 프로덕션 기준과 쉽게 비교할 수 있습니다.

만든 등록된 모델에서 다른 사용자(쓰기 권한 공유)와 공동 작업하려면 자신과 공동 작업하려는 사용자가 포함된 그룹에 모델의 소유권을 부여해야 합니다. 공동 작업자는 모델이 포함된 카탈로그 및 스키마에 대한 USE CATALOGUSE SCHEMA 권한도 가지고 있어야 합니다. 자세한 내용은 Unity 카탈로그 권한 및 보안 개체를 참조하세요.

다른 지역 또는 계정의 사용자와 모델 공유

다른 지역 또는 계정의 사용자와 모델을 공유하려면 Delta Sharing Databricks-to-Databricks 공유 흐름을 사용합니다. 공유에 모델 추가(공급자용) 및 Databricks-to-Databricks 모델에서 액세스 권한을 얻기(받는 사람의 경우)를 참조합니다. 받는 사람은 공유에서 카탈로그를 만든 후 Unity 카탈로그의 다른 모델과 동일한 방식으로 해당 공유 카탈로그의 모델에 액세스합니다.

Unity 카탈로그에서 모델의 데이터 계보 추적

참고 항목

Unity 카탈로그의 모델 계보에 대한 테이블 지원은 MLflow 2.11.0 이상에서 사용할 수 있습니다.

Unity 카탈로그의 테이블에서 모델을 학습할 때 학습 및 평가된 업스트림 데이터 세트에 대한 모델의 계보를 추적할 수 있습니다. 이렇게 하려면 mlflow.log_input을 사용합니다. 이렇게 하면 모델을 생성한 MLflow 실행과 함께 입력 테이블 정보가 저장됩니다. 또한 기능 저장소 API를 사용하여 기록된 모델에 대해 데이터 계보가 자동으로 캡처됩니다. 기능 거버넌스 및 계보를 참조하세요.

모델을 Unity 카탈로그에 등록하면 리니지 정보가 자동으로 저장되며, 카탈로그 탐색기의 모델 버전 UI리니지 탭에서 확인할 수 있습니다.

다음은 예를 보여 주는 코드입니다.

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 카탈로그에서 등록된 모델은 FUNCTION 보안 가능 오브젝트의 하위 유형입니다. Unity 카탈로그에 등록된 모델에 액세스 권한을 부여하려면 GRANT ON FUNCTION를 사용합니다. 자세한 내용은 Unity 카탈로그 권한 및 보안 개체를 참조하세요. 카탈로그 및 스키마에서 모델을 구성하는 모범 사례는 데이터 구성을 참조하세요.

Grants REST API를 사용하여 프로그래밍 방식으로 모델 권한을 구성할 수 있습니다. 모델 권한을 구성할 때 REST API 요청에서 securable_type"FUNCTION"로 설정합니다. 예를 들어 PATCH /api/2.1/unity-catalog/permissions/function/{full_name}를 사용하여 등록된 모델 권한을 업데이트합니다.

UI에서 모델 보기

필요 권한: UI에서 등록된 모델 및 해당 모델 버전을 보려면 등록된 모델에 대한 EXECUTE 권한과 해당 모델이 포함된 스키마 및 카탈로그에 대한 USE SCHEMAUSE CATALOG 권한이 필요합니다.

카탈로그 탐색기를 사용하여 Unity 카탈로그에서 등록된 모델과 모델 버전을 확인하고 관리할 수 있습니다.

모델 이름 바꾸기

필요 권한: 등록된 모델의 소유자, 등록된 모델이 포함된 스키마에 대한 CREATE_MODEL 권한, 모델이 포함된 스키마 및 카탈로그에 대한 USE SCHEMAUSE CATALOG 권한이 있어야 합니다.

등록된 모델의 이름을 바꾸려면 MLflow 클라이언트 API rename_registered_model() 메서드를 사용합니다.

client=MlflowClient()
client.rename_registered_model("<full-model-name>", "<new-model-name>")

모델 버전 복사

Unity 카탈로그에서 모델 버전을 한 모델에서 다른 모델로 복사할 수 있습니다.

UI를 사용하여 모델 버전 복사

다음 단계를 수행합니다.

  1. 모델 버전 페이지에서 UI의 오른쪽 상단에 있는 이 버전 복사를 클릭합니다.

  2. 드롭다운 목록에서 대상 모델을 선택하고 복사를 클릭합니다.

    모델 버전 복사 대화 상자

모델을 복사하는 데 시간이 걸릴 수 있습니다. 진행률을 모니터링하려면 Unity 카탈로그에서 대상 모델로 이동하여 주기적으로 새로 고칩니다.

API를 사용하여 모델 버전 복사

모델 버전을 복사하려면 MLflow의 copy_model_version() Python API를 사용합니다.

client = MlflowClient()
client.copy_model_version(
  "models:/<source-model-name>/<source-model-version>",
  "<destination-model-name>",
)

모델 및 모델 버전 삭제

필요 권한: 등록된 모델의 소유자, 그리고 모델이 포함된 스키마 및 카탈로그에 대한 USE SCHEMAUSE CATALOG 권한이 있어야 합니다.

카탈로그 탐색기 UI 또는 API를 사용하여 등록된 모델 내에서 등록된 모델 또는 모델 버전을 삭제할 수 있습니다.

Warning

이 작업은 실행 취소할 수 없습니다. 모델을 삭제하면 Unity 카탈로그에 저장된 모든 모델 아티팩트와 등록된 모델과 관련된 모든 메타데이터가 삭제됩니다.

UI를 사용하여 모델 버전 또는 모델 삭제

Unity 카탈로그에서 모델 또는 모델 버전을 삭제하려면 다음 단계를 수행합니다.

  1. 모델 페이지 또는 모델 버전 페이지에서 오른쪽 상단 모서리에 있는 kebab 메뉴 케밥 메뉴를 클릭합니다.

    모델 페이지에서:

    삭제가 있는 모델 페이지 케밥 메뉴

    모델 버전 페이지에서 다음을 수행합니다.

    삭제가 있는 모델 버전 페이지 케밥 메뉴

  2. 삭제를 선택합니다.

  3. 확인 대화 상자가 나타납니다. 삭제를 클릭하여 확인합니다.

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로 태그를 지정할 수 있습니다.

필요 권한: 등록된 모델의 소유자이거나 등록된 모델에 대한 APPLY_TAG 권한과 모델이 포함된 스키마 및 카탈로그에 대한 USE SCHEMAUSE CATALOG 권한이 있어야 합니다.

UI를 사용하여 태그를 설정하고 삭제하는 방법은 카탈로그 탐색기를 사용하여 태그 추가 및 업데이트를 참조하세요.

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 설명서를 참조 하세요.

모델 또는 모델 버전에 설명(주석) 추가

필요 권한: 등록된 모델의 소유자, 그리고 모델이 포함된 스키마 및 카탈로그에 대한 USE SCHEMAUSE CATALOG 권한이 있어야 합니다.

Unity 카탈로그에서 모델 또는 모델 버전에 대한 텍스트 설명을 포함할 수 있습니다. 예를 들어 문제에 대한 개요나 사용된 방법론 및 알고리즘에 대한 정보를 제공할 수 있습니다.

모델의 경우 AI 생성 주석을 사용하는 옵션도 있습니다. Unity Catalog 개체에 AI 생성 주석 추가를 참조하세요.

UI를 사용하여 모델에 설명 추가

모델에 대한 설명을 추가하려면 AI 생성 주석을 사용하거나 고유한 의견을 입력할 수 있습니다. 필요에 따라 AI 생성 주석을 편집할 수 있습니다.

  • 자동으로 생성된 메모를 추가하려면 AI 생성 단추를 클릭합니다.
  • 고유한 메모를 추가하려면 추가를 클릭합니다. 대화 상자에 메모를 입력하고 저장을 클릭합니다.

uc 모델 설명 단추

UI를 사용하여 모델 버전에 설명 추가하기

Unity 카탈로그의 모델 버전에 설명을 추가하려면 다음 단계를 수행합니다.

  1. 모델 버전 페이지에서 설명 아래의 연필 아이콘을 클릭합니다.

    모델 버전에 메모를 추가하는 연필 아이콘

  2. 대화 상자에 메모를 입력하고 저장을 클릭합니다.

API를 사용하여 모델 또는 모델 버전에 설명 추가하기

모델 레지스트리 설명을 업데이트하려면 MLflow 클라이언트 API update_registered_model() 메서드를 사용합니다.

client = MlflowClient()
client.update_registered_model(
  name="<model-name>",
  description="<description>"
)

모델 버전 설명을 업데이트하려면 MLflow 클라이언트 API update_model_version() 메서드를 사용합니다.

client = MlflowClient()
client.update_model_version(
  name="<model-name>",
  version=<model-version>,
  description="<description>"
)

모델 나열 및 검색

Unity 카탈로그에서 등록된 모델 목록을 가져오려면 MLflow의 search_registered_models() Python API를 사용합니다.

client=MlflowClient()
client.search_registered_models()

특정 모델 이름을 검색하고 해당 모델의 버전에 대한 정보를 얻으려면 search_model_versions()을 사용합니다.

from pprint import pprint

client=MlflowClient()
[pprint(mv) for mv in client.search_model_versions("name='<model-name>'")]

참고 항목

Unity 카탈로그의 모델에 대해 모든 검색 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 카탈로그의 등록된 모델 간에 모델 버전을 복사하여 환경 간에 수준을 올리면 됩니다.

아래 예제 코드를 실행하려면 다음 권한이 필요합니다.

  • stagingprod 카탈로그의 USE CATALOG.
  • staging.ml_teamprod.ml_team 스키마에서 USE SCHEMA.
  • EXECUTEstaging.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, qaprod)에서 모델 버전을 승격할 수 있습니다. 액세스 제어는 각 환경에 구성된 대로 적용됩니다.

예시

이 예제에서는 Unity 카탈로그의 모델을 사용하여 기계 학습 애플리케이션을 빌드하는 방법을 설명합니다.

Unity 카탈로그 모델 예제

워크플로 및 모델을 Unity 카탈로그로 마이그레이션

Databricks는 향상된 거버넌스, 작업 영역 및 환경 간 간편한 공유, 보다 유연한 MLOps 워크플로를 위해 Unity 카탈로그의 모델을 사용하는 것이 좋습니다. 이 테이블에서는 작업 영역 모델 레지스트리 및 Unity 카탈로그의 기능을 비교합니다.

기능 작업 영역 모델 레지스트리(레거시) Unity 카탈로그의 모델(권장)
명명된 별칭별 모델 버전 참조 모델 레지스트리 단계: 모델 버전을 4개의 고정 단계 중 하나로 이동하여 해당 스테이지에서 참조합니다. 스테이지의 이름을 바꾸거나 추가할 수 없습니다. 모델 레지스트리 별칭: 등록된 각 모델의 모델 버전에 대해 최대 10개의 사용자 지정 및 재할당 가능한 명명된 참조를 만듭니다.
모델에 대한 액세스 제어 환경 만들기 모델 레지스트리 단계: 등록된 한 모델 내의 단계를 사용하여 4개의 고정 단계 중 두 단계(StagingProduction)에 대한 액세스 제어를 사용하여 해당 모델 버전의 환경을 나타냅니다. 등록된 모델: Unity 카탈로그의 3개 수준 네임스페이스 및 사용 권한을 활용하여 거버넌스를 표현하는 MLOps 워크플로의 각 환경에 대해 등록된 모델을 만듭니다.
환경 전반에서 모델 승격(모델 배포) transition_model_version_stage() MLflow 클라이언트 API를 사용하여 모델 버전을 다른 단계로 이동하면 이전 단계를 참조하는 워크플로가 손상될 수 있습니다. copy_model_version() MLflow 클라이언트 API를 사용하여 등록된 모델에서 다른 모델로 모델 버전을 복사합니다.
여러 작업 공간에서 모델 액세스 및 공유 작업 영역에서 모델을 수동으로 내보내고 가져오거나 개인 액세스 토큰 및 작업 영역 비밀 범위를 사용하여 원격 모델 레지스트리에 대한 연결을 구성합니다. 동일한 계정의 작업 영역에서 모델에 대한 기본 액세스 권한입니다. 구성이 필요 없습니다.
권한 구성 작업 영역 수준에서 권한을 설정합니다. 작업 영역에 일관된 거버넌스를 적용하는 계정 수준에서 사용 권한을 설정합니다.
Databricks markplace에서 모델 액세스 사용할 수 없음 Databricks 마켓플레이스에서 Unity 카탈로그 메타스토어로 모델을 로드하고 작업 영역에서 액세스합니다.

아래에 연결된 문서에서는 워크플로(모델 학습 및 일괄 처리 유추 작업)와 모델을 작업 영역 모델 레지스트리에서 Unity 카탈로그로 마이그레이션하는 방법을 설명합니다.

제한 사항

  • Unity 카탈로그의 모델에는 스테이지가 지원되지 않습니다. Databricks는 Unity 카탈로그의 세 수준 네임스페이스를 사용하여 모델이 있는 환경을 표현하고 별칭을 사용하여 배포를 위한 모델을 승격하는 것이 좋습니다. 자세한 내용은 환경 전반에서 모델 승격을 참조하세요.
  • Unity 카탈로그의 모델에는 웹후크가 지원되지 않습니다. 업그레이드 가이드에서 제안된 대안을 참조하세요.
  • 일부 검색 API 필드 및 연산자는 Unity 카탈로그의 모델에 대해 지원되지 않습니다. 지원되는 필터를 사용하여 검색 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 카탈로그에서 지원되지 않습니다.
  • Unity 카탈로그의 모델에는 활동 로그가 지원되지 않습니다. Unity 카탈로그의 모델에 대한 작업을 추적하려면 감사 로그를 사용합니다.
  • search_registered_models는 Delta 공유를 통해 공유된 모델의 부실 결과를 반환할 수 있습니다. 최신 결과를 확인하려면 Databricks CLI 또는 SDK를 사용하여 스키마에 모델을 나열합니다.