Nachverfolgen von ML-Experimenten in Azure Databricks mit MLflow und Azure Machine Learning

MLflow ist eine Open-Source-Bibliothek zum Verwalten des Lebenszyklus Ihrer Machine Learning-Experimente. Sie können MLflow verwenden, um Azure Databricks in Azure Machine Learning zu integrieren und dadurch sicherzustellen, dass Sie beide Produkte optimal nutzen.

In diesem Artikel lernen Sie Folgendes:

Voraussetzungen

Beispielnotebooks

In Trainieren von Modellen in Azure Databricks und Bereitstellen der Modelle in Azure Machine Learning wird gezeigt, wie Sie Modelle in Azure Databricks trainieren und in Azure Machine Learning bereitstellen. Außerdem erfahren Sie, wie Sie mit Fällen umgehen, in denen Sie die Experimente und Modelle auch mit der MLflow-Instanz in Azure Databricks nachverfolgen und Azure Machine Learning für die Bereitstellung nutzen möchten.

Installieren von Bibliotheken

Navigieren Sie zum Installieren von Bibliotheken in Ihrem Cluster zur Registerkarte Bibliotheken, und klicken Sie auf Neue installieren.

mlflow with azure databricks

Geben Sie im Feld Paket den Namen „azureml-mlflow“ ein, und klicken Sie dann auf „Installieren“. Wiederholen Sie diesen Schritt bei Bedarf, um für Ihr Experiment zusätzliche Pakete in Ihrem Cluster zu installieren.

Azure DB install mlflow library

Nachverfolgen von Azure Databricks-Ausführungen mit MLflow

Azure Databricks kann auf zwei Arten konfiguriert werden, um Experimente mit MLflow nachzuverfolgen:

Standardmäßig ist duale Nachverfolgung für Sie konfiguriert, wenn Sie Ihren Azure Databricks-Arbeitsbereich verknüpft haben.

Duale Nachverfolgung von Azure Databricks und Azure Machine Learning

Wenn Sie Ihren Azure Databricks-Arbeitsbereich mit Ihrem Azure Machine Learning-Arbeitsbereich verknüpfen, können Sie Ihre Experimentdaten gleichzeitig im Azure Machine Learning-Arbeitsbereich und im Azure Databricks-Arbeitsbereich nachverfolgen. Dies wird als duale Nachverfolgung bezeichnet.

Warnung

Duale Nachverfolgung in einem Azure Machine Learning-Arbeitsbereich mit aktivierter privater Verbindung wird derzeit nicht unterstützt. Konfigurieren Sie stattdessen die exklusive Nachverfolgung in Ihrem Azure Machine Learning-Arbeitsbereich.

Warnung

Dual-Tracking in wird in Microsoft Azure operated by 21Vianet derzeit nicht unterstützt. Konfigurieren Sie stattdessen die exklusive Nachverfolgung in Ihrem Azure Machine Learning-Arbeitsbereich.

So können Sie den Azure Databricks-Arbeitsbereich mit einem neuen oder vorhandenen Azure Machine Learning-Arbeitsbereich verknüpfen:

  1. Melden Sie sich beim Azure-Portalan.
  2. Navigieren Sie zur Übersicht Ihres Azure Databricks-Arbeitsbereichs.
  3. Klicken Sie unten rechts auf Link Azure Machine Learning Arbeitsbereichs (Azure Machine Learning-Arbeitsbereich verknüpfen).

Link Azure DB and Azure Machine Learning workspaces

Nachdem Sie Ihren Azure Databricks-Arbeitsbereich mit Ihrem Azure Machine Learning-Arbeitsbereich verknüpft haben, wird die MLflow-Nachverfolgung automatisch so festgelegt, dass sie an allen folgenden Stellen nachverfolgt wird:

  • Verknüpfter Azure Machine Learning-Arbeitsbereich
  • Ursprünglicher ADB-Arbeitsbereich

