Modellenregisters beheren in Azure Machine Learning met MLflow

Azure Machine Learning ondersteunt MLflow voor modelbeheer wanneer deze is verbonden met een werkruimte. Een dergelijke benadering is een handige manier om de volledige levenscyclus van het model te ondersteunen voor gebruikers die bekend zijn met de MLFlow-client. In het volgende artikel worden de verschillende mogelijkheden beschreven en hoe deze zich verhoudt tot andere opties.

Vereisten

  • Installeer het MLflow SDK-pakket mlflow en de Azure Machine Learning-invoegtoepassing voor MLflow azureml-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 mogelijkheden voor tracering en logboekregistratie van MLflow nodig hebben zonder de volledige suite met functies, waaronder implementaties, te importeren.

  • Een Azure Machine Learning-werkruimte. U kunt er een maken door de zelfstudie Machine Learning-resources maken te volgen.

  • Als u externe tracering uitvoert (dat wil gezegd, experimenten bijhouden 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.

  • U ziet dat organisatieregisters niet worden ondersteund voor modelbeheer met MLflow.

  • Sommige bewerkingen kunnen rechtstreeks worden uitgevoerd met behulp van de Fluent API (mlflow.<method>MLflow). Anderen moeten echter mogelijk een MLflow-client maken, waarmee kan worden gecommuniceerd met Azure Machine Learning in het MLflow-protocol. U kunt als volgt een MlflowClient object maken. In deze zelfstudie wordt het object client gebruikt om te verwijzen naar een dergelijke MLflow-client.

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Nieuwe modellen registreren in het register

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 sectie worden meerdere manieren uitgelegd om modellen in het register te registreren met behulp van de MLflow SDK.

Modellen maken op een bestaande uitvoering

Als u een MLflow-model hebt dat is vastgelegd in een uitvoering en u het wilt registreren in een register, gebruikt u de uitvoerings-id en het pad waar het model is geregistreerd. Zie Experimenten beheren en uitvoeringen uitvoeren met MLflow om te weten hoe u deze informatie opvraagt als u deze niet hebt.

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

U wordt aangeraden modellen te registreren bij uitvoeringen of de methode mlflow.<flavor>.log_model te gebruiken vanuit de uitvoering, omdat de herkomst van de taak die de asset heeft gegenereerd, wordt bijgehouden.

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. Hiervoor kunt u het URI-schema file://path/to/model gebruiken om MLflow-modellen te registreren die zijn opgeslagen in het lokale bestandssysteem. Laten we een eenvoudig model maken en Scikit-Learn opslaan in 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 methode save_model() werkt op dezelfde manier als log_model(). Terwijl log_model() het model wordt opgeslagen in een actieve uitvoering, save_model() wordt het lokale bestandssysteem gebruikt om het model op te slaan.

U kunt het model nu registreren via het lokale pad:

import os

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

Query's uitvoeren op modelregisters

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 sectie worden meerdere manieren uitgelegd om dit te bereiken.

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. In het volgende voorbeeld worden alle namen van het model afgedrukt:

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

Gebruiken order_by om te bestellen op basis van een specifieke eigenschap, zoals name, version, en creation_timestamplast_updated_timestamp:

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

Notitie

MLflow 2.0 advies: In oudere versies van Mlflow (<2.0) gebruikt u in plaats daarvan de methode MlflowClient.list_registered_models() .

Specifieke versies van het model ophalen

Met de search_registered_models() opdracht wordt het modelobject opgehaald, dat alle modelversies bevat. Als u echter de laatst geregistreerde modelversie van een bepaald model wilt ophalen, kunt u het volgende gebruiken get_registered_model:

client.get_registered_model(model_name)

Als u een specifieke versie van het model nodig hebt, kunt u dit aangeven:

client.get_model_version(model_name, version=2)

Modellen laden uit het register

U kunt modellen rechtstreeks vanuit het register laden om de modellenobjecten te herstellen die zijn geregistreerd. Gebruik de functies mlflow.<flavor>.load_model() of mlflow.pyfunc.load_model() geef de URI aan van het model dat u wilt laden met behulp van de volgende syntaxis:

  • models:/<model-name>/latestom de laatste versie van het model te laden.
  • models:/<model-name>/<version-number>, om een specifieke versie van het model te laden.
  • models:/<model-name>/<stage-name>, als u een specifieke versie in een bepaalde fase voor een model wilt laden. Bekijk modelfasen voor meer informatie.

Tip

Bekijk werkstromen voor het laden van MLflow-modellen voor meer informatie over het verschil tussen mlflow.<flavor>.load_model() enmlflow.pyfunc.load_model().

Modelfasen

MLflow ondersteunt de fasen van het model voor het beheren van de levenscyclus van het model. De versie van het model kan van de ene fase naar de andere worden overgestapt. Fasen worden toegewezen aan de versie van een model (in plaats van modellen), wat betekent dat een bepaald model meerdere versies in verschillende fasen kan hebben.

Belangrijk

Fasen kunnen alleen worden geopend met behulp van de MLflow SDK. Ze worden niet weergegeven in de Azure ML Studio-portal en kunnen niet worden opgehaald met azure ML SDK, Azure ML CLI of Azure ML REST API. Het maken van implementatie vanuit de fase van een bepaald model wordt momenteel niet ondersteund.

Query's uitvoeren op modelfasen

U kunt de MLflow-client gebruiken om alle mogelijke fasen van een model te controleren:

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

U kunt zien welke versie van het model zich in elke fase bevindt door het model op te halen uit het register. In het volgende voorbeeld wordt de versie van het model momenteel in de fase Stagingopgeslagen.

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

Notitie

Meerdere versies kunnen zich op hetzelfde moment in Mlflow bevinden, maar deze methode retourneert de nieuwste versie (grotere versie) allemaal.

Waarschuwing

Fasenamen zijn hoofdlettergevoelig.

Overgangsmodellen

Het overzetten van de versie van een model naar een bepaalde fase kan worden uitgevoerd met behulp van de MLflow-client.

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

Als er in die specifieke fase een bestaande modelversie was, blijft deze standaard aanwezig. Daarom wordt het niet vervangen als de versies van meerdere modellen tegelijkertijd in dezelfde fase kunnen zijn. U kunt ook aangeven archive_existing_versions=True dat MLflow de versie van het bestaande model naar de fase Archivedmoet 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. U ziet dat u voor deze methode alle bibliotheken en afhankelijkheden moet hebben die al zijn geïnstalleerd in de omgeving waarmee u werkt.

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

Modellen bewerken en verwijderen

Geregistreerde modellen bewerken wordt ondersteund in zowel Mlflow als Azure ML. Er zijn echter enkele verschillen die belangrijk zijn om op te merken:

Waarschuwing

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

Modellen bewerken

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

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

Als u tags wilt bewerken, moet u de methode set_model_version_tag gebruiken en remove_model_version_tag:

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

Een tag verwijderen:

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

De versie van een model verwijderen

U kunt elke modelversie in het register verwijderen met behulp van de MLflow-client, zoals wordt weergegeven in het volgende voorbeeld:

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

Notitie

Azure Machine Learning biedt geen ondersteuning voor het verwijderen van de hele modelcontainer. Als u hetzelfde wilt bereiken, moet u alle modelversies van een bepaald model verwijderen.

Ondersteuningsmatrix voor het beheren van modellen met MLflow

De MLflow-client biedt verschillende methoden voor het ophalen en beheren van modellen. In de volgende tabel ziet u welke van deze methoden momenteel worden ondersteund in MLflow wanneer deze zijn verbonden met Azure ML. Het vergelijkt het ook met andere modellenbeheermogelijkheden in Azure ML.

Functie MLflow Azure ML met MLflow Azure ML CLIv2 Azure ML 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

Notitie

  • 1 Gebruik URI's met indeling runs:/<ruin-id>/<path>.
  • 2 Gebruik URI's met indeling azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Geregistreerde modellen zijn onveranderbare objecten in Azure ML.
  • 4 Zoekvak gebruiken in Azure ML Studio. Gedeeltelijke overeenkomst ondersteund.
  • 5 Gebruik registers om modellen over verschillende werkruimten te verplaatsen terwijl herkomst behouden blijft.

Volgende stappen