Ausführen von MLflow-Projekten in Azure Databricks

Ein MLflow-Project ist ein Format zum Packen von wiederverwendbarem und reproduzierbarem Data Science-Code. Die Komponente MLflow-Projekte enthält eine API und Befehlszeilentools zum Ausführen von Projekten, die auch mit der Tracking-Komponente integriert werden können, um automatisch Parameter und Git-Commit Ihres Quellcodes für die Reproduzierbarkeit aufzuzeichnen.

In diesem Artikel wird das Format eines MLflow-Projekts beschrieben und Sie erfahren, wie Sie ein MLflow-Projekt mithilfe der MLflow-CLI remote auf Azure Databricks-Clustern ausführen können. Dies erlaubt die einfache vertikale Skalierung Ihres Data Science-Codes.

MLflow-Projektformat

Jedes lokale Verzeichnis oder Git-Repository kann als MLflow-Projekt behandelt werden. Die folgenden Konventionen definieren ein Projekt:

  • Der Name des Projekts ist der Name des Verzeichnisses.
  • Die Softwareumgebung wird in python_env.yaml angegeben, sofern vorhanden. Wenn keine python_env.yaml-Datei vorhanden ist, verwendet MLflow bei der Ausführung des Projekts eine virtualenv-Umgebung, die nur Python enthält (und zwar die neueste für virtualenv verfügbare Python-Version).
  • Jede .py- oder .sh-Datei im Projekt kann ein Einstiegspunkt sein, ohne explizit deklarierte Parameter. Wenn Sie einen solchen Befehl mit einem Satz von Parametern ausführen, übergibt MLflow jeden Parameter mithilfe der --key <value>-Syntax an die Befehlszeile.

Sie können weitere Optionen angeben, indem Sie eine MLproject-Datei hinzufügen, welche eine Textdatei in YAML-Syntax ist. Ein Beispiel für eine MLproject-Datei könnte so aussehen:

name: My Project

python_env: python_env.yaml

entry_points:
  main:
    parameters:
      data_file: path
      regularization: {type: float, default: 0.1}
    command: "python train.py -r {regularization} {data_file}"
  validate:
    parameters:
      data_file: path
    command: "python validate.py {data_file}"

Ausführen eines MLflow-Projekts

Verwenden Sie den folgenden Befehl, um ein MLflow-Projekt auf einem Azure Databricks-Cluster im Standardarbeitsbereich auszuführen:

mlflow run <uri> -b databricks --backend-config <json-new-cluster-spec>

wobei <uri> ein Git-Repository-URI oder -Ordner mit einem MLflow-Projekt und <json-new-cluster-spec> ein JSON-Dokument ist, das eine new_cluster-Struktur enthält. Der Git-URI sollte folgendes Format haben: https://github.com/<repo>#<project-folder>.

Ein Beispiel für eine Clusterspezifikation ist:

{
  "spark_version": "7.3.x-scala2.12",
  "num_workers": 1,
  "node_type_id": "Standard_DS3_v2"
}

Wenn Sie Bibliotheken auf dem Worker installieren müssen, verwenden Sie das Format „Clusterspezifikation“. Beachten Sie, dass Python-Wheel-Dateien in DBFS hochgeladen und als pypi-Abhängigkeiten angegeben werden müssen. Zum Beispiel:

{
  "new_cluster": {
    "spark_version": "7.3.x-scala2.12",
    "num_workers": 1,
    "node_type_id": "Standard_DS3_v2"
  },
  "libraries": [
    {
      "pypi": {
        "package": "tensorflow"
      }
    },
    {
      "pypi": {
         "package": "/dbfs/path_to_my_lib.whl"
      }
    }
  ]
}

Wichtig

  • .egg- und .jar-Abhängigkeiten werden für MLflow-Projekte nicht unterstützt.
  • Die Ausführung von MLflow-Projekten mit Docker-Umgebungen wird nicht unterstützt.
  • Sie müssen eine neue Clusterspezifikation verwenden, wenn Sie ein MLflow-Projekt in Databricks ausführen. Das Ausführen von Projekten für vorhandene Cluster wird nicht unterstützt.

Verwenden von SparkR

Damit SparkR bei der Ausführung eines MLflow-Projekts verwendet werden kann, muss Ihr Projektcode SparkR zunächst wie folgt installieren und importieren:

if (file.exists("/databricks/spark/R/pkg")) {
    install.packages("/databricks/spark/R/pkg", repos = NULL)
} else {
    install.packages("SparkR")
}

