Подготовка обучающих нагрузок к промышленной эксплуатации

Important

Эта функция доступна в общедоступной предварительной версии.

Используйте DABs для определения обучающей рабочей нагрузки AI Runtime в виде кода. Храните это в системе контроля версий, развертывайте в разных средах, запускайте по расписанию и объединяйте с другими задачами. На этой странице описан сценарий собственного обучения, при котором ai_runtime_task выполняет вашу собственную команду для каталога с кодом в бессерверной среде GPU-вычислений.

Это совсем другая задача, чем запуск ноутбука на серверной видеокарте через пакет. Для базового примера пакета notebook-on-GPU см. Jobs API и Declarative Automation Bundles.

Requirements

Определите задачу AI Runtime в составе пакета

Задает имя эксперимента ai_runtime_task, указывает ваш обучающий код с помощью code_source_path и определяет одно развертывание: команду для запуска и GPU, на котором она будет выполняться. Добавьте его в задачу в вашем пакете:

resources:
  jobs:
    train:
      tasks:
        - task_key: train
          ai_runtime_task:
            experiment: my-experiment
            code_source_path: ./dist/code.tgz
            deployments:
              - command_path: ./command.sh
                compute:
                  accelerator_type: GPU_1xA10
                  accelerator_count: 1

code_source_path указывает на ваш пакетный обучающий код, и command_path это скрипт, который выполняет задача. Повторные попытки, тайм-ауты и разрешения для задачи и задания настраиваются так же, как и для любого задания Azure Databricks, поэтому ваши существующие практики использования bundle применяются и здесь. Чтобы узнать, как упаковать и ссылаться на ваш код, см. раздел «Отправка вашего учебного кода».

ai_runtime_task Поля

Поле Type Description
experiment String Required. Название эксперимента MLflow для запуска. См. Отслеживание эксперимента и наблюдаемость.
code_source_path String Код обучения для выполнения: выходной файл упакованного артефакта tgz или путь /Workspace или /Volumes к уже загруженному коду. См. Развертывание вашего обучающего кода.
deployments Последовательность Required. Единое развертывание, описывающее команду и вычислительные ресурсы для её выполнения. Каждая запись содержит command_path, computeи необязательное name.
deployments[].command_path String Required. Скрипт, выполняемый задачей на каждом узле.
deployments[].compute.accelerator_type String Required. Тип GPU, например GPU_1xA10, , GPU_1xH100, или GPU_8xH100.
deployments[].compute.accelerator_count Целое число Required. Общее количество GPU во всех узлах — кратное числу на узл, закодированного в accelerator_type.
deployments[].name String Необязательное название для развертывания, используемое в логах и интерфейсе.
docker_image_url String Опциональный кастомный образ Docker для запуска команды вместо управляемой среды. См. раздел "Использование пользовательских образов Docker".
mlflow_run String Опциональное имя отображения для запуска MLflow.
mlflow_experiment_directory String Необязательная папка рабочего пространства, в рамках которой создаётся эксперимент. Начните с /Workspace. Устанавливайте это при запуске от имени сервисной учётной записи, у которой нет пользовательского каталога по умолчанию.
mlflow_artifact_location String Необязательный корневой путь для артефактов MLflow, например путь /Volumes/<catalog>/<schema>/<volume>/…. Должно совпадать с расположением артефакта существующего эксперимента или не указываться.

Устанавливайте повторные попытки, тайм-ауты, разрешения и окружение (environment_key) для задачи и задания, а не внутри ai_runtime_task. Полное справочное описание задачи см. в разделе AI Runtime task.

Настройте аппаратный ускоритель

Установите для accelerator_type количество графических процессоров, необходимое для вашей рабочей нагрузки, а для accelerator_count — общее количество графических процессоров. Это число кратно числу GPU на узел: 1 для GPU_1xA10 и GPU_1xH100, и 8 для GPU_8xH100. Число, превышающее размер на один узел, приводит к тому, что задача выполняется на нескольких узлах; например, при GPU_8xH100 и accelerator_count: 16 задача выполняется на двух узлах. Для получения рекомендаций по выбору ускорителя смотрите раздел «Аппаратные опции».

Note

Для многоузловых запусков AI Runtime выполняет вашу команду на каждом узле и заполняет стандартные переменные среды распределенного обучения в среде задачи —NUM_NODES , WORLD_SIZE, LOCAL_WORLD_SIZEMASTER_ADDR, и MASTER_PORT. Считывайте их из вашей команды (например, при torchrunзапуске); не задавайте их в бандле.

Задайте окружение и зависимости

Объявите блок environments в задании и сошлитесь на него в задаче с помощью environment_key. AI Runtime устанавливает перечисленные зависимости перед запуском вашей команды:

resources:
  jobs:
    train:
      tasks:
        - task_key: train
          environment_key: default
          ai_runtime_task:
            # experiment, code_source_path, and deployments as above
      environments:
        - environment_key: default
          spec:
            environment_version: '5'
            dependencies:
              - numpy

Доступные локации смотрите в разделе «Настройте окружение».

Отправьте свой тренировочный код

code_source_path Указывает задаче, где находится ваш обучающий код. Он имеет одну из двух форм:

  • Упакованный tgz артефакт — объявите артефакт и укажите code_source_path на файл его вывода. Azure Databricks создаёт архив tar и загружает его на databricks bundle deploy. Так вы отправляете код из локального каталога проектов или из проверенной версии Git.
  • Рабочее пространство или путь тома — код, который уже загружен, использован as-is.

Упакованный артефакт

