Freigeben über


Ausführen von MLflow-Projekten in Azure Databricks

Warnung

MLflow-Projekte werden nicht mehr unterstützt.

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}"

Bei Databricks Runtime 13.0 ML und höher können MLflow-Projekte nicht innerhalb eines Databricks-Auftragstypclusters ausgeführt werden. Weitere Informationen zum Migrieren vorhandener MLflow-Projekte zu Databricks Runtime 13.0 ML und höher finden Sie unter Format „MLflow Databricks Spark-Auftragsprojekt“.

Format „MLflow Databricks Spark-Auftragsprojekt“

Das MLflow Databricks Spark-Auftragsprojekt ist eine Art von MLflow-Projekt, das in MLflow 2.14 eingeführt wurde. Dieser Projekttyp unterstützt das Ausführen von MLflow-Projekten aus einem Spark-Aufträgecluster und kann nur mit dem databricks-Back-End ausgeführt werden.

Databricks Spark-Auftragsprojekte müssen entweder auf databricks_spark_job.python_file oder entry_points eingestellt sein. Wenn Sie keine oder beide Einstellungen angeben, wird eine Ausnahme ausgelöst.

Das folgende Beispiel zeigt eine MLproject-Datei mit der Einstellung databricks_spark_job.python_file. Bei dieser Einstellung wird ein hartcodierten Pfad für die Python-Ausführungsdatei und ihre Argumente verwendet.

name: My Databricks Spark job project 1

databricks_spark_job:
    python_file: "train.py"   # the file which is the entry point file to execute
    parameters: ["param1", "param2"]   # a list of parameter strings
    python_libraries:   # dependencies required by this project
      - mlflow==2.4.1   # MLflow dependency is required
      - scikit-learn

Das folgende Beispiel zeigt eine MLproject-Datei mit der Einstellung entry_points:

name: My Databricks Spark job project 2

databricks_spark_job:
    python_libraries: # dependencies to be installed as databricks cluster libraries
      - mlflow==2.4.1
      - scikit-learn

entry_points:
  main:
    parameters:
      model_name: {type: string, default: model}
      script_name: {type: string, default: train.py}
    command: "python {script_name} {model_name}"

Mit der Einstellung entry_points können Sie Parameter übergeben, die Befehlszeilenparameter verwenden, wie z. B.:

mlflow run . -b databricks --backend-config cluster-spec.json \
 -P script_name=train.py -P model_name=model123 \
 --experiment-id <experiment-id>

Die folgenden Einschränkungen gelten für Databricks Spark-Auftragsprojekte:

  • Dieser Projekttyp unterstützt nicht die Angabe der folgenden Abschnitte in der MLproject-Datei: docker_env, python_env oder conda_env.
  • Abhängigkeiten für Ihr Projekt müssen im Feld python_libraries des Abschnitts databricks_spark_job angegeben werden. Python-Versionen können nicht mit diesem Projekttyp angepasst werden.
  • Die ausgeführte Umgebung muss die Hauptumgebung der Spark-Treiberruntime nutzen, um sie in Auftragsclustern auszuführen, die Databricks Runtime 13.0 oder höher verwenden.
    • Ebenso müssen alle für das Projekt erforderlichen Python-Abhängigkeiten als Databricks-Clusterabhängigkeiten installiert werden. Dieses Verhalten unterscheidet sich von vorherigen Projektausführungsverhalten, bei denen Bibliotheken in einer separaten Umgebung installiert werden mussten.

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.