Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik Declarative Automation Bundles om een AI Runtime GPU-workload te plannen en deze te combineren met ander werk, zoals upstream datavoorbereiding. Definieer de workload en het schema ervan in YAML en implementeer ze vervolgens als een taak. Voor een trainingspijplijn voer je preprocessing uit op CPU-compute en start je de GPU-training nadat de data klaar is.
Deze gids begint met een werklast die "Hello world" print, en bouwt vervolgens een geplande preprocessing- en trainingspijplijn. Als je al een AI Runtime workload YAML hebt, zie dan Een AI Runtime-workload converteren naar een bundle.
Hoe werkt het?
- Een bundel bevat je code en een
databricks.ymlconfiguratie. - Een job groepeert taken en definieert wanneer ze draaien.
-
ai_runtime_taskvoert je commando uit op AI Runtime.
Het depends_on veld verbindt taken in een gerichte acyclische graaf (DAG), en het schedule veld plant je taak in om volgens een frequentie te worden uitgevoerd.
databricks bundle deploy uploadt de code en maakt of werkt de taak bij.
databricks bundle run start onmiddellijk een taakuitvoering. Bij elke run stelt AI Runtime GPU-rekenkracht beschikbaar, voert je commando uit en registreert de run in het benoemde MLflow-experiment.
Requirements
- Een werkruimte in een ondersteunde regio. Zie Vereisten.
- De nieuwste Databricks CLI, geverifieerd bij je werkruimte. Werk een bestaande installatie bij voordat je deze voorbeelden gebruikt.
- Gebruik voor het preprocessing-voorbeeld een bestaand Unity Catalog-volume. De run-identiteit van de taak vereist
USE CATALOG,USE SCHEMA,READ VOLUMEenWRITE VOLUME-rechten voor dat volume. Zie Bevoegdheden voor Unity Catalog-volumes.
Hallo wereld voorbeeld met ai_runtime_task
Dit voorbeeld draait een shell-commando op één A10 GPU.
Maak een map aan voor de bundel. Maak in die map het bestand
command.shaan met de volgende inhoud:#!/usr/bin/env bash set -euo pipefail echo "Hello world"Maak
databricks.ymlaan in dezelfde map: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: trueVanuit de bundeldirectory valideer, deploy en voer de taak uit:
databricks bundle validate --target dev databricks bundle deploy --target dev databricks bundle run hello --target devOpen de run URL die door de CLI is afgedrukt en bekijk de output van de
hellotaak. Het bevatHello world. De run komt ook voor in hethello-ai-runtimeMLflow-experiment.
Complexer voorbeeld: Een preprocessing- en trainingspipeline plannen
Dit voorbeeld bereidt een kleine dataset voor met CPU-rekenkracht en traint vervolgens een lineair model op één A10 GPU. Beide taken gebruiken hetzelfde volumebestand om data tussen hen door te geven. De taak staat gepland op 09:00 UTC elke dag, met het schema gepauzeerd totdat je het test.
Het project maken
Maak een aparte map aan met de volgende lay-out:
scheduled-training/ ├── databricks.yml ├── prep.py ├── command.sh └── src/ └── train.pyMaak
prep.pymet de volgende inhoud. Vervang<catalog>,<schema>, en<volume>door de namen van je volumes. Dit bronnotitieboek normaliseert de invoerwaarden en schrijft de voorbereide data naar het 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}")Maak
src/train.pymet de volgende inhoud. Gebruik hetzelfde volumepad als inprep.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}")Maak
command.shom de trainingscode uit te voeren. De bundel hieronder verpaktsrc/, dusCODE_SOURCE_PATHwijst naar de geëxtraheerdesrcdirectory:#!/usr/bin/env bash set -euo pipefail cd "$CODE_SOURCE_PATH" python train.pyMaak
databricks.ymlmet de volgende inhoud. De bundel verpaktsrc/voor de GPU-taak. Deprepnotebook draait op serverless CPU-rekenkracht endepends_onstarttrainpas nadatprepis geslaagd.max_concurrent_runs: 1voorkomt dat runs van deze taak elkaars invoerbestand overschrijven: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
Test en activeer het schema
Vanaf
scheduled-training/, implementeer je de bundel en start je een handmatige run:databricks bundle validate --target dev databricks bundle deploy --target dev databricks bundle run train_pipeline --target devOpen de run URL die door de CLI is afgedrukt. Bevestig dat
preplukt voordattrainbegint. Deprepoutput rapporteert 10 voorbereide rijen, en detrainoutput rapporteertTrained on cuda:0en het verlies.In
databricks.yml, verander depause_statusvan het schema vanPAUSEDnaarUNPAUSED. Het schema is nu:schedule: quartz_cron_expression: '0 0 9 * * ?' timezone_id: UTC pause_status: UNPAUSEDImplementeer de wijziging om het dagelijkse schema te activeren:
databricks bundle deploy --target devDoor
pause_status: UNPAUSEDexpliciet in te stellen, wordt dit schema expliciet ingeschakeld, zelfs voor een ontwikkelingsdoel. Open in Jobs & Pipelines de geïmplementeerde taak en bevestig dat het schema actief is voor 09:00 UTC. Zie Taken uitvoeren volgens een planning.
Om geplande runs te pauzeren, stel pause_status: PAUSED in en deploy opnieuw. Om de voorbeeldtaak en de bestanden die door de bundel zijn geüpload te verwijderen, voer je het volgende uit vanuit de bundelmap:
databricks bundle destroy --target dev
De voorbereide gegevens in je volume blijven behouden. Verwijder de scheduled-training datamap wanneer je die niet meer nodig hebt.
Aanvullende bronnen
- Zet een bestaande AI Runtime workload YAML om in een bundel. Zie Converteer een AI Runtime-workload naar een bundel.
- Codeverpakking, rekenkracht, omgevingen en taakparameters configureren. Zie AI-runtime-bundeltaken configureren.
- Een bestaande notebook plannen op GPU. Zie Schema met de Jobs API en Declarative Automation Bundles.
- Trainingsruns bijhouden. Zie het bijhouden van experimenten en observabiliteit.
- Sla de status van het checkpointmodel, de optimizer en de datapijplijn op. Zie Verbeter trainingsprestaties en veerkracht op AI Runtime.