Hantera modellregister i Azure Machine Learning med MLflow
Azure Machine Learning stöder MLflow för modellhantering när det är anslutet till en arbetsyta. En sådan metod är ett bekvämt sätt att stödja hela modelllivscykeln för användare som är bekanta med MLFlow-klienten. I följande artikel beskrivs de olika funktionerna och hur de jämförs med andra alternativ.
Förutsättningar
Installera MLflow SDK-paketet
mlflow
och Azure Machine Learning-plugin-programmet för MLflowazureml-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 MLflows spårnings- och loggningsfunktioner utan att importera hela sviten med funktioner, inklusive distributioner.En Azure Machine Learning-arbetsyta. Du kan skapa en genom att följa självstudien Skapa maskininlärningsresurser.
Om du utför fjärrspårning (d.v.s. spårningsexperiment som körs utanför Azure Machine Learning) konfigurerar du MLflow så att det pekar på spårnings-URI:n för din Azure Machine Learning-arbetsyta. Mer information om hur du ansluter MLflow till din arbetsyta finns i Konfigurera MLflow för Azure Machine Learning.
Observera att organisationsregister inte stöds för modellhantering med MLflow.
Vissa åtgärder kan köras direkt med hjälp av MLflow fluent API (
mlflow.<method>
). Andra kan dock behöva skapa en MLflow-klient som gör det möjligt att kommunicera med Azure Machine Learning i MLflow-protokollet. Du kan skapa ettMlflowClient
objekt på följande sätt. I den här självstudien används objektetclient
för att referera till en sådan MLflow-klient.import mlflow client = mlflow.tracking.MlflowClient()
Registrera nya modeller i registret
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 beskrivs flera sätt att registrera modeller i registret med MLflow SDK.
Skapa modeller från en befintlig körning
Om du har en MLflow-modell loggad inuti en körning och du vill registrera den i ett register använder du körnings-ID:t och sökvägen där modellen loggades. Se Hantera experiment och körningar med MLflow för att veta hur du frågar efter den här informationen om du inte har den.
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 inte för tillfället i Azure Machine Learning.
Dricks
Vi rekommenderar att du registrerar modeller från körningar eller använder metoden mlflow.<flavor>.log_model
inifrån körningen eftersom den behåller 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 att göra det kan du använda URI-schemat file://path/to/model
för att registrera MLflow-modeller som lagras i det lokala filsystemet. Nu ska vi skapa en enkel modell med Scikit-Learn
och spara den i MLflow-format i den lokala lagringen:
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()
. När log_model()
modellen sparas inuti på en aktiv körning save_model()
använder det lokala filsystemet för att spara modellen.
Nu kan du registrera modellen från 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")
Köra frågor mot modellregister
Du kan använda MLflow SDK för att fråga efter och söka efter modeller som är registrerade i registret. I följande avsnitt beskrivs flera sätt att uppnå det.
Köra frågor mot alla modeller i registret
Du kan köra frågor mot alla registrerade modeller i registret med hjälp av MLflow-klienten. Följande exempel skriver ut alla modellens namn:
for model in client.search_registered_models():
print(f"{model.name}")
Använd order_by
för att beställa efter en specifik egenskap som name
, version
, creation_timestamp
och last_updated_timestamp
:
client.search_registered_models(order_by=["name ASC"])
Kommentar
MLflow 2.0-rådgivning: I äldre versioner av Mlflow (<2.0) använder du metoden MlflowClient.list_registered_models()
i stället.
Hämta specifika versioner av modellen
Kommandot search_registered_models()
hämtar modellobjektet, som innehåller alla modellversioner. Men om du vill hämta den senaste registrerade modellversionen av en viss modell kan du använda get_registered_model
:
client.get_registered_model(model_name)
Om du behöver en specifik version av modellen kan du ange följande:
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 de modellobjekt som loggades. Använd funktionerna mlflow.<flavor>.load_model()
eller mlflow.pyfunc.load_model()
ange URI:n för den modell som du vill läsa in med hjälp av följande syntax:
models:/<model-name>/latest
, för att läsa in den senaste versionen av modellen.models:/<model-name>/<version-number>
, för att läsa in en specifik version av modellen.models:/<model-name>/<stage-name>
, för att läsa in en specifik version i en viss fas för en modell. Visa modellfaser för mer information.
Dricks
Om du vill veta mer om skillnaden mellan mlflow.<flavor>.load_model()
och mlflow.pyfunc.load_model()
kan du visa arbetsflöden för inläsning av MLflow-modeller.
Modellsteg
MLflow stöder modellens faser för att hantera modellens livscykel. Modellens version kan övergå från en fas till en annan. Faser tilldelas till en modells version (i stället för modeller) vilket innebär att en viss modell kan ha flera versioner i olika faser.
Viktigt!
Faser kan bara nås med MLflow SDK. De visas inte i Azure ML Studio-portalen och kan inte hämtas med varken Azure ML SDK, Azure ML CLI eller Azure ML REST API. Att skapa distribution från en viss modells fas stöds inte för tillfället.
Köra frågor mot modellfaser
Du kan använda MLflow-klienten för att kontrollera alla möjliga steg som en modell kan vara:
client.get_model_version_stages(model_name, version="latest")
Du kan se vilken modellversion som finns på varje fas genom att hämta modellen från registret. I följande exempel hämtas modellens version för närvarande i fasen Staging
.
client.get_latest_versions(model_name, stages=["Staging"])
Kommentar
Flera versioner kan vara i samma fas samtidigt i Mlflow, men den här metoden returnerar den senaste versionen (större version) bland dem alla.
Varning
Scennamn är skiftlägeskänsliga.
Övergångsmodeller
Övergången av en modells version till en viss fas kan göras med hjälp av MLflow-klienten.
client.transition_model_version_stage(model_name, version=3, stage="Staging")
Om det fanns en befintlig modellversion i just den fasen finns den som standard kvar där. Därför ersätts den inte eftersom flera modellversioner kan vara i samma fas samtidigt. Du kan också ange archive_existing_versions=True
att MLflow ska flytta den befintliga modellens version 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
ou kan läsa in en modell i en viss fas direkt från Python med hjälp av load_model
funktionen och följande URI-format. Observera att för att den här metoden ska lyckas måste du ha alla bibliotek och beroenden redan installerade i den miljö som du arbetar på.
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 ML. Det finns dock vissa skillnader som är viktiga att märka:
Varning
Det går inte att byta namn på modeller i Azure Machine Learning eftersom modellobjekt är oföränderliga.
Redigera modeller
Du kan redigera modellens beskrivning och taggar från en modell med hjälp av Mlflow:
client.update_model_version(model_name, version=1, description="My classifier description")
Om du vill redigera taggar måste du använda metoden set_model_version_tag
och remove_model_version_tag
:
client.set_model_version_tag(model_name, version="1", key="type", value="classification")
Tar bort en tagg:
client.delete_model_version_tag(model_name, version="1", key="type")
Ta bort en modells version
Du kan ta bort valfri modellversion i registret med hjälp av MLflow-klienten, vilket visas i följande exempel:
client.delete_model_version(model_name, version="2")
Kommentar
Azure Machine Learning stöder inte borttagning av hela modellcontainern. För att uppnå samma sak måste du ta bort alla modellversioner från en viss modell.
Stödmatris för att hantera modeller med MLflow
MLflow-klienten exponerar flera metoder för att hämta och hantera modeller. Följande tabell visar vilka av dessa metoder som för närvarande stöds i MLflow när de är anslutna till Azure ML. Den jämför den också med andra modellers hanteringsfunktioner i Azure ML.
Funktion | MLflow | Azure ML med MLflow | Azure ML CLIv2 | Azure ML Studio |
---|---|---|---|---|
Registrera modeller i MLflow-format | ✓ | ✓ | ✓ | ✓ |
Registrera modeller som inte är i MLflow-format | ✓ | ✓ | ||
Registrera modeller från körningar 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 | ✓ | ✓ | ✓ | ✓ |
Byta 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ängparatörer LIKE och ILIKE |
✓ | ✔4 | ||
Sök efter registrerade modeller efter tagg | ✔4 | |||
Stöd för organisationsregister | ✓ | ✓ |
Kommentar
- 1 Använd URI:er 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 ML.
- 4 Använd sökrutan i Azure ML Studio. Partiell matchning stöds.
- 5 Använd register för att flytta modeller över olika arbetsytor samtidigt som ursprunget bevaras.