Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте Declarative Automation Bundles для планирования задачи на GPU AI Runtime и комбинирования её с другой задачей, например, с подготовкой данных до основного процесса. Определите рабочую нагрузку и её расписание в YAML, затем разверните их как задачу. Для учебного конвейера запускайте предобработку на вычислительных ресурсах CPU и начинайте обучение на GPU после того, как данные будут готовы.
Это руководство начинается с ворклоада, который печатает «Hello world», затем строит запланированный конвейер предобработки и обучения. Если у вас уже есть YAML для рабочей нагрузки AI Runtime, см. «Преобразование рабочей нагрузки AI Runtime в бандл».
Принцип работы
-
Пакет содержит ваш код и конфигурацию
databricks.yml. - Работа группирует задачи и определяет, когда они выполняются.
-
ai_runtime_taskзапускает вашу команду в AI Runtime.
Поле depends_on объединяет задачи в направленный ациклический граф (DAG), и поле schedule планирует выполнение вашей задачи по расписанию.
databricks bundle deploy загружает код и создаёт или обновляет задание.
databricks bundle run сразу же запускает выполнение задания. При каждом запуске AI Runtime предоставляет GPU-вычисления, запускает вашу команду и записывает запуск в названный эксперимент MLflow.
Requirements
- Рабочая область в поддерживаемом регионе. См. Требования.
- Используйте последнюю версию Databricks CLI, аутентифицированную в вашем рабочем пространстве. Обновите существующую установку перед использованием этих примеров.
- Для примера предварительной обработки — существующий том Unity Catalog. Для этого тома удостоверению запуска задания требуются привилегии
USE CATALOG,USE SCHEMA,READ VOLUMEиWRITE VOLUME. См. раздел "Привилегии" для томов каталога Unity.
Пример Hello World с ai_runtime_task
В этом примере выполнена команда shell на одном GPU A10.
Создайте каталог для пакета. В этом каталоге создайте
command.shс следующим содержимым:#!/usr/bin/env bash set -euo pipefail echo "Hello world"Создайте
databricks.ymlв одной и той же директории:bundle: name: hello-ai-runtime resources: jobs: hello: name: hello-ai-runtime tasks: - task_key: hello environment_key: default ai_runtime_task: experiment: hello-ai-runtime deployments: - command_path: ${workspace.file_path}/command.sh compute: accelerator_type: GPU_1xA10 accelerator_count: 1 environments: - environment_key: default spec: environment_version: '6' targets: dev: mode: development default: trueИз каталога bundle проверьте, разверните и выполните задание:
databricks bundle validate --target dev databricks bundle deploy --target dev databricks bundle run hello --target devОткройте URL запуска, напечатанный CLI, и просмотрите
helloвывод задачи. Он содержитHello world. Серия также появляется в экспериментеhello-ai-runtimeMLflow.
Более сложный пример: Запланировать конвейер предварительной обработки и обучения
Этот пример готовит небольшой набор данных на CPU, а затем обучает линейную модель на одном GPU A10. Обе задачи используют один и тот же файл тома для передачи данных между ними. Работа запланирована на 09:00 UTC каждый день, расписание приостановлено, пока вы его не протестируете.
Создание проекта
Создайте отдельный каталог с следующим оформлением:
scheduled-training/ ├── databricks.yml ├── prep.py ├── command.sh └── src/ └── train.pyСоздайте
prep.pyсо следующим содержимым. Замените<catalog>,<schema>и<volume>на названия ваших томов. Этот блокнот нормализует входные значения и записывает подготовленные данные в хранилище:# Databricks notebook source import json from pathlib import Path data_path = Path("/Volumes/<catalog>/<schema>/<volume>/scheduled-training/data.json") inputs = [value / 10 for value in range(10)] data = {"x": inputs, "y": [2 * value + 1 for value in inputs]} data_path.parent.mkdir(parents=True, exist_ok=True) data_path.write_text(json.dumps(data)) print(f"Prepared {len(inputs)} rows at {data_path}")Создайте
src/train.pyс использованием следующего контента. Используйте тот же путь тома, что и вprep.py:import json from pathlib import Path import torch data_path = Path("/Volumes/<catalog>/<schema>/<volume>/scheduled-training/data.json") data = json.loads(data_path.read_text()) x = torch.tensor(data["x"], device="cuda").reshape(-1, 1) y = torch.tensor(data["y"], device="cuda").reshape(-1, 1) model = torch.nn.Linear(1, 1).to("cuda") optimizer = torch.optim.SGD(model.parameters(), lr=0.1) for _ in range(200): optimizer.zero_grad() loss = torch.nn.functional.mse_loss(model(x), y) loss.backward() optimizer.step() print(f"Trained on {x.device}: loss={loss.item():.4f}")Создайте
command.shдля запуска кода обучения. Пакет ниже содержитsrc/, поэтомуCODE_SOURCE_PATHуказывает на извлеченный каталогsrc:#!/usr/bin/env bash set -euo pipefail cd "$CODE_SOURCE_PATH" python train.pyСоздайте
databricks.ymlс использованием следующего контента. Набор включаетsrc/для задачи GPU.prepБлокнот работает на бессерверных вычислительных ресурсах CPU, иdepends_onзапускаетtrainтолько после того, какprepзавершится успешно.max_concurrent_runs: 1Предотвращает перезапись входных файлов при запусках этого задания:bundle: name: scheduled-training artifacts: code: type: tgz path: . include: [src] files: - source: ./dist/code.tgz resources: jobs: train_pipeline: name: scheduled-training max_concurrent_runs: 1 schedule: quartz_cron_expression: '0 0 9 * * ?' timezone_id: UTC pause_status: PAUSED tasks: - task_key: prep notebook_task: notebook_path: ./prep.py - task_key: train depends_on: - task_key: prep environment_key: training ai_runtime_task: experiment: scheduled-training code_source_path: ./dist/code.tgz deployments: - command_path: ${workspace.file_path}/command.sh compute: accelerator_type: GPU_1xA10 accelerator_count: 1 environments: - environment_key: training spec: environment_version: '6' dependencies: - torch targets: dev: mode: development default: true
Протестируйте и включите планировщик
В
scheduled-training/разверните пакет и запустите вручную:databricks bundle validate --target dev databricks bundle deploy --target dev databricks bundle run train_pipeline --target devОткройте URL запуска, напечатанный CLI. Убедитесь, что
prepвыполняется успешно до того, какtrainначнется. Выводprepпоказывает 10 подготовленных строк, а выводtrainпоказываетTrained on cuda:0и потерю.В
databricks.ymlизмените у расписанияpause_statusсPAUSEDнаUNPAUSED. Блок расписания сейчас такой:schedule: quartz_cron_expression: '0 0 9 * * ?' timezone_id: UTC pause_status: UNPAUSEDРазвернуть изменение для активации ежедневного расписания:
databricks bundle deploy --target devУстановка
pause_status: UNPAUSEDявно включает это расписание даже для цели разработки. В разделе Jobs & Pipelines откройте развернутое задание и убедитесь, что его расписание активно на 09:00 UTC. См . статью "Выполнение заданий по расписанию".
Чтобы приостановить запланированные запуски, установите pause_status: PAUSED и разверните заново. Чтобы удалить пример задачи и файлы, загруженные бандлом, выполните следующее из его каталога bundle:
databricks bundle destroy --target dev
Подготовленные данные в вашем разделе сохраняются. Удалите scheduled-training каталог данных, когда он вам больше не нужен.
Дополнительные ресурсы
- Преобразуйте существующую рабочую нагрузку YAML для AI Runtime в пакет. См. Преобразовать нагрузку AI Runtime в пакет.
- Настраивайте упаковку кода, вычисления, среды и параметры задач. См. задачи по настройке пакета среды выполнения AI.
- Запланируйте существующий блокнот на GPU. См. статью "Создание запланированных заданий записной книжки и управление ими".
- Отслеживайте тренировочные пробежки. См. Отслеживание эксперимента и наблюдаемость.
- Контрольная точка состояния модели, оптимизатора и конвейера данных. См. Улучшение эффективности и устойчивости обучения в AI Runtime.