Verwalten von Modellregistrierungen in Azure Machine Learning mit MLflow
Azure Machine Learning unterstützt MLflow für die Modellverwaltung, wenn sie mit einem Arbeitsbereich verbunden ist. Dieser Ansatz stellt für Benutzer*innen, die mit dem MLFlow-Client vertraut sind, eine bequeme Möglichkeit dar, den gesamten Lebenszyklus des Modells zu unterstützen. Der folgende Artikel beschreibt die verschiedenen Möglichkeiten und wie sie im Vergleich zu anderen Optionen abschneiden.
Voraussetzungen
Installieren Sie das Mlflow SDK-Paket
mlflow
und das Azure Machine Learning-Plug-In für MLflowazureml-mlflow
.pip install mlflow azureml-mlflow
Tipp
Sie können auch das Paket
mlflow-skinny
verwenden. Dabei handelt es sich um ein abgespecktes MLflow-Paket ohne SQL-Speicher, Server, Benutzeroberfläche oder Data Science-Abhängigkeiten.mlflow-skinny
wird für diejenigen empfohlen, die in erster Linie die Funktionen für Nachverfolgung und Protokollierung benötigen und nicht sämtliche Funktionen von MLflow (einschließlich Bereitstellungen) importieren möchten.Ein Azure Machine Learning-Arbeitsbereich. Sie können eines erstellen, indem Sie das Tutorial „Erstellen von Ressourcen für maschinelles Lernen“ ausführen.
Wenn Sie eine Remote-Nachverfolgung durchführen (d.h. Nachverfolgung von Experimenten, die außerhalb von Azure Machine Learning ausgeführt werden), konfigurieren Sie MLflow so, dass es auf den Nachverfolgungs-URI Ihres Azure Machine Learning-Arbeitsbereichs verweist. Weitere Informationen zum Herstellen einer Verbindung zwischen MLflow und dem Arbeitsbereich finden Sie unter Konfigurieren von MLflow für Azure Machine Learning.
Beachten Sie, dass Organisationsregistrierungen für die Modellverwaltung mit MLflow nicht unterstützt werden.
Einige Vorgänge können direkt mit der Fluent-API (
mlflow.<method>
) von MLflow ausgeführt werden. Für andere ist jedoch möglicherweise die Erstellung eines MLflow-Clients erforderlich, der die Kommunikation mit Azure Machine Learning im MLflow-Protokoll ermöglicht. Sie können wie folgt einMlflowClient
-Objekt erstellen. In diesem Tutorial wird dasclient
-Objekt verwendet, um auf den MLflow-Client zu verweisen.import mlflow client = mlflow.tracking.MlflowClient()
Eintragen neuer Modelle im Register
Die Modellregistrierung bietet eine einfache und zentrale Möglichkeit zum Verwalten von Modellen in einem Arbeitsbereich. Jeder Arbeitsbereich verfügt über eine eigene unabhängige Modellregistrierung. Im folgenden Abschnitt werden mehrere Möglichkeiten erläutert, wie Sie Modelle mithilfe des MLflow SDK in der Registrierung registrieren können.
Erstellen von Modellen aus einer bestehenden Ausführung
Wenn Sie ein MLflow-Modell innerhalb einer Ausführung protokolliert haben und es in einer Registrierung registrieren möchten, verwenden Sie dazu die Ausführungs-ID und den Pfad, unter dem das Modell protokolliert wurde. Unter Verwalten von Experimenten und Ausführungen mit MLflow erfahren Sie, wie Sie diese Informationen abfragen können, wenn Sie sie nicht haben.
mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)
Hinweis
Modelle können nur im Arbeitsbereich in der Registrierung registriert werden, in dem auch die Ausführung nachverfolgt wurde. Arbeitsbereichsübergreifende Vorgänge werden derzeit von Azure Machine Learning nicht unterstützt.
Tipp
Es wird empfohlen, Modelle aus Ausführungen zu registrieren oder die Methode mlflow.<flavor>.log_model
innerhalb der Ausführung zu verwenden, da die Herkunft des Auftrags, der das Objekt generiert hat, beibehalten wird.
Erstellen von Modellen aus Objekten
Wenn Sie einen Ordner mit einem MLModel MLflow-Modell haben, können Sie es direkt registrieren. Es ist nicht notwendig, dass das Modell immer im Kontext einer Ausführung steht. Zu diesem Zweck können Sie das URI-Schema file://path/to/model
verwenden, um MLflow-Modelle zu registrieren, die im lokalen Dateisystem gespeichert sind. Lassen Sie uns ein einfaches Modell unter Verwendung von Scikit-Learn
erstellen, und es im MLflow-Format im lokalen Speicher speichern:
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")
Tipp
Die Methode save_model()
funktioniert auf die gleiche Weise wie log_model()
. Während log_model()
das Modell innerhalb einer aktiven Ausführung speichert, verwendet save_model()
das lokale Dateisystem zum Speichern des Modells.
Sie können das Modell nun über den lokalen Pfad registrieren:
import os
model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")
Abfragen von Modellregistrierungen
Sie können das MLflow SDK verwenden, um in der Registrierung registrierte Modelle abzufragen und nach diesen zu suchen. Im folgenden Abschnitt werden mehrere Möglichkeiten erläutert, die Ihnen hierfür zur Verfügung stehen.
Abfragen aller Modelle des Registers
Sie können alle registrierten Modelle in der Registrierung mithilfe des MLflow-Clients abfragen. Das folgende Beispiel druckt alle Modellnamen aus:
for model in client.search_registered_models():
print(f"{model.name}")
Verwenden Sie order_by
, um nach einer bestimmten Eigenschaft wie name
, version
, creation_timestamp
und last_updated_timestamp
zu sortieren:
client.search_registered_models(order_by=["name ASC"])
Hinweis
MLflow 2.0-Empfehlung: Verwenden Sie in älteren Versionen von MLflow (<2.0) stattdessen die Methode MlflowClient.list_registered_models()
.
Abrufen bestimmter Versionen des Modells
Der Befehl search_registered_models()
ruft das Modellobjekt ab, das alle Modellversionen enthält. Wenn Sie jedoch die letzte registrierte Modellversion eines bestimmten Modells abrufen möchten, dann verwenden Sie get_registered_model
:
client.get_registered_model(model_name)
Wenn Sie eine bestimmte Version des Modells benötigen, können Sie dies angeben:
client.get_model_version(model_name, version=2)
Laden von Modellen aus der Registrierung
Sie können Modelle direkt aus der Registrierung laden, um die protokollierten Modellobjekte wiederherzustellen. Verwenden Sie die Funktion mlflow.<flavor>.load_model()
oder mlflow.pyfunc.load_model()
. Geben Sie dabei den URI des zu ladenden Modells mit der folgenden Syntax an:
models:/<model-name>/latest
zum Laden der letzten Modellversionmodels:/<model-name>/<version-number>
zum Laden einer bestimmten Modellversionmodels:/<model-name>/<stage-name>
zum Laden einer bestimmten Version in einer bestimmten Phase für ein Modell Ausführliche Informationen finden Sie unter Modellphasen.
Tipp
Wenn Sie mehr über den Unterschied zwischen mlflow.<flavor>.load_model()
und mlflow.pyfunc.load_model()
erfahren möchten, sehen Sie sich Workflows zum Laden von MLflow-Modellen an.
Modellphasen
MLflow unterstützt Modellphasen, um den Lebenszyklus des Modells zu verwalten. Die Version des Modells kann von einer Phase zur nächsten übergehen. Phasen werden der Modellversion zugewiesen (anstelle von Modellen), was bedeutet, dass ein bestimmtes Modell mehrere Versionen in verschiedenen Phasen haben kann.
Wichtig
Auf Phasen kann nur über das MLflow SDK zugegriffen werden. Sie werden nicht im Azure ML Studio-Portal angezeigt und können auch nicht über Azure ML SDK, Azure ML CLI oder Azure ML REST API abgerufen werden. Bereitstellung aus einer bestimmten Modellphase zu erstellen wird derzeit nicht unterstützt.
Abfragen von Modellphasen
Sie können den MLflow-Client verwenden, um alle möglichen Phasen eines Modells zu ermitteln:
client.get_model_version_stages(model_name, version="latest")
Sie können sehen, welche Modellversionen sich in den einzelnen Phasen befinden, indem Sie das Modell aus dem Register abrufen. Das folgende Beispiel ruft die Modellversion ab, die sich gerade in der Phase Staging
befindet.
client.get_latest_versions(model_name, stages=["Staging"])
Hinweis
In Mlflow können sich mehrere Versionen gleichzeitig in der gleichen Phase befinden. Diese Methode gibt jedoch die neueste Version (größere Version) unter allen Versionen zurück.
Warnung
Bei den Phasennamen muss auf Groß- und Kleinschreibung geachtet werden.
Modelle im Übergang
Der Übergang einer Modellversion zu einer bestimmten Phase kann mit dem MLflow-Client erfolgen.
client.transition_model_version_stage(model_name, version=3, stage="Staging")
Wenn es in dieser Phase bereits eine Modellversion gibt, wird diese standardmäßig beibehalten. Sie wird also nicht ersetzt, da sich mehrere Modellversionen gleichzeitig in derselben Phase befinden können. Alternativ können Sie auch archive_existing_versions=True
anweisen, dass MLflow die Version des vorhandenen Modells in die Phase Archived
verschieben soll.
client.transition_model_version_stage(
model_name, version=3, stage="Staging", archive_existing_versions=True
)
Laden von Modellen aus Phasen
Sie können ein Modell in einer bestimmten Phase direkt aus Python laden, indem Sie die Funktion load_model
und das folgende URI-Format verwenden. Beachten Sie, dass Sie für den Erfolg dieser Methode alle Bibliotheken und Abhängigkeiten bereits in der Umgebung, in der Sie arbeiten, installiert haben müssen.
model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")
Bearbeiten und Löschen von Modellen
Das Bearbeiten registrierter Modelle wird sowohl in Mlflow als auch in Azure ML unterstützt. Es gibt jedoch einige wichtige Unterschiede, die beachtet werden sollten:
Warnung
Das Umbenennen von Modellen wird in Azure Machine Learning nicht unterstützt, da Modellobjekte unveränderlich sind.
Bearbeiten von Modellen
Sie können die Modellbeschreibung und die Tags eines Modells mit Hilfe von Mlflow bearbeiten:
client.update_model_version(model_name, version=1, description="My classifier description")
Um Tags zu bearbeiten, müssen Sie die Methoden set_model_version_tag
und remove_model_version_tag
verwenden:
client.set_model_version_tag(model_name, version="1", key="type", value="classification")
Entfernen eines Tags:
client.delete_model_version_tag(model_name, version="1", key="type")
Löschen einer Modellversion
Sie können jede Modellversion im Register mit dem MLflow-Client löschen, wie im folgenden Beispiel gezeigt wird:
client.delete_model_version(model_name, version="2")
Hinweis
Azure Machine Learning unterstützt nicht das Löschen des gesamten Modell-Containers. Um das Gleiche zu erreichen, müssen Sie alle Modellversionen eines bestimmten Modells löschen.
Unterstützungsmatrix für die Verwaltung von Modellen mit MLflow
Der MLflow-Client stellt mehrere Methoden zum Abrufen und Verwalten von Modellen zur Verfügung. Die folgende Tabelle zeigt, welche dieser Methoden derzeit in MLflow unterstützt werden, wenn eine Verbindung zu Azure ML besteht. Er vergleicht sie auch mit anderen Modellverwaltungsfunktionen in Azure ML.
Funktion | MLflow | Azure ML mit MLflow | Azure ML CLIv2 | Azure ML Studio |
---|---|---|---|---|
Registrieren von Modellen im MLflow-Format | ✓ | ✓ | ✓ | ✓ |
Registrieren von Modellen, die nicht im MLflow-Format vorliegen | ✓ | ✓ | ||
Registrieren von Modellen aus Laufergebnissen/Artefakten | ✓ | ✓1 | ✓2 | ✓ |
Registrieren von Modellen anhand von Ausgaben von Ausführungen/Artefakten in einem anderen Nachverfolgungsserver/Arbeitsbereich | ✓ | ✓5 | ✓5 | |
Suchen/Auflisten registrierter Modelle | ✓ | ✓ | ✓ | ✓ |
Abrufen von Informationen zu den registrierten Versionen des Modells | ✓ | ✓ | ✓ | ✓ |
Bearbeiten der Versionsbeschreibung des registrierten Modells | ✓ | ✓ | ✓ | ✓ |
Bearbeiten der Versionstags des registrierten Modells | ✓ | ✓ | ✓ | ✓ |
Umbenennen registrierter Modelle | ✓ | 3 | 3 | 3 |
Löschen eines registrierten Modells (Container) | ✓ | 3 | 3 | 3 |
Löschen der Version eines registrierten Modells | ✓ | ✓ | ✓ | ✓ |
Verwalten von MLflow-Modellphasen | ✓ | ✓ | ||
Suchen registrierter Modelle nach Name | ✓ | ✓ | ✓ | ✓4 |
Suchen registrierter Modelle mit Zeichenfolgenvergleichen LIKE und ILIKE |
✓ | ✓4 | ||
Suchen von registrierten Modellen nach Tag | ✓4 | |||
Unterstützung von Organisationsregistrierungen | ✓ | ✓ |
Hinweis
- 1 Verwenden von URIs im Format
runs:/<ruin-id>/<path>
. - 2 Verwenden von URIs im Format
azureml://jobs/<job-id>/outputs/artifacts/<path>
. - 3 Registrierte Modelle sind unveränderliche Objekte in Azure ML.
- 4 Verwenden des Suchfeldes in Azure ML Studio. Teilweise Übereinstimmung wird unterstützt
- 5 Verwenden Sie Registrierungen, um Modelle über verschiedene Arbeitsbereiche hinweg zu verschieben und gleichzeitig die Datenherkunft beizubehalten.
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für