Freigeben über


Nachverfolgen von Machine Learning-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 wird Folgendes behandelt:

Voraussetzungen

Überprüfen Sie, welche Zugriffsberechtigungen Sie benötigen, um Ihre MLflow-Vorgänge mit Ihrem Arbeitsbereich auszuführen.

Beispielnotebooks

Im Repository 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 wird beschrieben, wie die Experimente und Modelle mit der MLflow-Instanz in Azure Databricks nachverfolgt werden. Sie erfahren, wie Sie Azure Machine Learning für die Bereitstellung verwenden.

Installieren von Bibliotheken

So installieren Sie Bibliotheken in Ihrem Cluster

  1. Navigieren Sie zur Registerkarte Bibliotheken, und wählen Sie Neue installieren aus.

    Screenshot: MLflow Azure Databricks

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

    Screenshot: Installieren der Azure DB-MLflow-Bibliothek

Nachverfolgen von Azure Databricks-Ausführungen mit MLflow

Sie können Azure Databricks auf zwei Arten konfigurieren, um Experimente mit MLflow nachzuverfolgen:

Wenn Sie Ihren Azure Databricks-Arbeitsbereich verknüpfen, ist standardmäßig duale Nachverfolgung für Sie konfiguriert.

Duale Nachverfolgung in 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. Diese Konfiguration wird als duale Nachverfolgung bezeichnet.

Dual-Tracking wird in einem Private Link aktivierten Azure Machine Learning-Arbeitsbereich derzeit nicht unterstützt, unabhängig von der Konfiguration ausgehender Regeln oder davon, ob Azure Databricks in Ihrem eigenen Netzwerk bereitgestellt wurde (VNet-Einfügung). Konfigurieren Sie stattdessen die exklusive Nachverfolgung in Ihrem Azure Machine Learning-Arbeitsbereich. Beachten Sie, dass dies nicht bedeutet, dass das VNet injiziert wird

Duale Nachverfolgung wird in Microsoft Azure, betrieben von 21Vianet, derzeit nicht unterstützt. Konfigurieren Sie stattdessen die exklusive Nachverfolgung in Ihrem Azure Machine Learning-Arbeitsbereich.

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

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zur Seite Übersicht Ihres Azure Databricks-Arbeitsbereichs.

  3. Wählen Sie Azure Machine Learning-Arbeitsbereich verknüpfen aus.

    Screenshot: Option zum Verbinden Ihres Azure Databricks- und Ihres Azure Machine Learning-Arbeitsbereichs

Nachdem Sie Ihren Azure Databricks-Arbeitsbereich mit Ihrem Azure Machine Learning-Arbeitsbereich verknüpft haben, erfolgt die MLflow-Nachverfolgung automatisch an den folgenden Stellen:

  • Verknüpfter Azure Machine Learning-Arbeitsbereich
  • Im ursprünglichen Azure Databricks-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 gewohnt 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. Weitere Informationen finden Sie unter 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.

Konfigurieren Sie den MLflow-Nachverfolgungs-URI so, dass er ausschließlich auf Azure Machine Learning verweist, wie im folgenden Beispiel gezeigt:

Konfigurieren des Nachverfolgungs-URI

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

    GILT FÜR Azure CLI-ML-Erweiterung v2 (aktuell)

    1. Melden Sie sich an, und konfigurieren Sie Ihren Arbeitsbereich:

      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 Sie den Nachverfolgungs-URI.

    Die Methode set_tracking_uri() verweist den MLflow-Nachverfolgungs-URI auf diesen URI.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

Tipp

Wenn Sie mit freigegebenen Umgebungen wie einem Azure Databricks-Cluster, einem Azure Synapse Analytics-Cluster oder einer ähnlichen Umgebung arbeiten, können Sie die Umgebungsvariable MLFLOW_TRACKING_URI auf Clusterebene festlegen. Mit diesem Ansatz können Sie den MLflow-Nachverfolgungs-URI automatisch so konfigurieren, dass er für alle im Cluster ausgeführten Sitzungen auf Azure Machine Learning verweist, statt dies pro Sitzung festzulegen.

Screenshot: Abschnitt „Erweiterte Optionen“, in dem Sie die Umgebungsvariablen in einem Azure Databricks-Cluster konfigurieren können

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

Konfigurieren der Authentifizierung

Konfigurieren Sie nach dem Konfigurieren der Nachverfolgung die Authentifizierung beim zugeordneten Arbeitsbereich. Standardmäßig öffnet das Azure Machine Learning-Plug-In für MLflow einen Browser, um interaktiv zur Eingabe von Anmeldeinformationen aufzufordern. Weitere 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. Es ist keine weitere Aktion erforderlich.

Warnung

Die interaktive Browserauthentifizierung blockiert die Codeausführung, wenn zur Eingabe von Anmeldeinformationen aufgefordert wird. Dieser Ansatz eignet sich nicht für die Authentifizierung in unbeaufsichtigten Umgebungen wie Trainingsaufträgen. Es wird empfohlen, einen anderen Authentifizierungsmodus in diesen Umgebungen 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. Informationen zum Erstellen eines Dienstprinzipals finden Sie unter Konfigurieren eines Dienstprinzipals.

