Konfigurieren von MLflow für Azure Machine Learning

In diesem Artikel erfahren Sie, wie Sie MLflow konfigurieren können, um für Nachverfolgung, Registrierungen und Bereitstellung eine Verbindung mit einem Azure Machine Learning-Arbeitsbereich herzustellen.

Azure Machine Learning-Arbeitsbereiche sind MLflow-kompatibel, was bedeutet, dass sie ohne zusätzliche Konfiguration als MLflow-Server fungieren können. Jeder Arbeitsbereich verfügt über einen MLflow-Nachverfolgungs-URI, mit dem MLflow eine Verbindung mit dem Arbeitsbereich herstellen kann. Azure Machine Learning-Arbeitsbereiche sind bereits für die Verwendung mit MLflow konfiguriert, sodass keine zusätzliche Konfiguration erforderlich ist.

Wenn Sie jedoch außerhalb von Azure Machine Learning arbeiten (z. B. auf Ihrem lokalen Computer, in Azure Synapse Analytics oder Azure Databricks), müssen Sie MLflow so konfigurieren, dass es auf den Arbeitsbereich verweist.

Wichtig

Bei der Ausführung in Azure Compute (Azure Machine Learning-Notebooks, auf Azure Machine Learning-Compute-Instanzen gehostete Jupyter Notebooks-Instanzen oder in Azure Machine Learning-Computeclustern ausgeführte Aufträge) müssen Sie keinen Nachverfolgungs-URI konfigurieren. Es ist automatisch für Sie konfiguriert.

Voraussetzungen

Für dieses Tutorial müssen folgende Voraussetzungen erfüllt sein:

  • Installieren Sie das Mlflow SDK-Paket mlflow und das Azure Machine Learning-Plug-In für MLflow azureml-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.

Konfigurieren des MLflow-Nachverfolgungs-URI

Um MLflow mit einem Azure Machine Learning-Arbeitsbereich zu verbinden, benötigen Sie den Nachverfolgungs-URI für den Arbeitsbereich. Jeder Arbeitsbereich verfügt über einen eigenen Nachverfolgungs-URI und das Protokoll azureml://.

  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.

Konfigurieren der Authentifizierung

Sobald die Nachverfolgung eingerichtet ist, müssen Sie auch die Authentifizierungsmethode für den zugeordneten Arbeitsbereich konfigurieren. 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.

Das Azure Machine Learning-Plug-In für MLflow unterstützt mehrere Authentifizierungsmechanismen über das Paket azure-identity, das als Abhängigkeit für das Plug-In azureml-mlflow installiert wird. Die folgenden Authentifizierungsmethoden werden nacheinander ausprobiert, bis eine von ihnen erfolgreich ist:

  1. Umgebung: Liest über Umgebungsvariablen angegebene Kontoinformationen und verwendet diese zur Authentifizierung.
  2. Verwaltete Identität: Wenn die Anwendung auf einem Azure-Host mit aktivierter verwalteter Identität bereitgestellt ist, erfolgt die Authentifizierung bei diesem.
  3. Azure CLI: Wenn sich Benutzer*innen über den Azure CLI-Befehl az login anmelden, erfolgt die Authentifizierung als diese Benutzer*innen.
  4. Azure PowerShell: Wenn sich Benutzer*innen über den Azure PowerShell-Befehl Connect-AzAccount anmelden, erfolgt die Authentifizierung als diese Benutzer*innen.
  5. Interaktiver Browser: Benutzer*innen werden interaktiv über den Standardbrowser authentifiziert.

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.

Wenn Sie statt eines Geheimnisses ein Zertifikat bevorzugen, können Sie die Umgebungsvariablen von AZURE_CLIENT_CERTIFICATE_PATH mit dem Pfad zu einer PEM- oder PKCS12-Zertifikatdatei (einschließlich privatem Schlüssel) und AZURE_CLIENT_CERTIFICATE_PASSWORD mit dem Kennwort der Zertifikatdatei konfigurieren, falls vorhanden.

Konfigurieren von Autorisierungs- und Berechtigungsstufen

Einige Standardrollen wie AzureML – Wissenschaftliche Fachkraft für Daten oder Mitwirkender sind bereits für die Ausführung von MLflow-Vorgängen in einem Azure Machine Learning-Arbeitsbereich konfiguriert. Wenn Sie eine benutzerdefinierte Rolle verwenden, benötigen Sie die folgenden Berechtigungen:

  • So verwenden Sie die MLflow-Nachverfolgung:

    • Microsoft.MachineLearningServices/workspaces/experiments/*
    • Microsoft.MachineLearningServices/workspaces/jobs/*
  • MLflow-Modellregistrierung:

    • Microsoft.MachineLearningServices/workspaces/models/*/*

Wie Sie den Zugriff auf Ihren Arbeitsbereich für den von Ihnen erstellten Dienstprinzipal oder das Benutzerkonto gewähren, erfahren Sie unter Gewähren von Zugriff.

Problembehandlung bei der Authentifizierung

MLflow versucht, sich beim ersten Vorgang, der mit dem Dienst interagiert (z. B mlflow.set_experiment() oder mlflow.start_run()), bei Azure Machine Learning zu authentifizieren. Wenn Sie während des Prozesses Probleme oder unerwartete Authentifizierungsaufforderungen feststellen, können Sie den Protokollierungsgrad erhöhen, um weitere Details zum Fehler zu erhalten:

import logging

logging.getLogger("azure").setLevel(logging.DEBUG)

Festlegen des Experimentnamens (optional)

Alle MLflow-Ausführungen werden im aktiven Experiment protokolliert. Standardmäßig werden Ausführungen mit einem Experiment namens Default protokolliert, das automatisch für Sie erstellt wird. Sie können das Experiment konfigurieren, in dem die Nachverfolgung stattfindet.

Tipp

Beim Senden von Aufträgen mit der Azure Machine Learning CLI v2 können Sie den Experimentnamen mithilfe der Eigenschaft experiment_name in der YAML-Definition des Auftrags festlegen. Sie brauchen es in Ihrem Trainingsskript nicht zu konfigurieren. Weitere Informationen finden Sie unter YAML: Anzeigename, Experimentname, Beschreibung und Tags.

Konfigurieren Sie Ihr Experiment mithilfe des MLflow-Befehls mlflow.set_experiment().

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Unterstützung für nicht öffentliche Azure-Clouds

Das Azure Machine Learning-Plug-In für MLflow ist standardmäßig für die Verwendung mit der globalen Azure-Cloud konfiguriert. Sie können jedoch die verwendete Azure-Cloud konfigurieren, indem Sie die Umgebungsvariable AZUREML_CURRENT_CLOUD festlegen.

import os

os.environ["AZUREML_CURRENT_CLOUD"] = "AzureChinaCloud"

Sie können die verwendete Cloud mit dem folgenden Azure CLI-Befehl identifizieren:

az cloud list

Für die aktuelle Cloud ist der Wert IsActive auf True festgelegt.

Nächste Schritte

Nachdem Ihre Umgebung nun mit Ihrem Arbeitsbereich in Azure Machine Learning verbunden ist, können Sie die Arbeit damit aufnehmen.