Объявите артефакт tgz и укажите code_source_path на файл его вывода. На databricks bundle deploy CLI создаёт tar-архив, загружает его, и задача извлекает его и выполняет вашу команду в нём:

artifacts:
  code:
    type: tgz
    path: .
    include: [src]
    files:
      - source: ./dist/code.tgz
resources:
  jobs:
    train:
      tasks:
        - task_key: train
          ai_runtime_task:
            code_source_path: ./dist/code.tgz

Используйте include для упаковки файлов из рабочего дерева или git для снимков коммитированной ветки или коммита.

Рабочий пространственный или путь тома

Чтобы использовать уже загруженный код, установите для code_source_path путь /Volumes/… или /Workspace/…. Azure Databricks использует путь as-is и ничего не упаковывает.

Поля артефакта tgz:

Поле Description
type tgz Создаёт gzip-тарбол из исходных файлов, вместо выполнения build команды.
path Базовый каталог для упаковки. include пути и имена записей архива указываются относительно него.
include Список подпутей path к пакету. Не упаковывать всё из path. Учитывает .gitignore; общие для всего пакета sync.include и sync.exclude не применяются. Альтернатива команде build.
git Создайте снимок зафиксированной ссылки Git вместо рабочего дерева. Задайте git.branch или git.commit (commit имеет приоритет, если заданы оба). Альтернатива команде build.
files[].source Путь построенного тарта. Наведите code_source_path на это.

Note

AI Runtime извлекает ваш код в каталог и показывает его как CODE_SOURCE_PATH переменную среды. Укажите ссылку на него в команде, чтобы относительные пути корректно разрешались, например cd "$CODE_SOURCE_PATH", перед запуском скрипта.

Полный пример

Этот пример обучается на одном GPU A10 из локального проекта, без предварительной настройки CLI, кроме установки и настройки Azure Databricks CLI. В проекте три файла:

my-training/
├── databricks.yml
├── command.sh
└── src/
    └── train.py

command.sh — это точка входа с именем command_path. Он превращается в извлекательный каталог кода и запускает обучающий скрипт:

#!/usr/bin/env bash
set -euo pipefail
cd "$CODE_SOURCE_PATH"
python train.py

databricks.yml задаёт имя пакета, упаковывает src/ как артефакт tgz, запускает его как ai_runtime_task, устанавливает numpy в среду выполнения задачи и определяет цели для разработки и продакшена:

bundle:
  name: my-training

artifacts:
  code:
    type: tgz
    path: .
    include: [src]
    files:
      - source: ./dist/code.tgz

resources:
  jobs:
    train:
      name: my-training
      tasks:
        - task_key: train
          environment_key: default
          ai_runtime_task:
            experiment: /Users/me@example.com/my-training
            code_source_path: ./dist/code.tgz
            deployments:
              - command_path: ./command.sh
                compute:
                  accelerator_type: GPU_1xA10
                  accelerator_count: 1
      environments:
        - environment_key: default
          spec:
            environment_version: '5'
            dependencies:
              - numpy

targets:
  dev:
    mode: development
    default: true
  prod:
    mode: production

Разверните пакет и запустите задание. databricks bundle deploy Создаёт и загружает tgz артефакт и создаёт задание; databricks bundle run запускает его:

databricks bundle deploy --target dev
databricks bundle run train --target dev

Создание многозадачных рабочих процессов

ai_runtime_task — это задача задания Azure Databricks, поэтому она встраивается в остальную часть задания. Можно выполнить этап подготовки перед обучением, объединить задачи GPU и CPU в одной задаче и использовать разные ускорители для каждой задачи.

Заказывайте задачи с depends_on

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

resources:
  jobs:
    train_pipeline:
      tasks:
        - task_key: prep
          notebook_task:
            notebook_path: ./prep.py
        - task_key: train
          depends_on:
            - task_key: prep
          ai_runtime_task:
            experiment: my-experiment
            code_source_path: ./dist/code.tgz
            deployments:
              - command_path: ./command.sh
                compute:
                  accelerator_type: GPU_1xA10
                  accelerator_count: 1

Комбинируйте задачи GPU и CPU

В приведённом выше конвейере только для этапа обучения нужен графический процессор. Сохранение работы вне GPU, такой как подготовка данных, в отдельных задачах, позволяет GPU сосредоточиться на обучении.

Note

ai_runtime_task не поддерживает значения задач в заданиях Azure Databricks ({{tasks.<task_key>.values.<name>}} или dbutils.jobs.taskValues). Чтобы передавать данные между шагами, записывайте их в общую точку, которую могут читать обе задачи, например, том Unity Catalog или файл рабочего пространства, и ссылайтесь на этот путь из каждой задачи.

Распланируйте рабочую нагрузку

Добавьте schedule к заданию, чтобы запускать его по расписанию. Отправьте расписание на паузу, чтобы развертывание пакета не начало запуска само по себе, а затем отмените паузу, когда будете готовы:

resources:
  jobs:
    train_pipeline:
      schedule:
        quartz_cron_expression: '0 0 9 * * ?'
        timezone_id: UTC
        pause_status: PAUSED

Продвижение от разработки к производству

Перевод из среды разработки в промышленную среду — это стандартная возможность пакета, которую задача AI Runtime наследует без изменений.

Цели и режимы пакета

Определите цель для рабочей среды наряду с mode: production целью разработки. Целевой объект определяет, куда развёртывается пакет и как именуются его ресурсы:

targets:
  dev:
    mode: development
    default: true
  prod:
    mode: production

Развертывание и запуск

Разверните и запустите пакет на целевой системе с помощью стандартных команд bundle:

databricks bundle deploy --target dev
databricks bundle run train_pipeline --target dev

Дальнейшие действия