Hantera modellregister i Azure Mašinsko učenje med MLflow

Azure Mašinsko učenje stöder MLflow för modellhantering när det är anslutet till en arbetsyta. Den här metoden är ett bekvämt sätt att stödja hela modelllivscykeln för användare som är bekanta med MLFlow-klienten.

Den här artikeln beskriver funktioner för att hantera ett modellregister med MLflow och hur den här metoden jämförs med andra hanteringsalternativ.

Förutsättningar

  • Installera MLflow SDK-paketet mlflow och Azure Mašinsko učenje-plugin-programmet azureml-mlflow för MLflow:

    pip install mlflow azureml-mlflow
    

    Dricks

    Du kan använda mlflow-skinny paketet, som är ett enkelt MLflow-paket utan SQL-lagring, server, användargränssnitt eller datavetenskapsberoenden. mlflow-skinny rekommenderas för användare som främst behöver funktionerna för MLflow-spårning och loggning utan att importera hela sviten med funktioner, inklusive distributioner.

  • En Azure Machine Learning-arbetsyta. Information om hur du skapar en arbetsyta finns i självstudien Skapa maskininlärningsresurser. Granska de åtkomstbehörigheter du behöver för att utföra dina MLflow-åtgärder på din arbetsyta.

  • Om du utför fjärrspårning (d.v.s. spåra experiment som körs utanför Azure Mašinsko učenje) konfigurerar du MLflow så att det pekar på spårnings-URI:n för din Azure Mašinsko učenje-arbetsyta. Mer information om hur du ansluter MLflow till din arbetsyta finns i Konfigurera MLflow för Azure Mašinsko učenje.

  • Procedurerna i den här artikeln använder ett client objekt för att referera till MLflow-klienten.

    Vissa åtgärder kan köras direkt med hjälp av MLflow fluent API, mlflow.<method>. Andra åtgärder kräver en MLflow-klient för att aktivera kommunikation med Mašinsko učenje i MLflow-protokollet. Följande kod skapar ett MlflowClient objekt:

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Begränsningar

  • Azure Mašinsko učenje stöder inte namnbyte av modeller.

  • Mašinsko učenje stöder inte borttagning av hela modellcontainern.

  • Organisationsregister stöds inte för modellhantering med MLflow.

  • Modelldistribution från en specifik modellfas stöds för närvarande inte i Mašinsko učenje.

  • Åtgärder mellan arbetsytor stöds för närvarande inte i Mašinsko učenje.

Registrera nya modeller

Modellregistret erbjuder ett bekvämt och centraliserat sätt att hantera modeller på en arbetsyta. Varje arbetsyta har ett eget oberoende modellregister. I följande avsnitt visas två sätt att registrera modeller i registret med hjälp av MLflow SDK.

Skapa modeller från befintlig körning

Om du har loggat en MLflow-modell i en körning och vill registrera den i ett register använder du körnings-ID:t och sökvägen där modellen loggas. Du kan fråga efter den här informationen genom att följa anvisningarna i Hantera experiment och köra med MLflow.

mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)

Kommentar

Modeller kan bara registreras i registret på samma arbetsyta där körningen spårades. Åtgärder mellan arbetsytor stöds för närvarande inte i Azure Mašinsko učenje.

Dricks

Registrera modeller från körningar eller med hjälp mlflow.<flavor>.log_model av metoden inifrån körningen. Den här metoden bevarar ursprunget från jobbet som genererade tillgången.

Skapa modeller från tillgångar

Om du har en mapp med en MLModel MLflow-modell kan du registrera den direkt. Det finns ingen anledning för modellen att alltid finnas i kontexten för en körning. För den här metoden kan du använda URI-schemat file://path/to/model för att registrera MLflow-modeller som lagras i det lokala filsystemet.

Följande kod skapar en enkel modell med hjälp scikit-learn av paketet och sparar modellen i MLflow-format i lokal lagring:

from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

mlflow.sklearn.save_model(reg, "./regressor")

Dricks

Metoden save_model() fungerar på samma sätt som log_model() metoden. log_model() Metoden sparar modellen i en aktiv körning, save_model() men metoden använder det lokala filsystemet för att spara modellen.

Följande kod registrerar modellen med hjälp av den lokala sökvägen:

import os

model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")

Frågemodellregister

Du kan använda MLflow SDK för att fråga efter och söka efter modeller som är registrerade i registret. Följande avsnitt visar två sätt att fråga efter en modell.

Fråga alla modeller i registret

Du kan köra frågor mot alla registrerade modeller i registret med hjälp av MLflow-klienten.

Följande kod skriver ut namnen på alla modeller i registret:

for model in client.search_registered_models():
    print(f"{model.name}")

order_by Använd metoden för att ordna utdata efter en specifik egenskap, till exempel name, version, creation_timestampeller last_updated_timestamp:

client.search_registered_models(order_by=["name ASC"])

Kommentar

För MLflow-versioner som är tidigare än 2.0 använder du MlflowClient.list_registered_models() metoden i stället.

Hämta specifika modellversioner

Metoden search_registered_models() hämtar modellobjektet, som innehåller alla modellversioner. Om du vill hämta den senaste registrerade modellversionen för en viss modell kan du använda get_registered_model() metoden:

client.get_registered_model(model_name)

Om du vill hämta en specifik version av en modell använder du följande kod:

client.get_model_version(model_name, version=2)

Läsa in modeller från registret

Du kan läsa in modeller direkt från registret för att återställa loggade modellobjekt. För den här uppgiften använder du funktionerna mlflow.<flavor>.load_model() eller mlflow.pyfunc.load_model() anger modellens URI för att läsa in.

