Sdílet prostřednictvím


Spouštění projektů MLflow v Azure Databricks

Poznámka

Projekty MLflow se už nepodporují.

Tato dokumentace byla vyřazena a nemusí být aktualizována. Produkty, služby nebo technologie uvedené v tomto obsahu se už nepodporují.

Projekt MLflow je formát pro balení kódu pro datovou vědu způsobem, který je opakovaně použitelný a reprodukovatelný. Komponenta MLflow Projects zahrnuje rozhraní API a nástroje příkazového řádku pro spouštění projektů, které se také integrují s komponentou Sledování, aby se automaticky zaznamenávaly parametry a potvrzení Gitu zdrojového kódu pro reprodukovatelnost.

Tento článek popisuje formát projektu MLflow a způsob vzdáleného spuštění projektu MLflow v clusterech Azure Databricks pomocí rozhraní příkazového řádku MLflow, což usnadňuje vertikální škálování kódu datové vědy.

Formát projektu MLflow

Jakýkoli místní adresář nebo úložiště Git je možné považovat za projekt MLflow. Následující konvence definují projekt:

  • Název projektu je název adresáře.
  • Softwarové prostředí je zadáno v python_env.yaml, pokud je k dispozici. Pokud není k dispozici žádný soubor python_env.yaml, MLflow při spuštění projektu používá prostředí virtualenv obsahující pouze Python (konkrétně nejnovější Python dostupný pro virtualenv).
  • Jakýkoli .py nebo .sh soubor v projektu může být vstupním bodem bez explicitně deklarovaných parametrů. Když spustíte takový příkaz se sadou parametrů, MLflow předá každý parametr na příkazovém řádku pomocí syntaxe --key <value>.

Další možnosti zadáte přidáním souboru MLproject, což je textový soubor v syntaxi YAML. Ukázkový soubor MLproject vypadá takto:

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

V případě Databricks Runtime 13.0 ML a novějších nejde úspěšně spustit projekty MLflow v rámci clusteru typů úloh Databricks. Pokud chcete migrovat existující projekty MLflow do Databricks Runtime 13.0 ML a novější, podívejte se na formát projektu MLflow Databricks Spark.

formát projektu úlohy Spark v MLflow Databricks

Projekt MLflow v Databricks Spark je typem projektu MLflow představeným ve verzi MLflow 2.14. Tento typ projektu podporuje spouštění projektů MLflow z clusteru úloh Sparku a dá se spustit pouze pomocí databricks back-endu.

Projekty úloh Databricks Spark musí být nastaveny buď na databricks_spark_job.python_file, nebo entry_points. Nezadání jednoho nebo zadání obou nastavení vyvolá výjimku.

Následuje příklad souboru MLproject, který používá nastavení databricks_spark_job.python_file. Toto nastavení zahrnuje použití pevně zakódované cesty pro soubor spuštění Pythonu a jeho argumenty.

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

Následuje příklad souboru MLproject, který používá nastavení 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}"

Nastavení entry_points umožňuje předávat parametry, které používají parametry příkazového řádku, například:

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

Pro projekty úloh Databricks Spark platí následující omezení:

  • Tento typ projektu nepodporuje zadání následujících částí v souboru MLproject: docker_env, python_envnebo conda_env.
  • Závislosti pro váš projekt musí být zadány v poli python_libraries oddílu databricks_spark_job. Verze Pythonu nelze přizpůsobit pomocí tohoto typu projektu.
  • Spuštěné prostředí musí používat hlavní prostředí modulu runtime ovladače Spark ke spouštění v clusterech úloh, které používají Databricks Runtime 13.0 nebo vyšší.
    • Stejně tak musí být všechny závislosti Pythonu definované podle potřeby pro projekt nainstalovány jako závislosti clusteru Databricks. Toto chování se liší od chování při spuštění předchozího projektu, kdy je potřeba nainstalovat knihovny v samostatném prostředí.

Spuštění projektu MLflow

