Dela via


Köra MLflow-projekt på Azure Databricks

Varning

MLflow Projects stöds inte längre.

Ett MLflow-projekt är ett format för att paketera datavetenskapskod på ett återanvändbart och reproducerbart sätt. MLflow Projects-komponenten innehåller ett API och kommandoradsverktyg för att köra projekt, som också integreras med komponenten Spårning för att automatiskt registrera parametrarna och git-incheckningen av källkoden för reproducerbarhet.

I den här artikeln beskrivs formatet för ett MLflow-projekt och hur du fjärrkör ett MLflow-projekt i Azure Databricks-kluster med hjälp av MLflow CLI, vilket gör det enkelt att skala datavetenskapskoden lodrätt.

MLflow-projektformat

Alla lokala kataloger eller Git-lagringsplatser kan behandlas som ett MLflow-projekt. Följande konventioner definierar ett projekt:

  • Projektets namn är namnet på katalogen.
  • Programvarumiljön anges i python_env.yaml, om den finns. Om det inte finns någon python_env.yaml fil använder MLflow en virtualenv-miljö som endast innehåller Python (specifikt den senaste Python som är tillgänglig för virtualenv) när projektet körs.
  • Alla .py eller .sh filer i projektet kan vara en startpunkt, utan att några parametrar uttryckligen har deklarerats. När du kör ett sådant kommando med en uppsättning parametrar skickar MLflow varje parameter på kommandoraden med hjälp av --key <value> syntax.

Du anger fler alternativ genom att lägga till en MLproject-fil, som är en textfil i YAML-syntaxen. Ett exempel på en MLproject-fil ser ut så här:

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

För Databricks Runtime 13.0 ML och senare kan MLflow Projects inte köras i ett Databricks-jobbtypskluster. Information om hur du migrerar befintliga MLflow-projekt till Databricks Runtime 13.0 ML och senare finns i MLflow Databricks Spark-jobbprojektformat.

MLflow Databricks Spark-jobbprojektformat

MLflow Databricks Spark-jobbprojektet är en typ av MLflow-projekt som introducerades i MLflow 2.14. Den här projekttypen stöder körning av MLflow-projekt inifrån ett Spark-jobbkluster och kan bara köras med hjälp av databricks serverdelen.

Databricks Spark-jobbprojekt måste ange antingen databricks_spark_job.python_file eller entry_points. Att inte ange någon av inställningarna eller att ange båda inställningarna ger upphov till ett undantag.

Följande är ett exempel på en MLproject fil som använder inställningen databricks_spark_job.python_file . Den här inställningen innebär att du använder en hårdkodad sökväg för Python-körningsfilen och dess argument.

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

Följande är ett exempel på en MLproject fil som använder inställningen 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}"

Med entry_points inställningen kan du skicka in parametrar som använder kommandoradsparametrar, till exempel:

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

Följande begränsningar gäller för Databricks Spark-jobbprojekt:

  • Den här projekttypen har inte stöd för att ange följande avsnitt i MLproject filen: docker_env, python_env, eller conda_env.
  • Beroenden för projektet måste anges i fältet i python_libraries databricks_spark_job avsnittet. Versioner av Python kan inte anpassas med den här projekttypen.
  • Körningsmiljön måste använda spark-drivrutinskörningsmiljön för att köras i jobbkluster som använder Databricks Runtime 13.0 eller senare.
    • På samma sätt måste alla Python-beroenden som definieras som nödvändiga för projektet installeras som Databricks-klusterberoenden. Det här beteendet skiljer sig från tidigare projektkörningsbeteenden där bibliotek behövde installeras i en separat miljö.

Köra ett MLflow-projekt

Om du vill köra ett MLflow-projekt på ett Azure Databricks-kluster på standardarbetsytan använder du kommandot:

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

där <uri> är en Git-lagringsplats-URI eller mapp som innehåller ett MLflow-projekt och <json-new-cluster-spec> är ett JSON-dokument som innehåller en new_cluster struktur. Git-URI:n ska vara av formatet: https://github.com/<repo>#<project-folder>.

Ett exempel på klusterspecifikation är:

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

Om du behöver installera bibliotek på arbetaren använder du formatet "klusterspecifikation". Observera att Python-hjulfiler måste laddas upp till DBFS och anges som pypi beroenden. Till exempel:

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

Viktigt!

  • .egg och .jar beroenden stöds inte för MLflow-projekt.
  • Körning för MLflow-projekt med Docker-miljöer stöds inte.
  • Du måste använda en ny klusterspecifikation när du kör ett MLflow-projekt på Databricks. Det går inte att köra projekt mot befintliga kluster.

Använda SparkR

För att kunna använda SparkR i en MLflow Project-körning måste projektkoden först installera och importera SparkR på följande sätt:

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

library(SparkR)

Projektet kan sedan initiera en SparkR-session och använda SparkR som vanligt:

sparkR.session()
...

Exempel

Det här exemplet visar hur du skapar ett experiment, kör MLflow-självstudieprojektet i ett Azure Databricks-kluster, visar jobbkörningens utdata och visar körningen i experimentet.

Krav

  1. Installera MLflow med .pip install mlflow
  2. Installera och konfigurera Databricks CLI. Databricks CLI-autentiseringsmekanismen krävs för att köra jobb i ett Azure Databricks-kluster.

Steg 1: Skapa ett experiment

  1. På arbetsytan väljer du Skapa > MLflow-experiment.

  2. I fältet Namn anger du Tutorial.

  3. Klicka på Skapa. Observera experiment-ID:t. I det här exemplet är det 14622565.

    Experiment-ID

Steg 2: Kör MLflow-självstudieprojektet

Följande steg konfigurerar MLFLOW_TRACKING_URI miljövariabeln och kör projektet, registrerar träningsparametrarna, måtten och den tränade modellen till experimentet som noterades i föregående steg:

  1. MLFLOW_TRACKING_URI Ange miljövariabeln till Azure Databricks-arbetsytan.

    export MLFLOW_TRACKING_URI=databricks
    
  2. Kör MLflow-självstudieprojektet och träna en vinmodell. Ersätt <experiment-id> med experiment-ID:t som du antecknade i föregående steg.

    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. Kopiera URL:en https://<databricks-instance>#job/<job-id>/run/1 på den sista raden i MLflow-körningens utdata.

Steg 3: Visa Azure Databricks-jobbkörningen

  1. Öppna url:en som du kopierade i föregående steg i en webbläsare för att visa azure Databricks-jobbkörningens utdata:

    Utdata för jobbkörning

Steg 4: Visa experiment- och MLflow-körningsinformation

  1. Gå till experimentet på din Azure Databricks-arbetsyta.

    Gå till experiment

  2. Klicka på experimentet.

    Visa experiment

  3. Om du vill visa körningsinformation klickar du på en länk i kolumnen Datum.

    Körningsinformation

Du kan visa loggar från körningen genom att klicka på länken Loggar i fältet Jobbutdata.

Resurser

Exempel på MLflow-projekt finns i MLflow-appbiblioteket, som innehåller en lagringsplats med färdiga projekt som gör det enkelt att inkludera ML-funktioner i koden.