Správa životního cyklu modelu v katalogu Unity

Důležité

Tento článek popisuje, jak používat modely v katalogu Unity jako součást pracovního postupu strojového učení ke správě celého životního cyklu modelů ML. Databricks poskytuje hostované verze registru modelů MLflow v katalogu Unity. Modely v katalogu Unity rozšiřují výhody katalogu Unity na modely ML, včetně centralizovaného řízení přístupu, auditování, rodokmenu a zjišťování modelů napříč pracovními prostory. Modely v katalogu Unity jsou kompatibilní s opensourcovým klientem Pythonu MLflow.

Přehled konceptů registru modelů najdete v tématu Správa životního cyklu ML pomocí MLflow.

Požadavky

  1. Ve vašem pracovním prostoru musí být povolený katalog Unity. Viz Začínáme používat Katalog Unity k vytvoření metastoru katalogu Unity, jeho povolení v pracovním prostoru a vytvoření katalogu. Pokud není katalog Unity povolený, použijte registr modelu pracovního prostoru.

  2. Musíte použít výpočetní prostředek, který má přístup ke katalogu Unity. U úloh ML to znamená, že režim přístupu výpočetních prostředků musí být jeden uživatel. Další informace najdete v tématu Režimy accessu.

  3. K vytvoření nových registrovaných modelů potřebujete následující oprávnění:

    • USE SCHEMA a USE CATALOG oprávnění ke schématu a jeho nadřazeném katalogu.
    • CREATE_MODEL oprávnění ke schématu. K udělení tohoto oprávnění použijte uživatelské rozhraní Průzkumníka katalogu nebo následující příkaz SQL GRANT:
    GRANT CREATE_MODEL ON SCHEMA <schema-name> TO <principal>
    

Poznámka:

Váš pracovní prostor musí být připojený k metastoru katalogu Unity, který podporuje dědičnost oprávnění. To platí pro všechny metastory vytvořené po 25. srpnu 2022. Pokud běží na starším metastoru, postupujte podle dokumentace k upgradu.

Instalace a konfigurace klienta MLflow pro Katalog Unity

Tato část obsahuje pokyny pro instalaci a konfiguraci klienta MLflow pro katalog Unity.

Instalace klienta Pythonu MLflow

Pomocí následujícího kódu můžete také použít modely v Katalogu Unity ve službě Databricks Runtime 11.3 LTS a novější. Stačí do poznámkového bloku nainstalovat nejnovější verzi klienta Pythonu MLflow.

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

Konfigurace klienta MLflow pro přístup k modelům v katalogu Unity

Pokud je výchozí katalog vašeho pracovního prostoru ve službě Unity Catalog (nikolihive_metastore) a používáte cluster využívající Databricks Runtime 13.3 LTS nebo novější (Databricks Runtime 15.0 nebo novější v oblastech Azure China), modely se automaticky vytvoří a načtou z výchozího katalogu. Tento krok nemusíte provádět.

V případě jiných pracovních prostorů vytvoří klient Pythonu MLflow modely v registru modelů pracovního prostoru Databricks. Pokud chcete upgradovat na modely v katalogu Unity, pomocí následujícího kódu v poznámkových blocích nakonfigurujte klienta MLflow:

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

Pro malý počet pracovních prostorů, ve kterých byl výchozí katalog nakonfigurovaný pro katalog v Katalogu Unity před lednem 2024 a registrem modelu pracovního prostoru byl použit před lednem 2024, musíte ručně nastavit výchozí katalog na Unity Catalog pomocí výše uvedeného příkazu.

Trénování a registrace modelů kompatibilních s katalogem Unity

Požadovaná oprávnění: K vytvoření nového registrovaného modelu potřebujete CREATE_MODEL oprávnění a USE SCHEMA oprávnění k nadřazeném schématu a USE CATALOG oprávnění k nadřazeném katalogu. Pokud chcete vytvořit nové verze modelu v rámci registrovaného modelu, musíte být vlastníkem registrovaného modelu a mít USE SCHEMA USE CATALOG oprávnění ke schématu a katalogu obsahujícímu model.

Verze modelu ML v UC musí mít podpis modelu. Pokud ještě nehlásíte modely MLflow s podpisy v trénovacích úlohách modelu, můžete:

  • Použijte automatické protokolování Databricks, které automaticky protokoluje modely s podpisy pro mnoho oblíbených architektur ML. Viz podporované architektury v dokumentaci k MLflow.
  • S MLflow 2.5.0 a vyšší můžete zadat vstupní příklad volání mlflow.<flavor>.log_model a podpis modelu se automaticky odvodí. Další informace najdete v dokumentaci k MLflow.

