Köra MLflow-projekt på Azure Databricks
Obs
MLflow Projects stöds inte längre.
Den här dokumentationen har dragits tillbaka och kanske inte uppdateras. De produkter, tjänster eller tekniker som nämns i det här innehållet stöds inte längre.
Ett MLflow Project ä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 parameters och git-incheckning 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ågonpython_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ågon parameters uttryckligen deklarerats. När du kör ett sådant kommando med set som parameters, skickar MLflow varje parameter på kommandoraden genom att använda--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-jobbprojektformatet.
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 från ett Spark-kluster för jobb och kan bara köras med hjälp av databricks
backend.
Databricks Spark-jobbprojekt måste set 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 inställningen entry_points
kan du skicka in parameters som använder kommandoradsparamer, 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
ellerconda_env
. - Beroenden för projektet måste anges i fältet
python_libraries
i avsnittetdatabricks_spark_job
. Versioner av Python kan inte anpassas med den här projekttypen. - Körningsmiljön måste använda Spark-driverns körningsmiljö för att köra 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 körningar av projekt där where-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>
where
<uri>
är en URI eller mapp för Git-lagringsplatsen 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"
}
}
]
}
Viktig
-
.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
Detta exempel visar hur du kan skapa ett experiment, köra självstudieprojektet MLflow på ett Azure Databricks-kluster, visa resultatet av jobbkörningen och se körningen i experimentet.
Krav
- Installera MLflow med
pip install mlflow
. - 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
På arbetsytan selectSkapa > MLflow-experiment.
I fältet Namn anger du
Tutorial
.Klicka på Skapa. Observera Experiment-ID-nummer. I det här exemplet är det
14622565
.
Steg 2: Kör MLflow-självstudieprojektet
Följande steg set upp miljövariabeln MLFLOW_TRACKING_URI
och kör projektet, registrerar tränings- parameters, mått och den tränade modellen till experimentet som noterades i föregående steg:
Set
MLFLOW_TRACKING_URI
miljövariabeln till Azure Databricks-arbetsytan.export MLFLOW_TRACKING_URI=databricks
Kör MLflow-självstudieprojektet för att 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 ===
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
Öppna url:en som du kopierade i föregående steg i en webbläsare för att visa azure Databricks-jobbkörningens utdata:
Steg 4: Visa experiment- och MLflow-körningsinformation
Gå till experimentet på din Azure Databricks-arbetsyta.
Klicka på experimentet.
Om du vill visa körningsinformation klickar du på en länk i column.
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 App Library, som innehåller en lagringsplats med färdiga projekt som gör det enkelt att inkludera ML-funktioner i koden.