Uruchamianie projektów platformy MLflow w usłudze Azure Databricks

Projekt MLflow to format pakowania kodu nauki o danych w sposób wielokrotnego użytku i powtarzalny. Składnik MLflow Projects zawiera interfejs API i narzędzia wiersza polecenia do uruchamiania projektów, które integrują się również ze składnikiem Tracking, aby automatycznie rejestrować parametry i zatwierdzanie kodu źródłowego w celu odtworzenia.

W tym artykule opisano format projektu MLflow oraz sposób zdalnego uruchamiania projektu MLflow w klastrach usługi Azure Databricks przy użyciu interfejsu wiersza polecenia platformy MLflow, co ułatwia skalowanie w pionie kodu nauki o danych.

Format projektu MLflow

Każdy katalog lokalny lub repozytorium Git może być traktowany jako projekt MLflow. Następujące konwencje definiują projekt:

  • Nazwa projektu to nazwa katalogu.
  • Środowisko oprogramowania jest określone w pliku python_env.yaml, jeśli istnieje. Jeśli plik nie python_env.yaml istnieje, platforma MLflow używa środowiska virtualenv zawierającego tylko język Python (w szczególności najnowszy język Python dostępny dla środowiska virtualenv) podczas uruchamiania projektu.
  • Dowolny .py plik lub .sh w projekcie może być punktem wejścia, bez jawnie zadeklarowanych parametrów. Po uruchomieniu takiego polecenia z zestawem parametrów MLflow przekazuje każdy parametr w wierszu polecenia przy użyciu --key <value> składni.

Możesz określić więcej opcji, dodając plik MLproject, który jest plikiem tekstowym w składni YAML. Przykładowy plik MLproject wygląda następująco:

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

Uruchamianie projektu MLflow

Aby uruchomić projekt MLflow w klastrze usługi Azure Databricks w domyślnym obszarze roboczym, użyj polecenia :

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

gdzie <uri> jest identyfikatorem URI repozytorium Git lub folderem zawierającym projekt MLflow i <json-new-cluster-spec> jest dokumentem JSON zawierającym strukturę new_cluster. Identyfikator URI usługi Git powinien mieć postać: https://github.com/<repo>#<project-folder>.

Przykładowa specyfikacja klastra to:

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

Jeśli musisz zainstalować biblioteki w ramach procesu roboczego, użyj formatu "specyfikacja klastra". Należy pamiętać, że pliki wheel języka Python muszą zostać przekazane do systemu plików DBFS i określone jako pypi zależności. Na przykład:

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

Ważne

  • .egg i .jar zależności nie są obsługiwane w przypadku projektów MLflow.
  • Wykonywanie projektów MLflow ze środowiskami platformy Docker nie jest obsługiwane.
  • Podczas uruchamiania projektu MLflow w usłudze Databricks należy użyć nowej specyfikacji klastra. Uruchamianie projektów w istniejących klastrach nie jest obsługiwane.

Korzystanie z platformy SparkR

Aby można było użyć aparatu SparkR w uruchomieniu projektu MLflow, kod projektu musi najpierw zainstalować i zaimportować aparat SparkR w następujący sposób:

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

library(SparkR)

Projekt może następnie zainicjować sesję sparkR i używać aparatu SparkR w zwykły sposób:

sparkR.session()
...

Przykład

W tym przykładzie pokazano, jak utworzyć eksperyment, uruchomić projekt samouczka MLflow w klastrze usługi Azure Databricks, wyświetlić dane wyjściowe uruchomienia zadania i wyświetlić przebieg w eksperymencie.

Wymagania

  1. Zainstaluj platformę MLflow przy użyciu polecenia pip install mlflow.
  2. Zainstaluj i skonfiguruj interfejs wiersza polecenia usługi Databricks. Mechanizm uwierzytelniania interfejsu wiersza polecenia usługi Databricks jest wymagany do uruchamiania zadań w klastrze usługi Azure Databricks.

Krok 1. Tworzenie eksperymentu

  1. W obszarze roboczym wybierz pozycję Utwórz > eksperyment MLflow.

  2. W polu Nazwa wprowadź wartość Tutorial.

  3. Kliknij pozycję Utwórz. Zanotuj identyfikator eksperymentu. W tym przykładzie jest to 14622565.

    Identyfikator eksperymentu

Krok 2. Uruchamianie projektu samouczka MLflow

Następujące kroki umożliwiają skonfigurowanie zmiennej środowiskowej MLFLOW_TRACKING_URI i uruchomienie projektu, zarejestrowanie parametrów trenowania, metryk i wytrenowanego modelu do eksperymentu zanotowanego w poprzednim kroku:

  1. Ustaw zmienną MLFLOW_TRACKING_URI środowiskową na obszar roboczy usługi Azure Databricks.

    export MLFLOW_TRACKING_URI=databricks
    
  2. Uruchom projekt samouczka MLflow, wytrenuj model wina. Zastąp element <experiment-id> identyfikatorem eksperymentu zanotowany w poprzednim 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. Skopiuj adres URL https://<databricks-instance>#job/<job-id>/run/1 w ostatnim wierszu danych wyjściowych przebiegu MLflow.

Krok 3. Wyświetlanie uruchomienia zadania usługi Azure Databricks

  1. Otwórz adres URL skopiowany w poprzednim kroku w przeglądarce, aby wyświetlić dane wyjściowe uruchomienia zadania usługi Azure Databricks:

    Dane wyjściowe uruchomienia zadania

Krok 4. Wyświetlanie szczegółów eksperymentu i przebiegu platformy MLflow

  1. Przejdź do eksperymentu w obszarze roboczym usługi Azure Databricks.

    Przejdź do eksperymentu

  2. Kliknij eksperyment.

    Wyświetlanie eksperymentu

  3. Aby wyświetlić szczegóły przebiegu, kliknij link w kolumnie Date (Data).

    Szczegóły przebiegu

Dzienniki z przebiegu można wyświetlić, klikając link Dzienniki w polu Dane wyjściowe zadania.

Zasoby

Aby zapoznać się z przykładowymi projektami MLflow, zobacz bibliotekę aplikacji MLflow zawierającą repozytorium gotowych do uruchomienia projektów mających na celu ułatwienie uwzględnienia funkcji uczenia maszynowego w kodzie.