Delen via


Modellenregister beheren in Azure Machine Learning met MLflow

Azure Machine Learning ondersteunt MLflow voor modelbeheer wanneer deze is verbonden met een werkruimte. Deze benadering is een handige manier om de volledige levenscyclus van het model te ondersteunen voor gebruikers die bekend zijn met de MLFlow-client.

In dit artikel worden de mogelijkheden beschreven voor het beheren van een modelregister met MLflow en hoe deze methode zich verhoudt tot andere beheeropties.

Vereisten

  • Installeer het MLflow SDK-pakket mlflow en de Azure Machine Learning-invoegtoepassing azureml-mlflow voor MLflow:

    pip install mlflow azureml-mlflow
    

    Tip

    U kunt het mlflow-skinny pakket gebruiken. Dit is een lichtgewicht MLflow-pakket zonder SQL-opslag-, server-, UI- of data science-afhankelijkheden. mlflow-skinny wordt aanbevolen voor gebruikers die voornamelijk de MLflow-mogelijkheden voor tracering en logboekregistratie nodig hebben zonder de volledige suite met functies, inclusief implementaties, te importeren.

  • Een Azure Machine Learning-werkruimte. Zie de zelfstudie Machine Learning-resources maken om een werkruimte te maken. Controleer de toegangsmachtigingen die u nodig hebt om uw MLflow-bewerkingen uit te voeren in uw werkruimte.

  • Als u externe tracering uitvoert (dat wil weten, houdt u experimenten bij die buiten Azure Machine Learning worden uitgevoerd), configureert u MLflow zodat deze verwijst naar de tracerings-URI van uw Azure Machine Learning-werkruimte. Zie MLflow configureren voor Azure Machine Learning voor meer informatie over het verbinden van MLflow met uw werkruimte.

  • In de procedures in dit artikel wordt een client object gebruikt om te verwijzen naar de MLflow-client.

    Sommige bewerkingen kunnen rechtstreeks worden uitgevoerd met behulp van de vloeiende MLflow-API. mlflow.<method> Voor andere bewerkingen is een MLflow-client vereist om communicatie met Machine Learning in het MLflow-protocol mogelijk te maken. Met de volgende code wordt een MlflowClient object gemaakt:

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Beperkingen

  • Azure Machine Learning biedt geen ondersteuning voor het wijzigen van de naam van modellen.

  • Machine Learning biedt geen ondersteuning voor het verwijderen van de hele modelcontainer.

  • Organisatieregisters worden niet ondersteund voor modelbeheer met MLflow.

  • Modelimplementatie vanuit een specifieke modelfase wordt momenteel niet ondersteund in Machine Learning.

  • Bewerkingen tussen werkruimten worden momenteel niet ondersteund in Machine Learning.

Nieuwe modellen registreren

Het modellenregister biedt een handige en gecentraliseerde manier om modellen in een werkruimte te beheren. Elke werkruimte heeft een eigen onafhankelijk modelregister. In de volgende secties ziet u twee manieren waarop u modellen in het register kunt registreren met behulp van de MLflow SDK.

Modellen maken op een bestaande uitvoering

Als u een MLflow-model hebt geregistreerd in een uitvoering en u het wilt registreren in een register, gebruikt u de uitvoerings-id en het pad waar het model wordt geregistreerd. U kunt query's uitvoeren op deze informatie door de instructies te volgen in Experimenten beheren en uitgevoerd met MLflow.

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

Notitie

Modellen kunnen alleen worden geregistreerd bij het register in dezelfde werkruimte waarin de uitvoering is bijgehouden. Bewerkingen tussen werkruimten worden momenteel niet ondersteund in Azure Machine Learning.

Tip

Registreer modellen bij uitvoeringen of met behulp van de mlflow.<flavor>.log_model methode vanuit de uitvoering. Deze benadering behoudt herkomst van de taak die de asset heeft gegenereerd.

Modellen maken op assets

