Hantera modelllivscykel i Unity Catalog

Viktigt!

Den här artikeln beskriver hur du använder modeller i Unity Catalog som en del av ditt maskininlärningsarbetsflöde för att hantera hela livscykeln för ML-modeller. Databricks tillhandahåller en värdbaserad version av MLflow Model Registry i Unity Catalog. Modeller i Unity Catalog utökar fördelarna med Unity Catalog till ML-modeller, inklusive centraliserad åtkomstkontroll, granskning, ursprung och modellidentifiering mellan arbetsytor. Modeller i Unity Catalog är kompatibla med MLflow Python-klienten med öppen källkod.

Viktiga funktioner i modeller i Unity Catalog är:

  • Namnavstånd och styrning för modeller, så att du kan gruppera och styra modeller på miljö-, projekt- eller teamnivå ("Bevilja dataforskare skrivskyddad åtkomst till produktionsmodeller").
  • Kronologisk modell härkomst (som MLflow experimenterar och kör producerade modellen vid en viss tidpunkt).
  • Modellservering.
  • Versionshantering av modeller.
  • Modelldistribution via alias. Markera till exempel "Champion"-versionen av en modell i katalogen prod .

Om din arbetsytas standardkatalog är konfigurerad för en katalog i Unity Catalog registreras modeller som registrerats med MLflow-API:er som mlflow.<model-type>.log_model(..., registered_model_name) eller mlflow.register_model(model_uri, name) är registrerade i Unity Catalog som standard.

Den här artikeln innehåller instruktioner för både modellerna i Unity Catalog-användargränssnittet och API:et.

En översikt över modellregisterbegrepp finns i ML-livscykelhantering med MLflow.

Krav

  1. Unity-katalogen måste vara aktiverad på arbetsytan. Se Kom igång med Unity Catalog för att skapa ett Unity Catalog-metaarkiv, aktivera det på en arbetsyta och skapa en katalog. Om Unity Catalog inte är aktiverat kan du fortfarande använda det klassiska arbetsytemodellregistret.

  2. Din arbetsyta måste vara kopplad till ett Unity Catalog-metaarkiv som stöder arv av privilegier. Detta gäller för alla metaarkiv som skapats efter den 25 augusti 2022. Om du kör på ett äldre metaarkiv följer du dokumenten för att uppgradera.

  3. Du måste ha åtkomst till att köra kommandon på ett kluster med åtkomst till Unity Catalog.

  4. För att skapa nya registrerade modeller behöver du behörigheten CREATE_MODEL för ett schema, förutom USE SCHEMA behörigheterna och USE CATALOG för schemat och dess omslutande katalog. CREATE_MODEL är en ny behörighet på schemanivå som du kan bevilja med hjälp av katalogutforskarens användargränssnitt eller SQL GRANT-kommandot enligt nedan.

    GRANT CREATE_MODEL ON SCHEMA <schema-name> TO <principal>
    

Uppgradera träningsarbetsbelastningar till Unity Catalog

Det här avsnittet innehåller instruktioner för att uppgradera befintliga träningsarbetsbelastningar till Unity Catalog.

Installera MLflow Python-klienten

Du kan också använda modeller i Unity Catalog på Databricks Runtime 11.3 LTS och senare genom att installera den senaste versionen av MLflow Python-klienten i notebook-filen med hjälp av koden nedan.

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

Konfigurera MLflow-klienten för åtkomst till modeller i Unity Catalog

Som standard skapar MLflow Python-klienten modeller i Databricks-arbetsytemodellregistret. Om du vill uppgradera till modeller i Unity Catalog konfigurerar du MLflow-klienten:

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

Kommentar

Om din arbetsytas standardkatalog finns i Unity-katalogen (i stället hive_metastoreför ) och du kör ett kluster med Databricks Runtime 13.3 LTS eller senare (Databricks Runtime 15.0 eller senare i Azure China-regioner), skapas modeller automatiskt i och läses in från standardkatalogen, utan att någon konfiguration krävs. Det finns ingen ändring i beteendet för andra Databricks Runtime-versioner. Ett litet antal arbetsytor där både standardkatalogen konfigurerades till en katalog i Unity Catalog före januari 2024 och arbetsytemodellregistret användes före januari 2024 är undantagna från det här beteendet.