Sie können dann MLflow in Azure Databricks auf die gleiche Weise verwenden, wie Sie es gewohnt sind. Im folgenden Beispiel legen Sie den Namen des Experiments wie normalerweise in Azure Databricks fest und beginnen mit der Protokollierung einiger Parameter:

import mlflow 

experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}" 
mlflow.set_experiment(experimentName) 

with mlflow.start_run():
   mlflow.log_param('epochs', 20)
   pass

Hinweis

Im Gegensatz zur Nachverfolgung unterstützen die Modellregistrierungen nicht die gleichzeitige Registrierung von Modellen in Azure Machine Learning und Azure Databricks. Es muss entweder die eine oder die andere Option verwendet werden. Weitere Informationen finden Sie im Abschnitt Registrieren von Modellen in der Registrierung mit MLflow.

Ausschließliches Nachverfolgen im Azure Machine Learning-Arbeitsbereich

Wenn Sie Ihre nachverfolgten Experimente an einem zentralen Ort verwalten möchten, können Sie für die MLflow-Überwachung festlegen, dass die Nachverfolgung nur in Ihrem Azure Machine Learning-Arbeitsbereich erfolgt. Diese Konfiguration hat den Vorteil, dass sie einen einfacheren Weg zur Bereitstellung mithilfe der Azure Machine Learning-Bereitstellungsoptionen ermöglicht.

Sie müssen den MLflow-Nachverfolgungs-URI so konfigurieren, dass er ausschließlich auf Azure Machine Learning verweist, wie es im folgenden Beispiel gezeigt wird:

Konfigurieren des Nachverfolgungs-URI

  1. Rufen Sie den Nachverfolgungs-URI für Ihren Arbeitsbereich ab:

    GILT FÜR:Azure CLI-ML-Erweiterungv2 (aktuell)

    1. Anmelden und Konfigurieren des Arbeitsbereichs:

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. Sie können den Nachverfolgungs-URI mithilfe des Befehls az ml workspace abrufen:

      az ml workspace show --query mlflow_tracking_uri
      
  2. Konfigurieren des Nachverfolgungs-URI:

    Anschließend verweist die Methode set_tracking_uri() den MLflow-Nachverfolgungs-URI auf diesen URI.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

    Tipp

    Beim Arbeiten in gemeinsam genutzten Umgebungen, wie z. B. einem Azure Databricks-Cluster, Azure Synapse Analytics-Cluster o. ä., ist es sinnvoll, die Umgebungsvariable MLFLOW_TRACKING_URI auf Clusterebene so festzulegen, dass der Nachverfolgungs-URI von MLflow automatisch so konfiguriert wird, dass er für alle im Cluster ausgeführten Sitzungen auf Azure Machine Learning verweist, anstatt dies auf sitzungsbezogen zu tun.

    Configure the environment variables in an Azure Databricks cluster

    Sobald die Umgebungsvariable konfiguriert ist, wird jedes Experiment, das in einem solchen Cluster ausgeführt wird, in Azure Machine Learning nachverfolgt.

Konfigurieren der Authentifizierung

Sobald die Nachverfolgung konfiguriert ist, müssen Sie auch konfigurieren, wie die Authentifizierung für den zugeordneten Arbeitsbereich erfolgen soll. Standardmäßig führt das Azure Machine Learning-Plug-In für MLflow eine interaktive Authentifizierung durch, indem es den Standardbrowser öffnet und Anmeldeinformationen anfordert. Weitere Informationen zu zusätzlichen Möglichkeiten zum Konfigurieren der Authentifizierung für MLflow in Azure Machine Learning-Arbeitsbereichen finden Sie unter Konfigurieren von MLflow für Azure Machine Learning: Konfigurieren der Authentifizierung.

Bei interaktiven Aufträgen, bei denen ein Benutzer mit der Sitzung verbunden ist, können Sie sich auf die interaktive Authentifizierung verlassen, sodass keine weiteren Maßnahmen erforderlich sind.