Pokud chcete spustit projekt MLflow v clusteru Azure Databricks ve výchozím pracovním prostoru, použijte tento příkaz:

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

kde <uri> je identifikátor URI úložiště Git nebo složka obsahující projekt MLflow a <json-new-cluster-spec> je dokument JSON obsahující new_cluster strukturu. Identifikátor URI Gitu by měl být ve formátu: https://github.com/<repo>#<project-folder>.

Příkladem specifikace clusteru je:

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

Pokud potřebujete nainstalovat knihovny na pracovní uzel, použijte formát specifikace clusteru. Všimněte si, že soubory kol Pythonu se musí nahrát do DBFS a zadat jako pypi závislostí. Například:

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

Důležitý

  • .egg a .jar závislosti nejsou podporovány pro projekty MLflow.
  • Spouštění projektů MLflow s prostředími Dockeru se nepodporuje.
  • Při spuštění projektu MLflow v Databricks musíte použít novou specifikaci clusteru. Spouštění projektů s existujícími clustery se nepodporuje.

Použití SparkR

Aby bylo možné použít SparkR ve spuštění projektu MLflow, musí kód projektu nejprve nainstalovat a importovat SparkR následujícím způsobem:

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

library(SparkR)

Váš projekt pak může inicializovat relaci SparkR a používat SparkR jako normální:

sparkR.session()
...

Příklad

Tento příklad ukazuje, jak vytvořit experiment, spustit projekt kurzu MLflow v clusteru Azure Databricks, zobrazit výstup spuštění úlohy a zobrazit spuštění v experimentu.

Požadavky

  1. Nainstalujte MLflow pomocí pip install mlflow.
  2. Nainstalujte a nakonfigurujte Databricks rozhraní příkazového řádku. K spouštění úloh v clusteru Azure Databricks se vyžaduje mechanismus ověřování rozhraní příkazového řádku Databricks.

Krok 1: Vytvoření experimentu

  1. V pracovním prostoru vyberte Vytvořit > experiment MLflow.

  2. Do pole Název zadejte Tutorial.

  3. Klikněte na Vytvořit. Poznamenejte si ID experimentu. V tomto příkladu je 14622565.

    ID experimentu

Krok 2: Spuštění projektu kurzu MLflow

Následující kroky nastaví proměnnou prostředí MLFLOW_TRACKING_URI a spustí projekt, zaznamená parametry trénování, metriky a trénovaný model do experimentu, který jste si poznamenali v předchozím kroku:

  1. Nastavte proměnnou prostředí MLFLOW_TRACKING_URI na pracovní prostor Azure Databricks.

    export MLFLOW_TRACKING_URI=databricks
    
  2. Spusťte projekt kurzu MLflow a trénujte model vína . Nahraďte <experiment-id> ID experimentu, které jste si poznamenali v předchozím kroku.

    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. Zkopírujte adresu URL https://<databricks-instance>#job/<job-id>/run/1 na posledním řádku výstupu spuštění MLflow.

Krok 3: Zobrazení spuštění úlohy Azure Databricks

  1. Otevřete adresu URL, kterou jste zkopírovali v předchozím kroku v prohlížeči, a zobrazte výstup spuštění úlohy Azure Databricks:

    výstup ze spuštění úlohy

Krok 4: Zobrazit experiment a podrobnosti o spuštění v MLflow

  1. Přejděte k experimentu v pracovním prostoru Azure Databricks.

    Přejít k experimentu

  2. Klikněte na experiment.

    Zobrazit experiment

  3. Pokud chcete zobrazit podrobnosti o spuštění, klikněte na odkaz ve sloupci Datum.

    podrobnosti o spuštění

Protokoly z běhu můžete zobrazit kliknutím na odkaz Protokoly v poli Výstup úlohy.

Prostředky

Některé příklady projektů MLflow najdete v knihovně aplikací MLflow, která obsahuje úložiště připravených projektů, jejichž cílem je snadno zahrnout funkce ML do kódu.