Träna och registrera Unity Catalog-kompatibla modeller

Behörigheter som krävs: För att skapa en ny registrerad modell behöver CREATE_MODEL du behörigheterna och USE SCHEMA för det omslutande schemat och USE CATALOG behörigheten för den omslutande katalogen. Om du vill skapa nya modellversioner under en registrerad modell måste du vara ägare till den registrerade modellen och ha USE SCHEMA och USE CATALOG behörigheter för schemat och katalogen som innehåller modellen.

ML-modellversioner i UC måste ha en modellsignatur. Om du inte redan loggar MLflow-modeller med signaturer i dina modellträningsarbetsbelastningar kan du antingen:

  • Använd Automatisk loggning av Databricks, som automatiskt loggar modeller med signaturer för många populära ML-ramverk. Se ramverk som stöds i MLflow-dokumenten.
  • Med MLflow 2.5.0 och senare kan du ange ett indataexempel i mlflow.<flavor>.log_model anropet och modellsignaturen härleds automatiskt. Mer information finns i MLflow-dokumentationen.

Skicka sedan modellens namn på tre nivåer till MLflow-API:er i formuläret <catalog>.<schema>.<model>.

Exemplen i det här avsnittet skapar och kommer åt modeller i ml_team schemat under prod katalogen.

Modellträningsexemplen i det här avsnittet skapar en ny modellversion och registrerar den prod i katalogen. prod Att använda katalogen betyder inte nödvändigtvis att modellversionen hanterar produktionstrafik. Modellversionens omslutande katalog, schema och registrerade modell återspeglar dess miljö (prod) och tillhörande styrningsregler (till exempel behörigheter kan konfigureras så att endast administratörer kan ta bort från prod katalogen), men inte dess distributionsstatus. Om du vill hantera distributionsstatusen använder du modellalias.

Registrera en modell i Unity Catalog med automatisk loggning

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

Registrera en modell i Unity Catalog med automatiskt härledd signatur

Stöd för automatiskt antagna signaturer finns i MLflow version 2.5.0 och senare och stöds i Databricks Runtime 11.3 LTS ML och senare. Om du vill använda automatiskt härledda signaturer använder du följande kod för att installera den senaste MLflow Python-klienten i notebook-filen:

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

Följande kod visar ett exempel på en automatiskt härledd signatur.

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

Spåra data härstamningen för en modell i Unity Catalog

Kommentar

Stöd för tabell-till-modell-ursprung i Unity Catalog finns i MLflow 2.11.0 och senare.

När du tränar en modell på en tabell i Unity Catalog kan du spåra modellens ursprung till de överordnade datauppsättningar som den har tränats och utvärderats på. Det gör du genom att använda mlflow.log_input. Detta sparar indatatabellinformationen med MLflow-körningen som genererade modellen. Data härkomst registreras också automatiskt för modeller som loggas med hjälp av funktionslager-API:er. Se Visa ursprung för funktionsarkiv.

När du registrerar modellen i Unity Catalog sparas ursprungsinformation automatiskt och visas på fliken Ursprung i modellversionsgränssnittet i Catalog Explorer.

Följande kod visar ett exempel.

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

Visa modeller i användargränssnittet

Behörigheter som krävs: Om du vill visa en registrerad modell och dess modellversioner i användargränssnittet behöver EXECUTE du behörighet för den registrerade modellen samt USE SCHEMAUSE CATALOG behörigheter för schemat och katalogen som innehåller modellen

Du kan visa och hantera registrerade modeller och modellversioner i Unity Catalog med hjälp av Katalogutforskaren.

Kontrollera åtkomst till modeller

Information om hur du styr åtkomsten till modeller som registrerats i Unity Catalog finns i Behörigheter för Unity Catalog och skyddsbara objekt. Metodtips för att organisera modeller mellan kataloger och scheman finns i Ordna dina data.