Warnung

Die interaktive Browserauthentifizierung blockiert die Codeausführung, wenn zur Eingabe von Anmeldeinformationen aufgefordert wird. Sie ist keine geeignete Option für die Authentifizierung in unbeaufsichtigten Umgebungen wie Trainingsaufträgen. Es wird empfohlen, einen anderen Authentifizierungsmodus zu konfigurieren.

In Szenarien, in denen eine unbeaufsichtigte Ausführung erforderlich ist, müssen Sie einen Dienstprinzipal für die Kommunikation mit Azure Machine Learning konfigurieren.

import os

os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"

Tipp

Beim Arbeiten in gemeinsam genutzten Umgebungen ist es ratsam, diese Umgebungsvariablen auf Compute-Ebene zu konfigurieren. Als bewährte Methode empfiehlt es sich, sie nach Möglichkeit als Geheimnisse in einer Azure Key Vault-Instanz zu verwalten. In Azure Databricks können Sie beispielsweise Geheimnisse in Umgebungsvariablen wie folgt in der Clusterkonfiguration verwenden: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}. Unter Verweisen auf ein Geheimnis in einer Umgebungsvariablen erfahren Sie, wie dies in Azure Databricks erfolgt, oder Sie beziehen Sie sich auf eine ähnliche Dokumentation für Ihre Plattform.

Namen des Experiments in Azure Machine Learning

Wenn MLflow so konfiguriert ist, dass es ausschließlich Experimente im Azure Machine Learning-Arbeitsbereich nachverfolgt, muss die Namenskonvention des Experiments der von Azure Machine Learning verwendeten folgen. In Azure Databricks werden Experimente mit dem Pfad benannt, unter dem das Experiment gespeichert ist, z. B. /Users/alice@contoso.com/iris-classifier. In Azure Machine Learning müssen Sie jedoch den Namen des Experiments direkt angeben. Wie im vorherigen Beispiel würde das gleiche Experiment direkt iris-classifier benannt werden:

mlflow.set_experiment(experiment_name="experiment-name")

Nachverfolgen von Parametern, Metriken und Artefakten

Sie können dann MLflow in Azure Databricks auf die gleiche Weise verwenden, wie Sie es gewohnt sind. Ausführliche Informationen finden Sie unter Protokollieren und Anzeigen von Metriken und Protokolldateien.

Protokollieren von Modellen mit MLflow

Nachdem Ihr Modell trainiert ist, können Sie es mithilfe der Methode mlflow.<model_flavor>.log_model() auf dem Nachverfolgungsserver protokollieren. <model_flavor> ist das Framework, das dem Modell zugeordnet ist. Erfahren Sie, welche Modellvarianten unterstützt werden. Im folgenden Beispiel wird ein Modell registriert, das mit der Spark-Bibliothek MLLib erstellt wurde:

mlflow.spark.log_model(model, artifact_path = "model")

Es ist erwähnenswert, dass die Variante spark nicht der Tatsache entspricht, dass wir ein Modell in einem Spark-Cluster trainieren, sondern aufgrund des verwendeten Trainingsframeworks (Sie können ein Modell perfekt mit TensorFlow mit Spark trainieren und daher wäre die zu verwendende Variante tensorflow).

Modelle werden innerhalb der nachverfolgten Ausführung protokolliert. Das bedeutet, dass Modelle entweder sowohl in Azure Databricks als auch in Azure Machine Learning (Standard) oder ausschließlich in Azure Machine Learning verfügbar sind, wenn Sie den Nachverfolgungs-URI so konfiguriert haben, dass er darauf verweist.

Wichtig

Beachten Sie, dass der Parameter registered_model_name hier nicht angegeben wurde. Lesen Sie den Abschnitt Registrieren von Modellen in der Registrierung mit MLflow, um weitere Informationen zu den Auswirkungen dieses Parameters und der Funktionsweise der Registrierung zu erhalten.