Pak do rozhraní API MLflow ve formuláři <catalog>.<schema>.<model>předejte tříúrovňový název modelu.

Příklady v této části vytvářejí a přistupujte k modelům ve schématu prod v ml_team katalogu.

Příklady trénování modelu v této části vytvoří novou verzi modelu a zaregistrují prod ji v katalogu. prod Použití katalogu nemusí nutně znamenat, že verze modelu obsluhuje produkční provoz. Verze modelu, která obsahuje katalog, schéma a zaregistrovaný model, odráží jeho prostředí () a přidružená pravidla zásad správného řízení (prodnapříklad oprávnění je možné nastavit tak, aby z katalogu mohli odstranit prod jenom správci), ale ne stav nasazení. Ke správě stavu nasazení použijte aliasy modelu.

Registrace modelu do katalogu Unity pomocí automatickéhologování

K registraci modelu použijte metodu rozhraní API register_model() klienta MLflow. Viz 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")

Registrace modelu pomocí rozhraní API

mlflow.register_model(
  "runs:/<run_uuid>/model", "prod.ml_team.iris_model"
)

Registrace modelu do katalogu Unity s automatickým odvozeným podpisem

Podpora automaticky odvozených podpisů je k dispozici v MLflow verze 2.5.0 a vyšší a je podporována v Databricks Runtime 11.3 LTS ML a vyšší. Pokud chcete používat automaticky odvozené podpisy, nainstalujte do poznámkového bloku nejnovějšího klienta Pythonu MLflow pomocí následujícího kódu:

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

Následující kód ukazuje příklad automaticky odvozeného podpisu.

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

Registrace modelu pomocí uživatelského rozhraní

Postupujte následovně:

  1. Na stránce spuštění experimentu klikněte v pravém horním rohu uživatelského rozhraní na Zaregistrovat model .

  2. V dialogovém okně vyberte Katalog Unity a v rozevíracím seznamu vyberte cílový model.

    Dialogové okno Registrace verze modelu s rozevírací nabídkou

  3. Klikněte na Zaregistrovat.

    Dialogové okno Registrace verze modelu s tlačítkem

Registrace modelu může nějakou dobu trvat. Pokud chcete sledovat průběh, přejděte v katalogu Unity k cílovému modelu a pravidelně aktualizujte.

Nasazení modelů pomocí aliasů

Aliasy modelů umožňují přiřadit proměnlivý pojmenovaný odkaz na konkrétní verzi registrovaného modelu. Aliasy můžete použít k označení stavu nasazení verze modelu. Můžete například přidělit alias "Šampion" verzi modelu, která je aktuálně v produkčním prostředí, a cílit na tento alias v úlohách, které používají produkční model. Produkční model pak můžete aktualizovat tak, že znovu přiřadíte alias "Champion" na jinou verzi modelu.

Nastavení a odstranění aliasů v modelech

Požadovaná oprávnění: Vlastník registrovaného modelu a USE SCHEMA USE CATALOG oprávnění k schématu a katalogu obsahujícímu model.

Aliasy pro modely v katalogu Unity můžete nastavit, aktualizovat a odebrat pomocí Průzkumníka katalogu. Aliasy můžete spravovat napříč registrovaným modelem na stránce podrobností modelu a nakonfigurovat aliasy pro konkrétní verzi modelu na stránce podrobností o verzi modelu.

Pokud chcete nastavit, aktualizovat a odstranit aliasy pomocí rozhraní API klienta MLflow, projděte si následující příklady:

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

Další podrobnosti o rozhraních API klientů aliasů najdete v dokumentaci k rozhraní API MLflow.

Načtení verze modelu podle aliasu pro úlohy odvozování

Požadovaná oprávnění: EXECUTE oprávnění k registrovanému modelu a USE SCHEMA USE CATALOG oprávnění ke schématu a katalogu obsahujícímu model.

Úlohy odvozování služby Batch můžou odkazovat na verzi modelu podle aliasu. Následující fragment kódu načte a použije verzi modelu Champion pro odvozování dávek. Pokud se verze Champion aktualizuje tak, aby odkazovala na novou verzi modelu, úloha odvozování dávek ji automaticky převezme při příštím spuštění. To vám umožní oddělit nasazení modelu od dávkových úloh odvozování.

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)