library(SparkR)

Ihr Projekt kann dann eine SparkR-Sitzung initialisieren und SparkR wie gewohnt verwenden:

sparkR.session()
...

Beispiel

In diesem Beispiel wird gezeigt, wie Sie ein Experiment erstellen, das MLflow-Tutorialprojekt auf einem Azure Databricks-Cluster ausführen, die Ausgabe der Auftragsausführung anzeigen und die Ausführung im Experiment anzeigen können.

Anforderungen

  1. Installieren Sie MLflow mithilfe von pip install mlflow.
  2. Installieren und konfigurieren Sie die Databricks Befehlszeilenschnittstelle (CLI). Der Databricks CLI-Authentifizierungsmechanismus ist für die Ausführung von Aufträgen auf einem Azure Databricks-Cluster erforderlich.

Schritt 1: Erstellen eines Experiments

  1. Wählen Sie im Arbeitsbereich >MLflow-Experiment erstellen aus.

  2. Geben Sie im Feld Name die Zeichenfolge Tutorial ein.

  3. Klicken Sie auf Erstellen. Notieren Sie sich die Experiment-ID. In diesem Beispiel lautet er 14622565.

    Experiment-ID

Schritt 2: Ausführen des MLflow-Tutorialprojekts

Mit den folgenden Schritten wird die MLFLOW_TRACKING_URI-Umgebungsvariable eingerichtet und das Projekt ausgeführt. Dabei werden die Trainingsparameter, Metriken und das trainierte Modell in dem Experiment aufgezeichnet, das Sie sich im vorherigen Schritt notiert haben:

  1. Legen Sie die MLFLOW_TRACKING_URI-Umgebungsvariable auf den Azure Databricks-Arbeitsbereich fest.

    export MLFLOW_TRACKING_URI=databricks
    
  2. Führen Sie das MLflow-Tutorialprojekt aus und trainieren Sie ein Weinmodell. Ersetzen Sie <experiment-id> mit der im vorigen Schritt notierten Experiment-ID.

    mlflow run https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine -b databricks --backend-config cluster-spec.json --experiment-id <experiment-id>
    
    === Fetching project from https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine into /var/folders/kc/l20y4txd5w3_xrdhw6cnz1080000gp/T/tmpbct_5g8u ===
    === Uploading project to DBFS path /dbfs/mlflow-experiments/<experiment-id>/projects-code/16e66ccbff0a4e22278e4d73ec733e2c9a33efbd1e6f70e3c7b47b8b5f1e4fa3.tar.gz ===
    === Finished uploading project to /dbfs/mlflow-experiments/<experiment-id>/projects-code/16e66ccbff0a4e22278e4d73ec733e2c9a33efbd1e6f70e3c7b47b8b5f1e4fa3.tar.gz ===
    === Running entry point main of project https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine on Databricks ===
    === Launched MLflow run as Databricks job run with ID 8651121. Getting run status page URL... ===
    === Check the run's status at https://<databricks-instance>#job/<job-id>/run/1 ===
    
  3. Kopieren Sie die URL https://<databricks-instance>#job/<job-id>/run/1 in der letzten Zeile der Ausgabe der MLflow-Ausführung.

Schritt 3: Anzeigen der Ausführung des Azure Databricks-Auftrags

  1. Öffnen Sie die URL, die Sie im vorherigen Schritt kopiert haben, in einem Browser, um die Ausgabe der Auftragsausführung von Azure Databricks anzuzeigen:

    Ausgabe der Auftragsausführung

Schritt 4: Anzeigen von Details zu Experiment und MLflow-Ausführung

  1. Navigieren Sie in Ihrem Azure Databricks-Arbeitsbereich zum Experiment.

    Navigieren zum Experiment

  2. Klicken Sie auf das Experiment.

    Anzeigen des Experiments

  3. Klicken Sie auf einen Link in der Datumsspalte, um Details zur Ausführung anzuzeigen.

    Ausführungsdetails

Sie können Protokolle zu Ihrer Ausführung anzeigen, indem Sie im Auftragsausgabefeld auf den Link Protokolle klicken.

Ressourcen

In der MLflow-App-Bibliothek finden Sie einige MLflow-Beispielprojekte. Sie enthält zudem ein Repository mit sofort einsatzbereiten Projekten, die es ihnen erleichtern sollen, ML-Funktionalität in Ihren Code einzuschließen.