Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Použijte Declarative Automation Bundles k plánování AI Runtime GPU workloadu a kombinujte ho s dalšími pracemi, například přípravou dat v upstream fázi. Definujte pracovní zátěž a její harmonogram v YAML a pak je nasaďte jako úlohu. V rámci tréninkové pipeline spusťte předzpracování na CPU a trénování na GPU spusťte až po připravení dat.
Tento průvodce začíná úlohou, která vytiskne „Hello world“, poté vytvoří plánovanou pipeline pro předzpracování a trénování. Pokud už máte AI Runtime workload YAML, podívejte se na Převod workloadu AI Runtime na bundle.
Jak to funguje
-
Balíček obsahuje váš kód a
databricks.ymlkonfiguraci. - Úloha seskupuje úkoly a definuje, kdy se spouštějí.
-
ai_runtime_taskspustí váš příkaz v AI Runtime.
Pole depends_on propojuje úkoly do orientovaného acyklického grafu (DAG) a pole schedule plánuje pravidelné spouštění vaší úlohy.
databricks bundle deploy Nahraje kód a vytvoří nebo aktualizuje úlohu.
databricks bundle run okamžitě spustí běh úlohy. Při každém spuštění AI Runtime zajistí GPU výpočetní prostředky, spustí váš příkaz a zaznamená běh v pojmenovaném experimentu MLflow.
Requirements
- Pracovní prostor v podporované oblasti. Viz Požadavky.
- Nejnovější Databricks CLI, ověřený pro váš pracovní prostor. Aktualizujte existující instalaci před použitím těchto příkladů.
- Pro příklad předzpracování použijte existující svazek Unity Catalog. Identita spuštění úlohy potřebuje
USE CATALOG,USE SCHEMA,READ VOLUMEaWRITE VOLUMEoprávnění pro daný objem. Viz oprávnění pro svazky katalogu Unity.
Příklad „Ahoj světe“ s ai_runtime_task
Tento příklad spouští shell příkaz na jednom GPU A10.
Vytvořte adresář pro tento balíček. V tomto adresáři vytvořte
command.shs následujícím obsahem:#!/usr/bin/env bash set -euo pipefail echo "Hello world"Vytvořte
databricks.ymlve stejném adresáři: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: trueZ adresáře balíčku ověřte, nasaďte a spusťte job:
databricks bundle validate --target dev databricks bundle deploy --target dev databricks bundle run hello --target devOtevřete adresu URL běhu vytištěnou rozhraním CLI a podívejte se na výstup
hellodaného úkolu. ObsahujeHello world. Běh se také objevuje v experimentuhello-ai-runtimeMLflow.
Složitější příklad: Naplánujte pipeline pro předzpracování a trénování
Tento příklad připravuje malou datovou sadu pro výpočty na CPU a poté trénuje lineární model na jednom GPU A10. Obě úlohy používají stejný soubor volume pro přenos dat mezi sebou. Úkol je naplánován denně v 09:00 UTC, přičemž rozvrh je pozastaven, dokud ho neotestujete.
Vytvoření projektu
Vytvořte samostatný adresář s následujícím rozložením:
scheduled-training/ ├── databricks.yml ├── prep.py ├── command.sh └── src/ └── train.pyVytvořte
prep.pys následujícím obsahem. Nahraďte<catalog>,<schema>a<volume>názvy vašich svazků. Tento zdrojový poznámkový blok normalizuje vstupní hodnoty a zapisuje připravená data do úložiště:# 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}")Vytvořte
src/train.pys následujícím obsahem. Použijte stejnou cestu ke svazku jako vprep.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}")Vytvořte
command.sh, abyste spustili tréninkový kód. Níže uvedený balíček zahrnujesrc/, takžeCODE_SOURCE_PATHukazuje na extrahovaný adresářsrc:#!/usr/bin/env bash set -euo pipefail cd "$CODE_SOURCE_PATH" python train.pyVytvořte
databricks.ymls následujícím obsahem. Balíček obsahujesrc/pro úlohu GPU. Notebookprepběží na serverless CPU výpočtech adepends_onspouští setrainteprve poté, coprepúspěšně proběhne.max_concurrent_runs: 1zabraňuje, aby si běhy této úlohy navzájem přepisovaly vstupní soubor: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
Otestujte a povolte plán
Z
scheduled-training/nasaďte bundle a spusťte ruční spuštění:databricks bundle validate --target dev databricks bundle deploy --target dev databricks bundle run train_pipeline --target devOtevřete URL pro spuštění vypsanou rozhraním CLI. Ověřte, že
prepproběhne úspěšně dříve nežtrainzačne. Výstupprepuvádí 10 připravených řádků a výstuptrainuvádíTrained on cuda:0a ztrátu.V
databricks.ymlzměňte u plánu položkupause_statuszPAUSEDnaUNPAUSED. Blok rozpisu je nyní:schedule: quartz_cron_expression: '0 0 9 * * ?' timezone_id: UTC pause_status: UNPAUSEDNasaďte změnu pro aktivaci denního rozvrhu:
databricks bundle deploy --target devNastavení
pause_status: UNPAUSEDexplicitně umožňuje tento plán i pro vývojový cíl. V Jobs & Pipelines otevřete nasazenou úlohu a potvrďte, že její plán je aktivní v 09:00 UTC. Viz Spuštění úloh podle plánu.
Chcete-li pozastavit plánovaná spuštění, nastavte pause_status: PAUSED a znovu nasaďte. Pro odstranění ukázkové úlohy a souborů nahraných balíčkem spusťte následující z jeho adresáře balíčku:
databricks bundle destroy --target dev
Připravená data ve vašem svazku zůstávají zachována. Smažte scheduled-training datový adresář, až ho už nebudete potřebovat.
Dodatečné zdroje
- Převeďte stávající AI Runtime workload YAML do balíčku. Podívejte se na Převedení úlohy AI Runtime do balíčku.
- Konfigurujte balení kódu, výpočetní kapacitu, prostředí a parametry úlohy. Vizte Konfigurace úloh balíčku AI Runtime.
- Naplánujte spuštění existujícího notebooku na GPU. Viz Plánování úloh notebooku v AI Runtime.
- Sledujte tréninkové běhy. Viz Sledování experimentu a pozorovatelnost.
- Uložte kontrolní bod modelu, optimalizátoru a stavu datového kanálu. Přečtěte si Zlepšení výkonu a odolnosti při trénování v AI Runtime.