Model obsluhující koncové body může také odkazovat na verzi modelu podle aliasu. Pracovní postupy nasazení můžete napsat, abyste získali verzi modelu podle aliasu a aktualizovali koncový bod obsluhující model tak, aby sloužil této verzi, pomocí modelu obsluhujícího rozhraní REST API. Příklad:

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(...)

Načtení verze modelu podle čísla verze pro úlohy odvozování

Verze modelu můžete načíst také podle čísla verze:

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)

Sdílení modelů mezi pracovními prostory

Sdílení modelů s uživateli ve stejné oblasti

Pokud máte příslušná oprávnění, můžete k modelům v Katalogu Unity přistupovat z libovolného pracovního prostoru připojeného k metastoru obsahujícímu daný model. Například můžete přistupovat k modelům z prod katalogu v pracovním prostoru pro vývoj, což usnadňuje porovnávání nově vyvinutých modelů s produkčním směrnými plány.

Pokud chcete spolupracovat s ostatními uživateli (sdílet oprávnění k zápisu) u registrovaného modelu, který jste vytvořili, musíte udělit vlastnictví modelu skupině obsahující vás a uživatelům, se kterými chcete spolupracovat. Spolupracovníci musí mít USE CATALOG USE SCHEMA také oprávnění k katalogu a schématu obsahujícímu model. Podrobnosti najdete v tématu Oprávnění katalogu Unity a zabezpečitelné objekty .

Sdílení modelů s uživateli v jiné oblasti nebo účtu

Pokud chcete sdílet modely s uživateli v jiných oblastech nebo účtech, použijte tok sdílení Datbricks-to-Databricks. Viz Přidání modelů do sdílené složky (pro poskytovatele) a získání přístupu v modelu Databricks-to-Databricks (pro příjemce). Jako příjemce budete po vytvoření katalogu ze sdílené složky přistupovat k modelům v daném sdíleném katalogu stejným způsobem jako jakýkoli jiný model v katalogu Unity.

Sledování rodokmenu dat modelu v katalogu Unity

Poznámka:

Podpora rodokmenu modelů v Katalogu Unity je dostupná v MLflow 2.11.0 a novějších.

Při trénování modelu na tabulce v katalogu Unity můžete sledovat rodokmen modelu k nadřazeným datovým sadám, na které byl natrénován a vyhodnocen. K tomu použijte mlflow.log_input. Tím se uloží informace o vstupní tabulce pomocí spuštění MLflow, které vygenerovalo model. Rodokmen dat se také automaticky zaznamenává pro modely protokolované pomocí rozhraní API úložiště funkcí. Viz zásady správného řízení a rodokmen funkcí.

Když model zaregistrujete do katalogu Unity, informace o rodokmenu se automaticky uloží a zobrazí se na kartě Rodokmen uživatelského rozhraní verze modelu v Průzkumníku katalogu.

Následující kód znázorňuje příklad.

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

Řízení přístupu k modelům

V katalogu Unity jsou registrované modely podtyp zabezpečitelného objektu FUNCTION . Pokud chcete udělit přístup k modelu registrovanému v katalogu Unity, použijte GRANT ON FUNCTION. Podrobnosti najdete v tématu Oprávnění katalogu Unity a zabezpečitelné objekty. Osvědčené postupy pro uspořádání modelů napříč katalogy a schématy najdete v tématu Uspořádání dat.

Oprávnění modelu můžete nakonfigurovat programově pomocí rozhraní REST API grantů. Při konfiguraci oprávnění modelu nastavte securable_type v "FUNCTION" požadavcích rozhraní REST API. Slouží PATCH /api/2.1/unity-catalog/permissions/function/{full_name} například k aktualizaci registrovaných oprávnění modelu.

Zobrazení modelů v uživatelském rozhraní

Požadovaná oprávnění: Pokud chcete zobrazit zaregistrovaný model a jeho verze modelu v uživatelském rozhraní, potřebujete EXECUTE oprávnění k registrovanému modelu USE SCHEMA a USE CATALOG oprávnění ke schématu a katalogu obsahujícímu model.

Registrované modely a verze modelů můžete zobrazit a spravovat v katalogu Unity pomocí Průzkumníka katalogu.

Přejmenování modelu

Požadovaná oprávnění: Vlastník registrovaného modelu, CREATE_MODEL oprávnění k schématu obsahujícímu zaregistrovaný model a USE SCHEMA USE CATALOG oprávnění ke schématu a katalogu obsahujícímu model.

K přejmenování zaregistrovaného modelu použijte metodu rozhraní API klienta MLflow rename_registered_model():

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