Verwenden Sie die Mandanten-ID, die Client-ID und den geheimen Clientschlüssel Ihres Dienstprinzipals im folgenden Code:

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

Für die Arbeit in gemeinsam genutzten Umgebungen wird empfohlen, diese Umgebungsvariablen auf Computeebene zu konfigurieren. Als bewährte Methode empfiehlt es sich, diese 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>}}. Weitere Informationen zum Implementieren dieses Ansatzes in Azure Databricks finden Sie unter Verweisen auf ein Geheimnis in einer Umgebungsvariablen oder in der Dokumentation für Ihre Plattform.

Benennen des Experiments in Azure Machine Learning

Wenn Sie MLflow so konfigurieren, 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 geben Sie den Namen des Experiments jedoch direkt an. Das gleiche Experiment würde direkt iris-classifier benannt werden.

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

Nachverfolgen von Parametern, Metriken und Artefakten

Nach dieser Konfiguration können Sie MLflow in Azure Databricks auf die gleiche Weise verwenden, wie Sie es gewohnt sind. Weitere 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")

Die Variante spark entspricht nicht der Tatsache, dass Sie ein Modell in einem Spark-Cluster trainieren. Stattdessen ergibt sie sich aus dem verwendeten Trainingsframework. Sie können ein Modell mithilfe von TensorFlow mit Spark trainieren. Die zu verwendende Variante wäre dann 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

Der Parameter registered_model_name wurde nicht angegeben. Weitere Informationen zu diesem Parameter und zur Registrierung finden Sie unter Registrieren von Modellen in der Registrierung mit MLflow.

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. Sie können nur eine Umgebung verwenden. Standardmäßig nutzen Modellregistrierungen den Azure Databricks-Arbeitsbereich. Wenn Sie die MLflow-Nachverfolgung so festlegen, dass sie nur im Azure Machine Learning-Arbeitsbereich ausgeführt wird, ist die Modellregistrierung der Azure Machine Learning-Arbeitsbereich.

Wenn Sie die Standardkonfiguration verwenden, protokolliert der folgende Code 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, wird mit der Methode ein neues Modell registriert, die erste Version erstellt und das MLflow-Objekt ModelVersion zurückgegeben.
  • 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, die MLflow-Nachverfolgung so festzulegen, dass sie nur im Azure Machine Learning-Arbeitsbereich ausgeführt wird. Mit diesem Ansatz wird die Unklarheit darüber beseitigt, wo die Modelle registriert werden, und die Konfiguration wird vereinfacht.

Wenn Sie 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 Modellregistrierungen zu verwenden, indem Sie den URI für die MLflow-Modellregistrierung konfigurieren. Dieser URI hat 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 unter Beschränken der MLflow-Nachverfolgung auf den Azure Machine Learning-Arbeitsbereich erläutert.

Ein vollständiges Beispiel für dieses Szenario finden Sie unter 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:

  • 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, Azure Kubernetes oder Endpunkte für verwaltete Rückschlüsse nutzen.
  • MLFlow-Modellobjekte oder Pandas-UDFs (User-Defined Functions, benutzerdefinierte Funktionen), 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. Weitere Informationen zum Bereitstellen von Modellen auf den verschiedenen Zielen finden Sie unter Bereitstellen von MLflow-Modellen.

Wichtig

Modelle müssen in der Azure Machine Learning-Registrierung registriert werden, um sie bereitstellen zu können. Wenn Ihre Modelle in der MLflow-Instanz in Azure Databricks registriert sind, registrieren Sie sie erneut in Azure Machine Learning. Weitere Informationen Sie unter Trainieren von Modellen in Azure Databricks und deren Bereitstellung in Azure Machine Learning.

Bereitstellen von Modellen in Azure Databricks für die Batchbewertung mithilfe von 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. Sie verwenden normalerweise eine der folgenden Methoden:

  • 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. Sie müssen jede Parallelisierung oder Arbeitsverteilung orchestrieren, die Sie im Cluster durchführen möchten. MLflow installiert keine Bibliothek, 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) 

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 den folgenden Befehl verwenden, um neue Daten zu bewerten:

#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.

Wenn Sie die protokollierten Metriken und Artefakte in Ihrem Arbeitsbereich nicht weiter verwenden möchten, löschen Sie die Ressourcengruppe, die das Speicherkonto und den Arbeitsbereich enthält.

  1. Suchen Sie im Azure-Portal nach Ressourcengruppen. Wählen Sie unter Dienste die Option Ressourcengruppen aus.
  2. Suchen Sie in der Liste Ressourcengruppen nach der Ressourcengruppe, die Sie erstellt haben, und wählen Sie sie aus, um sie zu öffnen.
  3. Wählen Sie auf der Seite Übersicht die Option Ressourcengruppe löschen aus.
  4. Um den Löschvorgang zu überprüfen, geben Sie den Namen der Ressourcengruppe ein.