Freigeben über


Verwalten einer Modellregistrierung 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, die mit dem MLFlow-Client vertraut sind, eine bequeme Möglichkeit dar, den gesamten Lebenszyklus des Modells zu unterstützen.

In diesem Artikel werden die Funktionen zum Verwalten einer Modellregistrierung mit MLflow beschrieben, und es wird erläutert, wie diese Methode im Vergleich zu anderen Verwaltungsoptionen abschneidet.

Voraussetzungen

  • Installieren Sie das MLflow-SDK-Paket mlflow und das Azure Machine Learning-Plug-In azureml-mlflow für MLflow wie folgt:

    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. Dieses Paket wird für diejenigen empfohlen, die in erster Linie die Funktionen für Nachverfolgung und Protokollierung benötigen und nicht sämtliche Features von MLflow (einschließlich Bereitstellungen) importieren möchten.

  • Erstellen Sie einen Azure Machine Learning-Arbeitsbereich. Informationen zum Erstellen eines Arbeitsbereichs finden Sie unter Erstellen von Ressourcen für die ersten Schritte. Überprüfen Sie, welche Zugriffsberechtigungen Sie benötigen, um Ihre MLflow-Vorgänge in Ihrem Arbeitsbereich auszuführen.

  • Wenn Sie eine Remotenachverfolgung durchführen, d. h. eine Nachverfolgung von Experimenten, die außerhalb von Azure Machine Learning ausgeführt werden, konfigurieren Sie MLflow so, dass auf den Nachverfolgungs-URI Ihres Azure Machine Learning-Arbeitsbereichs verwiesen wird. Weitere Informationen zum Herstellen einer Verbindung zwischen MLflow und dem Arbeitsbereich finden Sie unter Konfigurieren von MLflow für Azure Machine Learning.

  • Die Verfahren in diesem Artikel verwenden ein client-Objekt, um auf den MLflow-Client zu verweisen.

    Einige Vorgänge können direkt mit der Fluent-API (mlflow.<method>) von MLflow ausgeführt werden. Andere Vorgänge erfordern einen MLflow-Client, um die Kommunikation mit Machine Learning im MLflow-Protokoll zu ermöglichen. Der folgende Code erstellt ein MlflowClient-Objekt:

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Begrenzungen

  • Azure Machine Learning unterstützt das Umbenennen von Modellen nicht.

  • Machine Learning unterstützt nicht das Löschen des gesamten Modellcontainers.

  • Organisationsregistrierungen werden für die Modellverwaltung mit MLflow nicht unterstützt.

  • Die Modellbereitstellung in einer bestimmten Modellphase wird derzeit in Machine Learning nicht unterstützt.

  • Arbeitsbereichsübergreifende Vorgänge werden derzeit in Machine Learning nicht unterstützt.

Registrieren neuer Modelle

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. In den folgenden Abschnitten werden zwei Möglichkeiten zum Registrieren von Modellen in der Registrierung mithilfe des MLflow SDK veranschaulicht.

Erstellen von Modellen aus einer vorhandenen 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 wird. Sie können diese Informationen abfragen, indem Sie die Anweisungen unter Verwalten von Experimenten und Ausführungen mit MLflow befolgen.

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 in Azure Machine Learning nicht unterstützt.

Tipp

Registrieren Sie Modelle aus Ausführungen oder mithilfe der mlflow.<flavor>.log_model-Methode innerhalb der Ausführung. Dieser Ansatz behält die Herkunft des Auftrags bei, der die Ressource generiert hat.

Erstellen von Modellen aus Ressourcen

Wenn Sie einen Ordner mit dem MLflow-Modell MLModel haben, können Sie es direkt registrieren. Es ist nicht notwendig, dass das Modell immer im Kontext einer Ausführung steht. Bei diesem Ansatz können Sie das URI-Schema file://path/to/model verwenden, um MLflow-Modelle zu registrieren, die im lokalen Dateisystem gespeichert sind.

Der folgende Code erstellt ein einfaches Modell mithilfe des scikit-learn-Pakets und speichert das Modell im MLflow-Format im lokalen Speicher:

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 die Methode log_model(). Während die log_model()-Methode das Modell in einer aktiven Ausführung speichert, verwendet die save_model()-Methode das lokale Dateisystem, um das Modell zu speichern.

Der folgende Code registriert das Modell unter Verwendung des lokalen Pfads:

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. In den folgenden Abschnitten werden zwei Möglichkeiten zum Abfragen eines Modells veranschaulicht.

Abfragen aller Modelle in der Registrierung

Sie können alle registrierten Modelle in der Registrierung mithilfe des MLflow-Clients abfragen.

Der folgende Code gibt die Namen aller Modelle in der Registrierung aus:

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

Verwenden Sie die order_by-Methode, um die Ausgabe nach einer bestimmten Eigenschaft zu organisieren, z. B. name, version, creation_timestamp oder last_updated_timestamp:

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

Hinweis

Verwenden Sie für MLflow-Versionen vor 2.0 stattdessen die MlflowClient.list_registered_models()-Methode.

Abrufen bestimmter Modellversion

Die Methode search_registered_models() ruft das Modellobjekt ab, das alle Modellversionen enthält. Wenn Sie die letzte registrierte Modellversion eines bestimmten Modells abrufen möchten, können Sie die Methode get_registered_model() verwenden:

client.get_registered_model(model_name)

Verwenden Sie den folgenden Code, um eine bestimmte Version eines Modells abzurufen:

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 für diese Aufgabe die Funktion mlflow.<flavor>.load_model() oder mlflow.pyfunc.load_model(), und geben Sie den URI des zu ladenden Modells an.

