MLflow-projektek futtatása az Azure Databricksbsen
Figyelmeztetés
Az MLflow-projektek már nem támogatottak.
Az MLflow-projekt az adatelemzési kód újrafelhasználható és reprodukálható csomagolásának formátuma. Az MLflow Projects összetevő tartalmaz egy API-t és parancssori eszközöket a projektek futtatásához, amelyek integrálhatók a Tracking összetevővel a forráskód paramétereinek és git véglegesítésének automatikus rögzítéséhez a reprodukálhatóság érdekében.
Ez a cikk egy MLflow-projekt formátumát ismerteti, valamint azt, hogyan futtathat távolról egy MLflow-projektet az Azure Databricks-fürtökön az MLflow parancssori felület használatával, ami megkönnyíti az adatelemzési kód vertikális skálázását.
MLflow projektformátum
Bármely helyi könyvtár vagy Git-adattár MLflow-projektként kezelhető. A következő konvenciók határoznak meg egy projektet:
- A projekt neve a könyvtár neve.
- A szoftverkörnyezet a (ha van) területen
python_env.yaml
van megadva. Ha nincspython_env.yaml
fájl, az MLflow egy olyan virtualenv környezetet használ, amely csak Pythont (pontosabban a virtualenv számára elérhető legújabb Pythont) tartalmaz a projekt futtatásakor. - A projekt bármely
.py
fájlja.sh
lehet belépési pont, és nincsenek explicit módon deklarált paraméterek. Ha egy ilyen parancsot paraméterek készletével futtat, az MLflow szintaxissal--key <value>
adja át a parancssor minden paraméterét.
További lehetőségeket egy MLproject-fájl hozzáadásával adhat meg, amely egy YAML-szintaxisban lévő szövegfájl. Egy példa MLproject-fájl a következőképpen néz ki:
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}"
A Databricks Runtime 13.0 ML és újabb verziók esetében az MLflow-projektek nem futtathatók sikeresen Databricks-feladattípusú fürtökön belül. A meglévő MLflow-projektek Databricks Runtime 13.0 ML-es és újabb verziójába való migrálásához tekintse meg az MLflow Databricks Spark-feladat projektformátumát.
MLflow Databricks Spark-feladat projektformátuma
Az MLflow Databricks Spark-feladatprojekt az MLflow 2.14-ben bevezetett MLflow-projekt típusa. Ez a projekttípus támogatja az MLflow-projektek Spark-feladatok fürtön belüli futtatását, és csak a databricks
háttérrendszer használatával futtatható.
A Databricks Spark-feladatprojekteknek vagy databricks_spark_job.python_file
a entry_points
. Ha nem adja meg vagy adja meg mindkét beállítást, kivételt eredményez.
Az alábbi példa MLproject
egy olyan fájlra mutat be, amely a databricks_spark_job.python_file
beállítást használja. Ez a beállítás magában foglalja a Python-futtatási fájl és argumentumai rögzített elérési útjának használatát.
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
Az alábbi példa egy MLproject
olyan fájlra mutat be, amely a entry_points
beállítást használja:
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}"
A entry_points
beállítással parancssori paramokat használó paramétereket adhat meg, például:
mlflow run . -b databricks --backend-config cluster-spec.json \
-P script_name=train.py -P model_name=model123 \
--experiment-id <experiment-id>
A Databricks Spark-feladatprojektekre a következő korlátozások vonatkoznak:
- Ez a projekttípus nem támogatja a fájl következő szakaszainak
MLproject
megadását:docker_env
,python_env
vagyconda_env
. - A projekt függőségeit a
python_libraries
szakasz mezőjébendatabricks_spark_job
kell megadni. A Python-verziók nem szabhatók testre ezzel a projekttípussal. - A futó környezetnek a Fő Spark-illesztőprogram-futtatókörnyezetet kell használnia a Databricks Runtime 13.0-s vagy újabb verzióját használó feladatfürtök futtatásához.
- Hasonlóképpen, a projekthez szükségesnek definiált Összes Python-függőséget Databricks-fürtfüggőségként kell telepíteni. Ez a viselkedés eltér a korábbi projektfuttatási viselkedésektől, ahol a kódtárakat külön környezetben kellett telepíteni.
MLflow-projekt futtatása
Ha MLflow-projektet szeretne futtatni egy Azure Databricks-fürtön az alapértelmezett munkaterületen, használja a következő parancsot:
mlflow run <uri> -b databricks --backend-config <json-new-cluster-spec>
ahol <uri>
egy Git-adattár URI-ja vagy egy MLflow-projektet tartalmazó mappa, és <json-new-cluster-spec>
egy new_cluster struktúrát tartalmazó JSON-dokumentum. A Git URI-nak a következő formában kell lennie: https://github.com/<repo>#<project-folder>
.
A fürt specifikációja például a következő:
{
"spark_version": "7.3.x-scala2.12",
"num_workers": 1,
"node_type_id": "Standard_DS3_v2"
}
Ha kódtárakat kell telepítenie a feldolgozóra, használja a "fürt specifikációja" formátumot. Vegye figyelembe, hogy a Python-kerekes fájlokat fel kell tölteni a DBFS-be, és függőségként pypi
kell megadni. Példa:
{
"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"
}
}
]
}
Fontos
.egg
és.jar
a függőségek nem támogatottak az MLflow-projektek esetében.- Docker-környezetekkel rendelkező MLflow-projektek végrehajtása nem támogatott.
- Az MLflow-projekt Databricksen való futtatásakor új fürtspecifikációt kell használnia. A projektek meglévő fürtökön való futtatása nem támogatott.
A SparkR használata
Ahhoz, hogy a SparkR egy MLflow Project-futtatásban használható legyen, a projektkódnak először telepítenie és importálnia kell a SparkR-t az alábbiak szerint:
if (file.exists("/databricks/spark/R/pkg")) {
install.packages("/databricks/spark/R/pkg", repos = NULL)
} else {
install.packages("SparkR")
}
library(SparkR)
A projekt ezután inicializálhat egy SparkR-munkamenetet, és normál módon használhatja a SparkR-t:
sparkR.session()
...
Példa
Ez a példa bemutatja, hogyan hozhat létre egy kísérletet, hogyan futtathatja az MLflow-oktatóanyag projektet egy Azure Databricks-fürtön, hogyan tekintheti meg a feladatfuttatás kimenetét, és hogyan tekintheti meg a kísérletben való futtatásokat.
Követelmények
- Az MLflow telepítése a következővel
pip install mlflow
: . - Telepítse és konfigurálja a Databricks parancssori felületét. A Databricks CLI hitelesítési mechanizmusa szükséges a feladatok Azure Databricks-fürtön való futtatásához.
1. lépés: Kísérlet létrehozása
A munkaterületen válassza az MLflow-kísérlet létrehozása lehetőséget>.
A Név mezőbe írja be a következőt
Tutorial
:Kattintson a Létrehozás gombra. Jegyezze fel a kísérlet azonosítóját. Ebben a példában ez
14622565
.
2. lépés: Az MLflow oktatóanyag projekt futtatása
A következő lépések beállítják a MLFLOW_TRACKING_URI
környezeti változót, és futtatják a projektet, rögzítve a betanítási paramétereket, metrikákat és a betanított modellt az előző lépésben feljegyzett kísérlethez:
Állítsa be a
MLFLOW_TRACKING_URI
környezeti változót az Azure Databricks-munkaterületre.export MLFLOW_TRACKING_URI=databricks
Futtassa az MLflow oktatóanyag-projektet, és taníts be egy bormodellt. Cserélje le
<experiment-id>
az előző lépésben feljegyzett kísérletazonosítóra.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 ===
Másolja az URL-címet
https://<databricks-instance>#job/<job-id>/run/1
az MLflow-futtatási kimenet utolsó sorában.
3. lépés: Az Azure Databricks-feladat futtatásának megtekintése
Nyissa meg az előző lépésben másolt URL-címet egy böngészőben az Azure Databricks-feladat futtatásának kimenetének megtekintéséhez:
4. lépés: A kísérlet és az MLflow futtatási részleteinek megtekintése
Lépjen a kísérlethez az Azure Databricks-munkaterületen.
Kattintson a kísérletre.
A futtatás részleteinek megjelenítéséhez kattintson egy hivatkozásra a Dátum oszlopban.
A futtatás naplóit a Feladat kimenete mezőben található Naplók hivatkozásra kattintva tekintheti meg.
Források
Néhány MLflow-projekt esetében lásd az MLflow alkalmazástárat, amely egy használatra kész projektek adattárát tartalmazza, amelynek célja, hogy megkönnyítse az ML-funkciók kódba való belefoglalását.