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-invoegtoepassingazureml-mlflow
voor MLflow als volgt: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. Dit pakket wordt aanbevolen voor gebruikers die voornamelijk de MLflow-mogelijkheden voor tracering en logboekregistratie nodig hebben zonder de volledige suite met functies te importeren, inclusief implementaties.Een Azure Machine Learning-werkruimte maken Zie Resources maken die u nodig hebt om aan de slag te gaan 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 wilt uitvoeren of experimenten wilt 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.
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 eenMlflowClient
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_timestamp
of 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 Archived
te 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.