Kopírování verze modelu

Verzi modelu můžete zkopírovat z jednoho modelu do jiného v katalogu Unity.

Kopírování verze modelu pomocí uživatelského rozhraní

Postupujte následovně:

  1. Na stránce verze modelu klikněte v pravém horním rohu uživatelského rozhraní na Kopírovat tuto verzi .

  2. V rozevíracím seznamu vyberte cílový model a klikněte na Kopírovat.

    Dialogové okno Kopírovat verzi modelu

Kopírování modelu může nějakou dobu trvat. Pokud chcete sledovat průběh, přejděte v katalogu Unity k cílovému modelu a pravidelně aktualizujte.

Kopírování verze modelu pomocí rozhraní API

Pokud chcete zkopírovat verzi modelu, použijte rozhraní PYTHON API MLflow copy_model_version():

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

Odstranění modelu nebo verze modelu

Požadovaná oprávnění: Vlastník registrovaného modelu a USE SCHEMA USE CATALOG oprávnění k schématu a katalogu obsahujícímu model.

Zaregistrovaný model nebo verzi modelu můžete odstranit v rámci registrovaného modelu pomocí uživatelského rozhraní Průzkumníka katalogu nebo rozhraní API.

Upozorňující

Tuto akci nelze vrátit zpět. Když odstraníte model, odstraní se všechny artefakty modelu uložené v katalogu Unity a všechna metadata přidružená k registrovanému modelu.

Odstranění verze modelu nebo celého modelu pomocí uživatelského rozhraní

Pokud chcete odstranit model nebo verzi modelu v katalogu Unity, postupujte takto.

  1. Na stránce modelu nebo na stránce verze modelu klikněte v pravém horním rohu na nabídku Nabídka Kebab kebabu.

    Ze stránky modelu:

    Nabídka kebab stránky modelu s odstraněním

    Ze stránky verze modelu:

    nabídka stránky kebab verze modelu s odstraněním

  2. Vyberte Odstranit.

  3. Zobrazí se dialogové okno s potvrzením. Kliknutím na Odstranit potvrďte.

Odstranění verze modelu nebo celého modelu pomocí rozhraní API

Pokud chcete odstranit verzi modelu, použijte metodu rozhraní API klienta MLflow 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)

Pokud chcete odstranit celý model, použijte metodu rozhraní API klienta MLflow delete_registered_model():

client = MlflowClient()
client.delete_registered_model(name="<model-name>")

Použití značek u modelů

Značky jsou páry klíč-hodnota, které přidružíte k registrovaným modelům a verzím modelů, takže je můžete označovat a kategorizovat podle funkce nebo stavu. Můžete například použít značku s klíčem "task" a hodnotou "question-answering" (zobrazenou v uživatelském rozhraní jako task:question-answering) pro registrované modely určené pro úlohy zodpovězení otázek. Na úrovni verze modelu byste mohli označovat verze, u kterých probíhá ověření před nasazením validation_status:pending , a verze, u kterých došlo k vymazání nasazení s validation_status:approved.

Požadovaná oprávnění: Vlastník nebo má APPLY_TAG oprávnění k registrovanému modelu USE SCHEMA a USE CATALOG oprávnění ke schématu a katalogu obsahujícímu model.

Informace o tom, jak nastavit a odstranit značky pomocí uživatelského rozhraní, najdete v tématu Přidání a aktualizace značek pomocí Průzkumníka katalogu.

Pokud chcete nastavit a odstranit značky pomocí klientského rozhraní API MLflow, projděte si následující příklady:

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

Registrované značky modelu i verze modelu musí splňovat omezení pro celou platformu.

Další podrobnosti o rozhraních API pro označování klientů najdete v dokumentaci k rozhraní API MLflow.

Přidání popisu (komentářů) do modelu nebo verze modelu

Požadovaná oprávnění: Vlastník registrovaného modelu a USE SCHEMA USE CATALOG oprávnění k schématu a katalogu obsahujícímu model.

Do katalogu Unity můžete zahrnout textový popis libovolného modelu nebo verze modelu. Můžete například poskytnout přehled problému nebo informace o metodologii a použitém algoritmu.

U modelů máte také možnost používat komentáře generované AI. Viz Přidání komentářů generovaných AI do objektů katalogu Unity.

Přidání popisu do modelu pomocí uživatelského rozhraní

