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-programmetazureml-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 ettMlflowClient
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_timestamp
eller 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.