Sie können diese Funktionen mit der folgenden Syntax implementieren:

  • models:/<model-name>/latest: Laden der letzten Modellversion
  • models:/<model-name>/<version-number>: Laden einer bestimmten Modellversion
  • models:/<model-name>/<stage-name>: Laden einer bestimmten Version in einer bestimmten Phase für ein Modell. Weitere Informationen finden Sie unter Arbeiten mit Modellphasen.

Informationen zu den Unterschieden zwischen den Funktionen mlflow.<flavor>.load_model() und mlflow.pyfunc.load_model() finden Sie unter Workflows zum Laden von MLflow-Modellen.

Arbeiten mit Modellphasen

MLflow unterstützt Modellphasen zum Verwalten des Modelllebenszyklus. Die Modellversion kann von einer Phase zur nächsten übergehen. Phasen werden bestimmten Versionen für ein Modell zugewiesen. Ein Modell kann mehrere Versionen in verschiedenen Phasen aufweisen.

Wichtig

Auf Phasen kann nur über das MLflow SDK zugegriffen werden. Sie sind in Azure Machine Learning Studio nicht sichtbar. Phasen können nicht mithilfe des Azure Machine Learning SDK, der Machine Learning CLI oder der Azure Machine Learning-REST-API abgerufen werden. Die Bereitstellung in einer bestimmten Modellphase wird derzeit nicht unterstützt.

Abfragen von Modellphasen

Der folgende Code verwendet den MLflow-Client, um alle möglichen Phasen für ein Modell zu überprüfen:

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

Sie können die Modellversionen für jede Modellphase anzeigen, indem Sie das Modell aus der Registrierung abrufen. Der folgende Code ruft die Modellversion ab, die sich gerade in der Phase Staging befindet:

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

Mehrere Modellversionen können sich in MLflow gleichzeitig in derselben Phase befinden können. Im vorherigen Beispiel gibt die Methode die aktuelle (neueste) Version unter allen Versionen für die Phase zurück.

Wichtig

Bei den Phasennamen im MLflow SDK muss die Groß- und Kleinschreibung berücksichtigt werden.

Durchführen des Übergangs zwischen Modellversionen

Der Übergang einer Modellversion zu einer bestimmten Phase kann mit dem MLflow-Client durchgeführt werden:

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

Wenn Sie den Übergang einer Modellversion zu einer bestimmten Phase durchführen und die Phase bereits über andere Modellversionen verfügt, bleiben die vorhandenen Versionen unverändert. Dieses Verhalten gilt standardmäßig.

Ein weiterer Ansatz besteht darin, den archive_existing_versions=True-Parameter während des Übergangs festzulegen. Dieser Ansatz weist MLflow an, vorhandene Modellversionen in die Phase Archived zu verschieben:

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. Damit diese Methode erfolgreich ausgeführt werden kann, müssen alle Bibliotheken und Abhängigkeiten in Ihrer Arbeitsumgebung installiert sein.

Laden Sie das Modell aus der Phase Staging:

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 Machine Learning unterstützt. Hier finden Sie jedoch einige wichtige Unterschiede: In den folgenden Abschnitten werden einige Optionen beschrieben.

Hinweis

Das Umbenennen von Modellen wird in Azure Machine Learning nicht unterstützt, da Modellobjekte unveränderlich sind.

Bearbeiten von Modellbeschreibung und Tags

Sie können die Modellbeschreibung und die Tags eines Modells mithilfe des MLflow SDK bearbeiten:

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

Verwenden Sie zum Bearbeiten von Tags die Methoden set_model_version_tag und remove_model_version_tag:

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

Verwenden Sie zum Entfernen eines Tags die Methode delete_model_version_tag:

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

Löschen einer Modellversion

Sie können jede Modellversion in der Registrierung mit dem MLflow-Client löschen:

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

Hinweis

Machine Learning unterstützt nicht das Löschen des gesamten Modellcontainers. Löschen Sie dazu alle Modellversionen für ein bestimmtes Modell.

Überprüfen der unterstützten Funktionen für das Verwalten von Modellen

Der MLflow-Client stellt mehrere Methoden zum Abrufen und Verwalten von Modellen zur Verfügung. In der folgenden Tabelle sind die derzeit in MLflow unterstützten Methoden aufgeführt, wenn eine Verbindung mit Azure Machine Learning besteht. Die Tabelle enthält auch einen Vergleich von MLflow mit anderen Modellverwaltungsfunktionen in Azure Machine Learning.


Featurebeschreibung
Nur MLflow Machine Learning mit MLflow Machine Learning CLI v2 Machine Learning Studio
Registrieren von Modellen im MLflow-Format
Registrieren von Modellen, die nicht im MLflow-Format vorliegen
Registrieren von Modellen aus Ausführungsausgaben/Artefakten 1 2
Registrieren von Modellen anhand von Ausführungsausgaben/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 von registrierten Modellen 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

Fußnoten zur Tabelle:

  • 1 Verwenden Sie URIs (Uniform Resource Identifiers) im Format runs:/<ruin-id>/<path>.
  • 2 Verwenden Sie URIs im Format azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Registrierte Modelle sind unveränderliche Objekte in Azure Machine Learning.
  • 4 Verwenden Sie das Suchfeld in Azure Machine Learning Studio. Teilweise Übereinstimmung wird unterstützt.
  • 5 Verwenden Sie Registrierungen, um Modelle über verschiedene Arbeitsbereiche hinweg zu verschieben und die Datenherkunft beizubehalten.