Megosztás a következőn keresztül:


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.yamlvan megadva. Ha nincs python_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_envvagy conda_env.
  • A projekt függőségeit a python_libraries szakasz mezőjében databricks_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

  1. Az MLflow telepítése a következővel pip install mlflow: .
  2. 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

  1. A munkaterületen válassza az MLflow-kísérlet létrehozása lehetőséget>.

  2. A Név mezőbe írja be a következőt Tutorial:

  3. Kattintson a Létrehozás gombra. Jegyezze fel a kísérlet azonosítóját. Ebben a példában ez 14622565.

    Kísérlet azonosítója

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:

  1. Állítsa be a MLFLOW_TRACKING_URI környezeti változót az Azure Databricks-munkaterületre.

    export MLFLOW_TRACKING_URI=databricks
    
  2. 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 ===
    
  3. 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

  1. 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:

    Feladatfuttatás kimenete

4. lépés: A kísérlet és az MLflow futtatási részleteinek megtekintése

  1. Lépjen a kísérlethez az Azure Databricks-munkaterületen.

    Ugrás a kísérletre

  2. Kattintson a kísérletre.

    Kísérlet megtekintése

  3. A futtatás részleteinek megjelenítéséhez kattintson egy hivatkozásra a Dátum oszlopban.

    Futtatás részletei

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.