Als u een map met een MLModel MLflow-model hebt, kunt u deze rechtstreeks registreren. Het model hoeft niet altijd in de context van een uitvoering te zijn. Voor deze aanpak kunt u het URI-schema file://path/to/model gebruiken om MLflow-modellen te registreren die zijn opgeslagen in het lokale bestandssysteem.

Met de volgende code wordt een eenvoudig model gemaakt met behulp van het scikit-learn pakket en wordt het model opgeslagen in de MLflow-indeling in de lokale opslag:

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

Tip

De save_model() methode werkt op dezelfde manier als de log_model() methode. Terwijl de log_model() methode het model opslaat in een actieve uitvoering, gebruikt de save_model() methode het lokale bestandssysteem om het model op te slaan.

Met de volgende code wordt het model geregistreerd met behulp van het lokale pad:

import os

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

Querymodelregisters

U kunt de MLflow SDK gebruiken om query's uit te voeren en te zoeken naar modellen die zijn geregistreerd in het register. In de volgende secties ziet u twee manieren om een query uit te voeren op een model.

Query's uitvoeren op alle modellen in het register

U kunt een query uitvoeren op alle geregistreerde modellen in het register met behulp van de MLflow-client.

Met de volgende code worden de namen van alle modellen in het register afgedrukt:

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

Gebruik de order_by methode om de uitvoer te ordenen op basis van een specifieke eigenschap, zoals name, version, creation_timestampof last_updated_timestamp:

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

Notitie

Voor MLflow-versies ouder dan 2.0 gebruikt u in plaats daarvan de MlflowClient.list_registered_models() methode.

Specifieke modelversies ophalen

De search_registered_models() methode haalt het modelobject op, dat alle modelversies bevat. Als u de laatst geregistreerde modelversie voor een bepaald model wilt ophalen, kunt u de get_registered_model() methode gebruiken:

client.get_registered_model(model_name)

Gebruik de volgende code om een specifieke versie van een model op te halen:

client.get_model_version(model_name, version=2)

Modellen laden uit het register

U kunt modellen rechtstreeks vanuit het register laden om vastgelegde modelobjecten te herstellen. Gebruik voor deze taak de functies mlflow.<flavor>.load_model() of mlflow.pyfunc.load_model() geef de URI van het model aan die moeten worden geladen.

U kunt deze functies implementeren met de volgende syntaxis:

  • models:/<model-name>/latest: Laad de laatste versie van het model.
  • models:/<model-name>/<version-number>: Een specifieke versie van het model laden.
  • models:/<model-name>/<stage-name>: Laad een specifieke versie in een bepaalde fase voor een model. Zie Werken met modelfasen voor meer informatie.

Zie Werkstromen voor het laden van MLflow-modellen voor meer informatie over de verschillen tussen de functies mlflow.<flavor>.load_model() enmlflow.pyfunc.load_model().

Werken met modelfasen

MLflow ondersteunt fasen voor een model om de levenscyclus van het model te beheren. De modelversie kan van de ene fase naar de andere worden overgestapt. Fasen worden toegewezen aan specifieke versies voor een model. Een model kan meerdere versies in verschillende fasen hebben.

Belangrijk

Fasen kunnen alleen worden geopend met behulp van de MLflow SDK. Ze zijn niet zichtbaar in de Azure Machine Learning-studio. Fasen kunnen niet worden opgehaald met behulp van de Azure Machine Learning SDK, de Azure Machine Learning CLI of de Azure Machine Learning REST API. Implementatie vanuit een specifieke modelfase wordt momenteel niet ondersteund.

Querymodelfasen

De volgende code maakt gebruik van de MLflow-client om alle mogelijke fasen voor een model te controleren:

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

U kunt de modelversies voor elke modelfase zien door het model op te halen uit het register. Met de volgende code wordt de modelversie ophaalt die zich momenteel in de Staging fase bevindt:

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

Meerdere modelversies kunnen zich op hetzelfde moment in MLflow bevinden. In het vorige voorbeeld retourneert de methode de meest recente (meest recente) versie van alle versies voor de fase.

Belangrijk