Registrieren von Modellen in der Registrierung mit MLflow

Im Gegensatz zur Nachverfolgung können Modellregistrierungen nicht gleichzeitig in Azure Databricks und Azure Machine Learning ausgeführt werden. Es muss entweder die eine oder die andere Option verwendet werden. Standardmäßig wird der Azure Databricks-Arbeitsbereich für Modellregistrierungen verwendet. Wenn Sie die MLflow-Nachverfolgung nicht so eingestellt haben, dass sie nur in Ihrem Azure Machine Learning-Arbeitsbereich nachverfolgt wird, dann ist die Modellregistrierung der Azure Machine Learning-Arbeitsbereich.

Wenn Sie die Standardkonfiguration verwenden, protokolliert die folgende Zeile ein Modell in den entsprechenden Ausführungen sowohl von Azure Databricks als auch von Azure Machine Learning, registriert es aber nur in Azure Databricks:

mlflow.spark.log_model(model, artifact_path = "model", 
                       registered_model_name = 'model_name')  
  • Falls kein registriertes Modell mit dem angegebenen Namen vorhanden ist, registriert die Methode ein neues Modell, erstellt die erste Version und gibt das MLflow-Objekt „ModelVersion“ zurück.

  • Wenn bereits ein registriertes Modell mit dem Namen vorhanden ist, erstellt die Methode eine neue Modellversion und gibt das Versionsobjekt zurück.

Verwenden der Azure Machine Learning-Registrierung mit MLflow

Wenn Sie die Azure Machine Learning-Modellregistrierung anstelle von Azure Databricks verwenden möchten, empfiehlt es sich, das MLflow-Tracking so festzulegen, dass es nur im Azure Machine Learning-Arbeitsbereich nachverfolgt wird. Damit wird die Unklarheit darüber beseitigt, wo die Modelle registriert werden, und die Komplexität wird vereinfacht.

Wenn Sie jedoch die Funktionen für die duale Nachverfolgung weiterhin nutzen, aber Modelle in Azure Machine Learning registrieren möchten, können Sie MLflow anweisen, Azure Machine Learning für die Modellregistrierung zu verwenden, indem Sie den URI für die MLflow-Modellregistrierung konfigurieren. Dieser URI hat genau das gleiche Format und den gleichen Wert wie der MLflow-Nachverfolgungs-URI.

mlflow.set_registry_uri(azureml_mlflow_uri)

Hinweis

Der Wert von azureml_mlflow_uri wurde auf die gleiche Weise ermittelt wie in Beschränken der MLflow-Nachverfolgung auf den Azure Machine Learning-Arbeitsbereich veranschaulicht.

Ein vollständiges Beispiel für dieses Szenario finden Sie im Beispiel Trainieren von Modellen in Azure Databricks und deren Bereitstellung in Azure Machine Learning.

Bereitstellen und Verwenden von in Azure Machine Learning registrierten Modellen

Modelle, die in Azure Machine Learning Service mit MLflow registriert sind, können wie folgt genutzt werden:

  • Ein Azure Machine Learning-Endpunkt (Echtzeit und Batch): Mit dieser Bereitstellung können Sie die Bereitstellungsfunktionen von Azure Machine Learning sowohl für Echtzeit- als auch für Batchrückschlüsse in Azure Container Instances (ACI), Azure Kubernetes (AKS) oder unseren MIR-Endpunkten (Managed Inference) nutzen.

  • MLFlow-Modellobjekte oder Pandas-UDFs, die in Azure Databricks-Notebooks in Streaming- oder Batchpipelines verwendet werden können.

Bereitstellen von Modellen für Azure Machine Learning-Endpunkte

Sie können das azureml-mlflow-Plug-In nutzen, um ein Modell in Ihrem Azure Machine Learning-Arbeitsbereich bereitzustellen. Auf der Seite Bereitstellen von MLflow-Modellen finden Sie ausführliche Informationen darüber, wie Modelle auf den verschiedenen Zielen bereitgestellt werden.