Du kan konfigurera modellbehörigheter programatiskt med hjälp av REST API:et Grants. När du konfigurerar modellbehörigheter anger du securable_type till "FUNCTION" i REST API-begäranden. Använd till exempel PATCH /api/2.1/unity-catalog/permissions/function/{full_name} för att uppdatera registrerade modellbehörigheter.

Distribuera och organisera modeller med alias och taggar

Modellalias och taggar hjälper dig att organisera och hantera modeller i Unity Catalog.

Med modellalias kan du tilldela en föränderlig, namngiven referens till en viss version av en registrerad modell. Du kan använda alias för att ange distributionsstatus för en modellversion. Du kan till exempel allokera ett "Champion"-alias till den modellversion som för närvarande är i produktion och rikta det här aliaset i arbetsbelastningar som använder produktionsmodellen. Du kan sedan uppdatera produktionsmodellen genom att omtilldela aliaset "Champion" till en annan modellversion.

Taggar är nyckel/värde-par som du associerar med registrerade modeller och modellversioner, så att du kan märka och kategorisera dem efter funktion eller status. Du kan till exempel använda en tagg med nyckel "task" och värde "question-answering" (visas i användargränssnittet som task:question-answering) på registrerade modeller som är avsedda för frågor som besvarar uppgifter. På modellversionsnivå kan du tagga versioner som genomgår fördistributionsverifiering med validation_status:pending och de som har rensats för distribution med validation_status:approved.

Se följande avsnitt för hur du använder alias och taggar.

Ange och ta bort alias för modeller

Behörigheter som krävs: Ägare av den registrerade modellen samt USE CATALOGUSE SCHEMA behörigheter för schemat och katalogen som innehåller modellen.

Du kan ange, uppdatera och ta bort alias för modeller i Unity Catalog med hjälp av Catalog Explorer. Du kan hantera alias i en registrerad modell på sidan med modellinformation och konfigurera alias för en specifik modellversion på sidan med information om modellversion.

Information om hur du anger, uppdaterar och tar bort alias med MLflow-klient-API:et finns i exemplen nedan:

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

Ange och ta bort taggar på modeller

Behörigheter som krävs: Ägare till eller har APPLY_TAG behörighet för den registrerade modellen samt USE CATALOGUSE SCHEMA behörigheter för schemat och katalogen som innehåller modellen.

Se Hantera taggar i Katalogutforskaren om hur du anger och tar bort taggar med hjälp av användargränssnittet.

Om du vill ange och ta bort taggar med hjälp av MLflow-klient-API:et läser du exemplen nedan:

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

Både registrerade modell- och modellversionstaggar måste uppfylla begränsningarna för hela plattformen.

Mer information om api:er för alias och taggklient finns i MLflow API-dokumentationen.

Läsa in modeller för slutsatsdragning

Använda modellversioner efter alias i slutsatsdragningsarbetsbelastningar

Behörigheter som krävs: EXECUTE behörighet för den registrerade modellen samt USE CATALOGUSE SCHEMA behörigheter för schemat och katalogen som innehåller modellen.

Du kan skriva batchinferensarbetsbelastningar som refererar till en modellversion efter alias. Kodfragmentet nedan läser till exempel in och tillämpar modellversionen "Champion" för batchinferens. Om "Champion"-versionen uppdateras för att referera till en ny modellversion hämtar batchinferensarbetsbelastningen automatiskt den vid nästa körning. På så sätt kan du frikoppla modelldistributioner från batchinferensarbetsbelastningar.

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)

Du kan också skriva distributionsarbetsflöden för att hämta en modellversion efter alias och uppdatera en modell som betjänar slutpunkten för att hantera den versionen med hjälp av modellen som betjänar 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(...)

Använda modellversioner efter versionsnummer i slutsatsdragningsarbetsbelastningar

Du kan också läsa in modellversioner efter versionsnummer:

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)

Dela modeller mellan arbetsytor

Dela modeller med användare i samma region