Pokud chcete přidat popis modelu, můžete použít komentáře generované AI nebo můžete zadat vlastní komentáře. Komentáře generované AI můžete upravit podle potřeby.

  • Pokud chcete přidat automaticky generované komentáře, klikněte na tlačítko Vygenerovat AI.
  • Pokud chcete přidat vlastní komentáře, klikněte na Přidat. Do dialogového okna zadejte komentáře a klikněte na Uložit.

Tlačítka popisu modelu uc

Přidání popisu do verze modelu pomocí uživatelského rozhraní

Pokud chcete přidat popis do verze modelu v katalogu Unity, postupujte takto:

  1. Na stránce verze modelu klikněte v části Popis na ikonu tužky.

    Ikona tužky pro přidání komentářů do verze modelu

  2. Do dialogového okna zadejte komentáře a klikněte na Uložit.

Přidání popisu do modelu nebo verze modelu pomocí rozhraní API

Pokud chcete aktualizovat popis registrovaného modelu, použijte metodu rozhraní API update_registered_model() klienta MLflow:

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

Pokud chcete aktualizovat popis verze modelu, použijte metodu rozhraní API klienta MLflow update_model_version():

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

Výpis a vyhledávací modely

Pokud chcete získat seznam registrovaných modelů v katalogu Unity, použijte rozhraní API pythonu MLflow search_registered_models():

client=MlflowClient()
client.search_registered_models()

Pokud chcete vyhledat konkrétní název modelu a získat informace o jeho verzích, použijte search_model_versions():

from pprint import pprint

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

Poznámka:

Pro modely v katalogu Unity nejsou podporována všechna pole a operátory rozhraní API vyhledávání. Podrobnosti viz Omezení.

Stažení souborů modelu (případ rozšířeného použití)

Ve většině případů byste k načtení modelů měli použít rozhraní API MLflow, jako mlflow.pyfunc.load_model jsou nebo mlflow.<flavor>.load_model (například mlflow.transformers.load_model pro modely HuggingFace).

V některých případech možná budete muset stáhnout soubory modelu, abyste mohli ladit chování modelu nebo problémy s načítáním modelu. Soubory modelu si můžete stáhnout následujícím způsobem 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)

Zvýšení úrovně modelu napříč prostředími

Databricks doporučuje nasadit kanály ML jako kód. To eliminuje potřebu propagovat modely napříč prostředími, protože všechny produkční modely je možné vytvářet prostřednictvím automatizovaných trénovacích pracovních postupů v produkčním prostředí.

V některých případech ale může být přetrénování modelů napříč prostředími příliš nákladné. Místo toho můžete kopírovat verze modelů napříč registrovanými modely v katalogu Unity a zvýšit jejich úroveň napříč prostředími.

K provedení následujícího ukázkového kódu potřebujete následující oprávnění:

  • USE CATALOG a staging prod katalogy.
  • USE SCHEMAstaging.ml_team prod.ml_team a schématech.
  • EXECUTEna .staging.ml_team.fraud_detection

Kromě toho musíte být vlastníkem registrovaného modelu prod.ml_team.fraud_detection.

Následující fragment kódu používá copy_model_version rozhraní API klienta MLflow dostupné v MLflow verze 2.8.0 a vyšší.

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)

Jakmile je verze modelu v produkčním prostředí, můžete provést jakékoli nezbytné ověření před nasazením. Potom můžete označit verzi modelu pro nasazení pomocí aliasů.

client = mlflow.tracking.MlflowClient()
client.set_registered_model_alias(name="prod.ml_team.fraud_detection", alias="Champion", version=copied_model_version.version)

V předchozím příkladu můžou pracovní modely do produkčního prostředí zvýšit pouze uživatelé, kteří můžou číst z registrovaného staging.ml_team.fraud_detection modelu a zapisovat do registrovaného prod.ml_team.fraud_detection modelu. Stejní uživatelé můžou také používat aliasy ke správě verzí modelu nasazených v produkčním prostředí. Pro řízení povýšení a nasazení modelu nemusíte konfigurovat žádná další pravidla ani zásady.

Tento tok můžete přizpůsobit tak, aby podporoval verzi modelu napříč několika prostředími, která odpovídají vašemu nastavení, například dev, qaa prod. Řízení přístupu se vynucuje podle konfigurace v každém prostředí.

Příklad

Tento příklad ukazuje, jak pomocí modelů v katalogu Unity sestavit aplikaci strojového učení.

Modely v příkladu katalogu Unity

Migrace pracovních postupů a modelů do katalogu Unity