Wichtig

Modelle müssen in der Azure Machine Learning-Registrierung registriert werden, um sie bereitstellen zu können. Wenn Ihre Modelle bereits in der MLflow-Instanz in Azure Databricks registriert sind, müssen Sie sie erneut in Azure Machine Learning registrieren. Wenn dies bei Ihnen der Fall ist, sehen Sie sich das Beispiel Trainieren von Modellen in Azure Databricks und deren Bereitstellung in Azure Machine Learning an.

Bereitstellen von Modellen in ADB für die Batchbewertung mit UDFs

Sie können Azure Databricks-Cluster zur Batchbewertung auswählen. Mithilfe von Mlflow können Sie jedes Modell aus der Registrierung auflösen, mit der Sie verbunden sind. Dazu stehen in der Regel die beiden folgenden Methoden zur Auswahl:

  • Wenn Ihr Modell mit Spark-Bibliotheken (z. B. MLLib) trainiert und erstellt wurde, verwenden Sie mlflow.pyfunc.spark_udf, um ein Modell zu laden und als Spark Pandas-UDF zum Bewerten neuer Daten zu nutzen.
  • Wenn Ihr Modell nicht mit Spark-Bibliotheken trainiert oder erstellt wurde, verwenden Sie mlflow.pyfunc.load_model oder mlflow.<flavor>.load_model, um das Modell im Clustertreiber zu laden. Beachten Sie, dass auf diese Weise jede Parallelisierung oder Arbeitsverteilung, die Sie im Cluster durchführen möchten, von Ihnen orchestriert werden muss. Beachten Sie außerdem, dass MLflow keine Bibliothek installiert, die Ihr Modell für die Ausführung benötigt. Diese Bibliotheken müssen vor der Ausführung im Cluster installiert werden.

Im folgenden Beispiel wird gezeigt, wie ein Modell aus der Registrierung mit dem Namen uci-heart-classifier geladen und als Spark Pandas-UDF verwendet wird, um neue Daten zu erfassen.

from pyspark.sql.types import ArrayType, FloatType 

model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"

#Create a Spark UDF for the MLFlow model 
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri) 

Tipp

Weitere Möglichkeiten zum Verweisen auf Modelle aus der Registrierung finden Sie unter Laden von Modellen aus der Registrierung.

Nachdem das Modell geladen wurde, können Sie Folgendes verwenden, um neue Daten zu ermitteln:

#Load Scoring Data into Spark Dataframe 
scoreDf = spark.table({table_name}).where({required_conditions}) 

#Make Prediction 
preds = (scoreDf 
           .withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …)) 
        ) 

display(preds) 

Bereinigen von Ressourcen

Wenn Sie Ihren Azure Databricks-Arbeitsbereich beibehalten möchten, aber den Azure Machine Learning-Arbeitsbereich nicht mehr benötigen, können Sie Letzteren löschen. Diese Aktion führt dazu, dass die Verknüpfung zwischen Ihrem Azure Databricks- und dem Azure Machine Learning-Arbeitsbereich getrennt wird.

Falls Sie nicht planen, die protokollierten Metriken und Artefakte in Ihrem Arbeitsbereich zu verwenden, beachten Sie, dass das Löschen einzelner Einträge derzeit nicht möglich ist. Löschen Sie stattdessen die Ressourcengruppe, die das Speicherkonto und den Arbeitsbereich enthält, damit hierfür keine Gebühren anfallen:

  1. Wählen Sie ganz links im Azure-Portal Ressourcengruppen aus.

    Delete in the Azure portal

  2. Wählen Sie in der Liste die Ressourcengruppe aus, die Sie erstellt haben.

  3. Wählen Sie die Option Ressourcengruppe löschen.

  4. Geben Sie den Ressourcengruppennamen ein. Wählen Sie anschließend die Option Löschen.

Nächste Schritte