Запуск проектов MLflow в Azure Databricks

MLflow Project — это формат для упаковки кода обработки и анализа данных для повторного использования и воспроизведения. Компонент MLflow Projects включает API и средства командной строки для запуска проектов, которые также интегрируются с компонентом Отслеживания для автоматической записи параметров и фиксации Git исходного кода в целях воспроизведения.

В этой статье описывается формат MLflow Project и способ удаленного запуска проекта MLflow на кластерах Azure Databricks с помощью CLI MLflow, что упрощает вертикальное масштабирование кода обработки и анализа данных.

Формат проекта MLflow

Любой локальный каталог или репозиторий Git можно рассматривать как проект MLflow. В следующих соглашениях приводится описание проекта:

  • Имя проекта — это имя каталога.
  • Среда программного обеспечения указана в python_env.yaml, если она присутствует. Если файл отсутствует python_env.yaml , MLflow использует среду virtualenv, содержащую только Python (в частности, последнюю версию Python, доступную для virtualenv) при запуске проекта.
  • Любой файл .py или .sh в проекте может быть точкой входа, без прямо объявленных параметров. При выполнении такой команды с набором параметров MLflow передает каждый параметр в командной строке с помощью синтаксиса --key <value>.

Указываются дополнительные параметры при помощи добавления файла MLproject, который является текстовым файлом в синтаксисе YAML. Пример файла MLproject выглядит следующим образом:

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

Запуск проекта MLflow

Чтобы запустить проект MLflow в кластере Azure Databricks в рабочей области по умолчанию, используйте команду:

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

где <uri> — это URI репозитория Git или папка, содержащая проект MLflow, а <json-new-cluster-spec> — документ JSON, содержащий new_cluster structure. URI Git должен иметь вид: https://github.com/<repo>#<project-folder>.

Пример спецификации кластера:

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

Если необходимо установить библиотеки в рабочей роли, используйте формат "Спецификация кластера". Обратите внимание, что файлы колес Python должны быть отправлены в DBFS и указаны в качестве pypi зависимостей. Например:

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

Внимание

  • зависимости .egg и .jar не поддерживаются для проектов MLflow.
  • Выполнение проектов MLflow с помощью сред Docker не поддерживается.
  • Требуется использовать новую спецификацию кластера при выполнении MLflow Project на Databricks. Запуск проектов для существующих кластеров не поддерживается.

Использование SparkR

Чтобы использовать SparkR в MLflow Project, код проекта должен сначала установить и импортировать SparkR следующим образом:

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

library(SparkR)

Затем проект может инициализировать сеанс SparkR и использовать его в качестве обычного:

sparkR.session()
...

Пример

В этом примере показано, как создать эксперимент, запустить обучающий проект MLflow в кластере Azure Databricks, просмотреть выходные данные выполнения задания и выполнение в эксперименте.

Требования

  1. Установите MLflow с помощью pip install mlflow.
  2. Установите и настройте CLI Databricks. Для выполнения заданий в кластере Azure Databricks требуется механизм аутентификации CLI Databricks.

Шаг 1. Создание эксперимента

  1. В рабочей области выберите Создать >эксперимент MLflow.

  2. В поле "Имя" введите Tutorial.

  3. Нажмите кнопку Создать. Запишите идентификатор эксперимента. В нашем примере поисковый запрос будет выглядеть так: 14622565.

    Идентификатор эксперимента

Шаг 2. Запуск обучающего проекта MLflow

Следующие шаги служат для настройки переменной среды MLFLOW_TRACKING_URI и запускают проект, записывая параметры, метрики обучения и обучающую модель в эксперименте, указанном на предыдущем шаге:

  1. Задайте переменную среды MLFLOW_TRACKING_URI в рабочей области Azure Databricks.

    export MLFLOW_TRACKING_URI=databricks
    
  2. Запустите проект обучения MLflow, обучение модели WINE. Замените <experiment-id> идентификатором эксперимента, который вы записали на предыдущем шаге.

    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. Скопируйте URL-адрес https://<databricks-instance>#job/<job-id>/run/1 в последней строке выходных данных выполнения MLflow.

Шаг 3. Просмотр выполнения задания Azure Databricks

  1. Откройте URL-адрес, скопированный на предыдущем шаге, в браузере, чтобы просмотреть выходные данные выполнения задания Azure Databricks:

    Выходные данные выполнения задания

Шаг 4. Просмотр сведений о запуске эксперимента и MLflow

  1. Перейдите к эксперименту в рабочей области Azure Databricks.

    Перейти к эксперименту

  2. Нажмите на название эксперимента.

    Просмотр эксперимента

  3. Чтобы отобразить сведения о выполнении, нажмите на ссылку в столбце "Дата".

    Сведения о запуске

Чтобы просмотреть журналы запуска, нажмите ссылку Журналы в поле "Выходные данные задания".

Ресурсы

Некоторые примеры проектов MLflow см. в библиотеке MLflow App Library, которая содержит репозиторий готовых к выполнению проектов, предназначенных для упрощения включения функциональных возможностей ML в код.