Du kan implementera dessa funktioner med följande syntax:

  • models:/<model-name>/latest: Läs in den senaste versionen av modellen.
  • models:/<model-name>/<version-number>: Läs in en specifik version av modellen.
  • models:/<model-name>/<stage-name>: Läs in en specifik version i en viss fas för en modell. Mer information finns i Arbeta med modellsteg.

Information om skillnaderna mellan funktionerna mlflow.<flavor>.load_model() och mlflow.pyfunc.load_model()finns i Arbetsflöden för inläsning av MLflow-modeller.

Arbeta med modellfaser

MLflow stöder faser för en modell för att hantera modellens livscykel. Modellversionen kan övergå från en fas till en annan. Faser tilldelas till specifika versioner för en modell. En modell kan ha flera versioner på olika faser.

Viktigt!

Faser kan endast nås med hjälp av MLflow SDK. De visas inte i Azure Mašinsko učenje Studio. Steg kan inte hämtas med hjälp av Azure Mašinsko učenje SDK, Azure Mašinsko učenje CLI eller Azure Mašinsko učenje REST API. Distribution från en specifik modellfas stöds inte för närvarande.

Frågemodellfaser

Följande kod använder MLflow-klienten för att kontrollera alla möjliga faser för en modell:

client.get_model_version_stages(model_name, version="latest")

Du kan se modellversionerna för varje modellsteg genom att hämta modellen från registret. Följande kod hämtar den modellversion som för närvarande är i Staging fasen:

client.get_latest_versions(model_name, stages=["Staging"])

Flera modellversioner kan vara i samma fas samtidigt i MLflow. I föregående exempel returnerar metoden den senaste (senaste) versionen bland alla versioner för fasen.

Viktigt!

I MLflow SDK är stegnamn skiftlägeskänsliga.

Övergångsmodellversion

Övergången av en modellversion till en viss fas kan göras med hjälp av MLflow-klienten:

client.transition_model_version_stage(model_name, version=3, stage="Staging")

När du övergår en modellversion till en viss fas, om fasen redan har andra modellversioner, förblir de befintliga versionerna oförändrade. Det här beteendet gäller som standard.

En annan metod är att ange parametern archive_existing_versions=True under övergången. Den här metoden instruerar MLflow att flytta befintliga modellversioner till fasen Archived:

client.transition_model_version_stage(
    model_name, version=3, stage="Staging", archive_existing_versions=True
)

Läsa in modeller från faser

Du kan läsa in en modell i en viss fas direkt från Python med hjälp load_model av funktionen och följande URI-format. För att den här metoden ska lyckas måste alla bibliotek och beroenden installeras i din arbetsmiljö.

Läs in modellen från Staging fasen:

model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")

Redigera och ta bort modeller

Redigering av registrerade modeller stöds i både MLflow och Azure Mašinsko učenje, men det finns några viktiga skillnader. I följande avsnitt beskrivs några alternativ.

Kommentar

Det går inte att byta namn på modeller i Azure Mašinsko učenje eftersom modellobjekt är oföränderliga.

Redigera modellbeskrivning och taggar

Du kan redigera en modells beskrivning och taggar med hjälp av MLflow SDK:

client.update_model_version(model_name, version=1, description="My classifier description")

Om du vill redigera taggar använder du set_model_version_tag metoderna och remove_model_version_tag :

client.set_model_version_tag(model_name, version="1", key="type", value="classification")

Om du vill ta bort en tagg använder du delete_model_version_tag metoden:

client.delete_model_version_tag(model_name, version="1", key="type")

Ta bort modellversion

Du kan ta bort valfri modellversion i registret med hjälp av MLflow-klienten:

client.delete_model_version(model_name, version="2")

Kommentar

Mašinsko učenje stöder inte borttagning av hela modellcontainern. För att uppnå den här uppgiften tar du bort alla modellversioner för en viss modell.

Granska funktioner som stöds för att hantera modeller

MLflow-klienten exponerar flera metoder för att hämta och hantera modeller. I följande tabell visas de metoder som för närvarande stöds i MLflow när de är anslutna till Azure Mašinsko učenje. Tabellen jämför även MLflow med andra modellers hanteringsfunktioner i Azure Mašinsko učenje.


Funktionsbeskrivning
Endast MLflow Mašinsko učenje med MLflow Mašinsko učenje CLI v2 Mašinsko učenje studio
Registrera modeller i MLflow-format
Registrera modeller som inte är i MLflow-format
Registrera modeller från körningar av utdata/artefakter 1 2
Registrera modeller från körningar av utdata/artefakter på en annan spårningsserver/arbetsyta 5 5
Sök/lista registrerade modeller
Hämtar information om den registrerade modellens versioner
Redigera beskrivningen av den registrerade modellens versioner
Redigera taggar för den registrerade modellens versioner
Byt namn på registrerade modeller 3 3 3
Ta bort en registrerad modell (container) 3 3 3
Ta bort en registrerad modells version
Hantera MLflow-modellsteg
Sök efter registrerade modeller efter namn 4
Sök efter registrerade modeller med hjälp av strängjämatare LIKE och ILIKE 4
Sök efter registrerade modeller efter tagg 4
Stöd för organisationsregister

Fotnoter för tabell:

  • 1 Använd URI:er (Uniform Resource Identifiers) med formatet runs:/<ruin-id>/<path>.
  • 2 Använd URI:er med formatet azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Registrerade modeller är oföränderliga objekt i Azure Mašinsko učenje.
  • 4 Använd sökrutan i Azure Mašinsko učenje Studio. Partiell matchning stöds.
  • 5 Använd register för att flytta modeller över olika arbetsytor och bevara ursprung.