Så länge du har rätt behörigheter kan du komma åt modeller i Unity Catalog från alla arbetsytor som är kopplade till metaarkivet som innehåller modellen. Du kan till exempel komma åt modeller från prod katalogen på en utvecklingsarbetsyta för att underlätta jämförelsen av nyutvecklade modeller med produktionsbaslinjen.

Om du vill samarbeta med andra användare (dela skrivbehörigheter) för en registrerad modell som du har skapat måste du bevilja ägarskapet för modellen till en grupp som innehåller dig själv och de användare som du vill samarbeta med. Medarbetare måste också ha behörigheterna USE CATALOG och USE SCHEMA i katalogen och schemat som innehåller modellen. Mer information finns i Behörigheter och skyddsbara objekt i Unity Catalog.

Dela modeller med användare i en annan region eller ett annat konto

Om du vill dela modeller med användare i andra regioner eller konton använder du delningsflödet Delta Sharing Databricks-to-Databricks. Se Lägga till modeller i en resurs (för leverantörer) och Få åtkomst i Databricks-till-Databricks-modellen (för mottagare). När du har skapat en katalog från en resurs som mottagare får du åtkomst till modeller i den delade katalogen på samma sätt som andra modeller i Unity Catalog.

Kommentera en modell eller modellversion

Behörigheter som krävs: Ägare av den registrerade modellen samt USE CATALOGUSE SCHEMA behörigheter för schemat och katalogen som innehåller modellen.

Du kan ange information om en modell eller modellversion genom att skriva en kommentar. Du kanske till exempel vill ta med en översikt över problemet eller information om den metod och algoritm som används.

Kommentera en modell eller modellversion med hjälp av användargränssnittet

Se Dokumentdata i Katalogutforskaren med markdown-kommentarer.

Kommentera en modell eller modellversion med hjälp av API:et

Om du vill uppdatera en registrerad modellbeskrivning använder du MLflow Client API-metoden update_registered_model() :

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

Om du vill uppdatera en beskrivning för en modellversion använder du metoden update_model_version() för MLflow-klient-API:et:

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

Byta namn på en modell (endast API)

Behörigheter som krävs: Ägare av den registrerade modellen, CREATE_MODEL behörighet för schemat som innehåller den registrerade modellen samt USE CATALOGUSE SCHEMA behörigheter för schemat och katalogen som innehåller modellen.

Om du vill byta namn på en registrerad modell använder du metoden rename_registered_model() för MLflow-klient-API:et:

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

Ta bort en modell eller modellversion

Behörigheter som krävs: Ägare av den registrerade modellen samt USE CATALOGUSE SCHEMA behörigheter för schemat och katalogen som innehåller modellen.

Du kan ta bort en registrerad modell eller en modellversion i en registrerad modell med hjälp av katalogutforskarens användargränssnitt eller API.

Ta bort en modellversion eller modell med hjälp av API:et

Varning

Du kan inte ångra den här åtgärden. När du tar bort en modell tas alla modellartefakter som lagras av Unity Catalog och alla metadata som är associerade med den registrerade modellen bort.

Ta bort en modellversion

Om du vill tar bort en modellversion använder du metoden delete_model_version() för MLflow-klient-API:et:

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

Ta bort modellen

Om du vill tar bort en modell använder du metoden delete_registered_model() för MLflow-klient-API:et:

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

Lista och sökmodeller

Du kan lista registrerade modeller i Unity Catalog med MLflows python-API search_registered_models():

client=MlflowClient()
client.search_registered_models()

Du kan också söka efter ett specifikt modellnamn och visa dess versionsinformation med hjälp av search_model_versions() metoden:

from pprint import pprint

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

Exempel

Det här exemplet visar hur du använder modeller i Unity Catalog för att skapa ett maskininlärningsprogram.

Exempel på modeller i Unity Catalog

Migrera arbetsflöden och modeller till Unity Catalog

Databricks rekommenderar att du använder Modeller i Unity Catalog för bättre styrning, enkel delning mellan arbetsytor och miljöer och mer flexibla MLOps-arbetsflöden. Tabellen jämför funktionerna i Arbetsytemodellregistret och Unity Catalog.