In de MLflow SDK zijn fasenamen hoofdlettergevoelig.

Overgangsmodelversie

Het overzetten van een modelversie naar een bepaalde fase kan worden uitgevoerd met behulp van de MLflow-client:

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

Wanneer u een modelversie overgaat naar een bepaalde fase, blijven de bestaande versies ongewijzigd als de fase al andere modelversies heeft. Dit gedrag is standaard van toepassing.

Een andere methode is het instellen van de archive_existing_versions=True parameter tijdens de overgang. Met deze methode wordt MLflow geïnstrueerd om eventuele bestaande modelversies naar de fase Archivedte verplaatsen:

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

Modellen laden vanuit fasen

U kunt een model in een bepaalde fase rechtstreeks vanuit Python laden met behulp van de load_model functie en de volgende URI-indeling. Als u deze methode wilt voltooien, moeten alle bibliotheken en afhankelijkheden in uw werkomgeving worden geïnstalleerd.

Laad het model vanuit de Staging fase:

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

Modellen bewerken en verwijderen

Het bewerken van geregistreerde modellen wordt ondersteund in zowel MLflow als Azure Machine Learning, maar er zijn enkele belangrijke verschillen. In de volgende secties worden enkele opties beschreven.

Notitie

Het wijzigen van de naam van modellen wordt niet ondersteund in Azure Machine Learning omdat modelobjecten immmuteerbaar zijn.

Modelbeschrijving en tags bewerken

U kunt de beschrijving en tags van een model bewerken met behulp van de MLflow SDK:

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

Als u tags wilt bewerken, gebruikt u de set_model_version_tag en remove_model_version_tag methoden:

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

Als u een tag wilt verwijderen, gebruikt u de delete_model_version_tag methode:

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

Modelversie verwijderen

U kunt elke modelversie in het register verwijderen met behulp van de MLflow-client:

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

Notitie

Machine Learning biedt geen ondersteuning voor het verwijderen van de hele modelcontainer. Als u deze taak wilt uitvoeren, verwijdert u alle modelversies voor een bepaald model.

Ondersteunde mogelijkheden voor het beheren van modellen bekijken

De MLflow-client biedt verschillende methoden voor het ophalen en beheren van modellen. De volgende tabel bevat de methoden die momenteel worden ondersteund in MLflow wanneer deze zijn verbonden met Azure Machine Learning. De tabel vergelijkt ook MLflow met andere modelbeheermogelijkheden in Azure Machine Learning.


Functiebeschrijving
Alleen MLflow Machine Learning met MLflow Machine Learning CLI v2 Machine Learning Studio
Modellen registreren in MLflow-indeling
Modellen registreren die niet in MLflow-indeling zijn
Modellen registreren bij uitvoeringen/artefacten 1 2
Modellen registreren bij uitvoeringen/artefacten in een andere traceringsserver/werkruimte 5 5
Geregistreerde modellen zoeken/weergeven
Details ophalen van de versies van het geregistreerde model
Beschrijving van de versies van het geregistreerde model bewerken
De versiestags van het geregistreerde model bewerken
Naam van geregistreerde modellen wijzigen 3 3 3
Een geregistreerd model (container) verwijderen 3 3 3
De versie van een geregistreerd model verwijderen
MLflow-modelfasen beheren
Geregistreerde modellen zoeken op naam 4
Geregistreerde modellen doorzoeken met tekenreeksvergelijkers LIKE en ILIKE 4
Geregistreerde modellen zoeken op tag 4
Ondersteuning voor organisatieregisters

Tabelnoten:

  • 1 Gebruik Uniform Resource Identifiers (URI's) met de indeling runs:/<ruin-id>/<path>.
  • 2 Gebruik URI's met de indeling azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Geregistreerde modellen zijn onveranderbare objecten in Azure Machine Learning.
  • 4 Gebruik het zoekvak in Azure Machine Learning-studio. Gedeeltelijke overeenkomsten worden ondersteund.
  • 5 Gebruik registers om modellen over verschillende werkruimten te verplaatsen en herkomst te behouden.