Databricks doporučuje používat modely v katalogu Unity pro vylepšené zásady správného řízení, snadné sdílení pracovních prostorů a prostředí a flexibilnější pracovní postupy MLOps. Tabulka porovnává možnosti registru modelů pracovního prostoru a katalogu Unity.

Schopnost Registr modelů pracovního prostoru (starší verze) Modely v katalogu Unity (doporučeno)
Referenční verze modelu podle pojmenovaných aliasů Fáze registru modelů: Přesuňte verze modelu do jedné ze čtyř pevných fází, aby na ně tato fáze odkazovala. Fáze nelze přejmenovat ani přidat. Aliasy registru modelů: Vytvořte až 10 vlastních a znovu přiřaditelných pojmenovaných odkazů na verze modelu pro každý registrovaný model.
Vytváření prostředí řízených přístupem pro modely Fáze registru modelů: Použití fází v rámci jednoho registrovaného modelu k označení prostředí jeho verzí modelu s řízením přístupu pouze pro dva ze čtyř pevných fází (Staging a Production). Registrované modely: Vytvořte zaregistrovaný model pro každé prostředí v pracovním postupu MLOps s využitím tříúrovňových oborů názvů a oprávnění katalogu Unity k vyjádření zásad správného řízení.
Propagace modelů napříč prostředími (nasazení modelu) Pomocí klientského transition_model_version_stage() rozhraní API MLflow přesuňte verzi modelu do jiné fáze, potenciálně rozbít pracovní postupy, které odkazují na předchozí fázi. Pomocí klientského copy_model_version() rozhraní API MLflow zkopírujte verzi modelu z jednoho registrovaného modelu do jiného.
Přístup k modelům a jejich sdílení napříč pracovními prostory Ručně exportujte a importujte modely mezi pracovními prostory nebo nakonfigurujte připojení ke vzdáleným registrům modelů pomocí tokenů patového přístupu a oborů tajných kódů pracovního prostoru. Přístup k modelům napříč pracovními prostory ve stejném účtu Nevyžaduje se žádná konfigurace.
Konfigurace oprávnění Nastavte oprávnění na úrovni pracovního prostoru. Nastavte oprávnění na úrovni účtu, která používá konzistentní zásady správného řízení napříč pracovními prostory.
Přístup k modelům v Markplace Databricks Nedostupný. Načtěte modely z marketplace Databricks do metastoru katalogu Unity a získejte k nim přístup napříč pracovními prostory.

Níže uvedené články popisují migraci pracovních postupů (trénování modelů a dávkových odvozovacích úloh) a modelů z registru modelů pracovního prostoru do katalogu Unity.

Omezení

  • Fáze nejsou podporovány pro modely v katalogu Unity. Databricks doporučuje použít tříúrovňový obor názvů v katalogu Unity k vyjádření prostředí, ve které je model, a použití aliasů k propagaci modelů pro nasazení. Podrobnosti najdete v tématu Zvýšení úrovně modelu napříč prostředími .
  • Webhooky nejsou podporovány pro modely v katalogu Unity. Podívejte se na navrhované alternativy v průvodci upgradem.
  • Některá pole a operátory rozhraní API vyhledávání nejsou podporována pro modely v katalogu Unity. To je možné zmírnit voláním rozhraní API vyhledávání pomocí podporovaných filtrů a prohledáváním výsledků. Tady je několik příkladů:
    • Parametr order_by není podporován v rozhraních API klienta search_model_versions ani search_registered_models .
    • Filtry založené na značkách (tags.mykey = 'myvalue') nejsou podporovány nebo search_model_versions search_registered_models.
    • Operátory jiné než přesná rovnost (například LIKE, ILIKE, !=) nejsou podporovány pro search_model_versions nebo search_registered_models.
    • Vyhledávání registrovaných modelů podle názvu (například MlflowClient().search_registered_models(filter_string="name='main.default.mymodel'") se nepodporuje. Pokud chcete načíst konkrétní registrovaný model podle názvu, použijte get_registered_model.
  • E-mailová oznámení a vlákna diskuze o komentářích v registrovaných modelech a verzích modelů nejsou v katalogu Unity podporována.
  • Protokol aktivit není podporován pro modely v katalogu Unity. Pokud chcete sledovat aktivitu modelů v katalogu Unity, použijte protokoly auditu.
  • search_registered_models můžou vrátit zastaralé výsledky pro modely sdílené prostřednictvím rozdílového sdílení. K zajištění nejnovějších výsledků použijte rozhraní příkazového řádku nebo sadu SDK Databricks k zobrazení seznamu modelů ve schématu.