Kapacitet Arbetsytemodellregister (äldre) Modeller i Unity Catalog (rekommenderas)
Referensmodellversioner efter namngivna alias Modellregistersteg: Flytta modellversioner till ett av fyra fasta steg för att referera till dem i den fasen. Det går inte att byta namn på eller lägga till faser. Modellregisteralias: Skapa upp till 10 anpassade och omtilldelbara namngivna referenser till modellversioner för varje registrerad modell.
Skapa åtkomststyrda miljöer för modeller Modellregistersteg: Använd faser i en registrerad modell för att ange miljön för dess modellversioner, med åtkomstkontroller för endast två av de fyra fasta stegen (Staging och Production). Registrerade modeller: Skapa en registrerad modell för varje miljö i ditt MLOps-arbetsflöde med hjälp av namnområden på tre nivåer och behörigheter för Unity Catalog för att uttrycka styrning.
Höja upp modeller mellan miljöer (distribuera modell) Använd MLflow-klient-API:et transition_model_version_stage() för att flytta en modellversion till en annan fas, vilket kan bryta arbetsflöden som refererar till föregående steg. Använd MLflow-klient-API:et copy_model_version() för att kopiera en modellversion från en registrerad modell till en annan.
Komma åt och dela modeller mellan arbetsytor Exportera och importera modeller manuellt mellan arbetsytor eller konfigurera anslutningar till fjärrmodellregister med hjälp av personliga åtkomsttoken och arbetsytehemlighetsomfång. Direktåtkomst till modeller mellan arbetsytor i samma konto. Ingen konfiguration krävs.
Konfigurera behörigheter Ange behörigheter på arbetsytans nivå. Ange behörigheter på kontonivå, vilket tillämpar konsekvent styrning mellan arbetsytor.
Åtkomstmodeller i Databricks markplace Tillgänglig. Läs in modeller från Databricks Marketplace till ditt Unity Catalog-metaarkiv och få åtkomst till dem mellan arbetsytor.

Artiklarna nedan beskriver hur du migrerar arbetsflöden (modelltränings- och batchinferensjobb) och modeller från Arbetsytemodellregistret till Unity Catalog.

Begränsningar för stöd för Unity Catalog

  • Faser stöds inte för modeller i Unity Catalog. Databricks rekommenderar att du använder namnområdet på tre nivåer i Unity Catalog för att uttrycka miljön som en modell finns i och använda alias för att höja upp modeller för distribution. Mer information finns i uppgraderingsguiden .
  • Webhooks stöds inte för modeller i Unity Catalog. Se föreslagna alternativ i uppgraderingsguiden.
  • Vissa sök-API-fält och operatorer stöds inte för modeller i Unity Catalog. Detta kan minimeras genom att anropa sök-API:er med hjälp av filter som stöds och genomsöka resultaten. Följande är några exempel:
    • Parametern order_by stöds inte i search_model_versions eller search_registered_models klient-API:er.
    • Taggbaserade filter (tags.mykey = 'myvalue') stöds inte för search_model_versions eller search_registered_models.
    • Andra operatorer än exakt likhet (till exempel LIKE, ILIKE, !=) stöds inte för search_model_versions eller search_registered_models.
    • Sökning efter registrerade modeller efter namn (till exempel MlflowClient().search_registered_models(filter_string="name='main.default.mymodel'") stöds inte. Om du vill hämta en viss registrerad modell efter namn använder du get_registered_model.
  • E-postaviseringar och kommentarsdiskussionstrådar på registrerade modeller och modellversioner stöds inte i Unity Catalog.
  • Aktivitetsloggen stöds inte för modeller i Unity Catalog. Du kan dock spåra aktivitet på modeller i Unity Catalog med hjälp av granskningsloggar.
  • search_registered_models kan returnera inaktuella resultat för modeller som delas via Deltadelning. För att säkerställa de senaste resultaten använder du Databricks CLI eller SDK för att lista modellerna i ett schema.