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 MLflowazureml-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 eenMlflowClient
object maken. In deze zelfstudie wordt het objectclient
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_timestamp
last_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>/latest
om 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 Staging
opgeslagen.
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 Archived
moet 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.