Převést trénovací úlohy do produkce

Important

Tato funkce je ve verzi Public Preview.

Použijte DAB k definování tréninkové zátěže AI Runtime jako kódu. Uchovávejte to ve správě zdrojového kódu, nasazujte to napříč různými prostředími, plánujte to a kombinujte to s dalšími úlohami. Tato stránka popisuje postup použití vlastního trénování, při kterém ai_runtime_task spouští váš vlastní příkaz nad adresářem s kódem na bezserverových GPU výpočetních prostředcích.

Tip

  • Použijte Deklarativní automatizační balíčky k definování tréninkových zátěží jako kódu, jejich nasazení napříč prostředími a jejich plánování.
  • ai_runtime_task spustí váš vlastní příkaz ve složce s kódem (bring-your-own-training).
  • Spojte úkoly GPU a CPU v multitaskingových úlohách.

Jde o jiný úkol než spuštění notebooku na serverless GPU prostřednictvím balíčku. Základní příklad balíčku notebooku na GPU viz Plánování pomocí rozhraní Jobs API a deklarativních automatizačních balíčků.

Requirements

  • Pracovní prostor s povoleným AI Runtime. Viz Požadavky.
  • Nainstalované a nakonfigurované rozhraní Databricks CLI (příkazové rozhraní) pro nasazení bundles.

Definujte úlohu běhového prostředí AI v balíčku

ai_runtime_task pojmenuje experiment, odkazuje na váš trénovací kód pomocí code_source_path a definuje jedno nasazení: příkaz, který se má spustit, a GPU, na kterém se má spustit. Přidejte ji k úloze ve svém balíčku:

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 ukazuje na váš zabalený tréninkový kód a command_path je to skript, který úkol spustí. Opakování, časové limity a oprávnění se u úkolu i úlohy nastavují stejně jako u jakékoli jiné úlohy Azure Databricks, takže vaše stávající postupy pro balíčky lze použít i zde. Pro návod, jak zabalit a odkazovat na svůj kód, viz Ošislat svůj tréninkový kód.

ai_runtime_task pole

Pole Typ Description
experiment String Required. Název experimentu MLflow pro toto spuštění. Viz Sledování experimentu a pozorovatelnost.
code_source_path String Trénovací kód ke spuštění: výstupní soubor zabaleného artefaktu tgz, nebo cesta /Workspace nebo /Volumes ke kódu, který už byl nahrán. Viz Odesílat svůj tréninkový kód.
deployments Sequence Required. Jedno nasazení popisující příkaz a výpočtovou kapacitu pro jeho spuštění. Každý záznam obsahuje command_path, compute, a volitelný name.
deployments[].command_path String Required. Skript úkolu běží na každém uzlu.
deployments[].compute.accelerator_type String Required. Typ GPU, například GPU_1xA10, GPU_1xH100, nebo GPU_8xH100.
deployments[].compute.accelerator_count Celé číslo Required. Celkový počet GPU napříč všemi uzly – násobek počtu GPU na uzel zakódovaného v accelerator_type.
deployments[].name String Volitelný název pro nasazení, používaný v logech a uživatelském rozhraní.
docker_image_url String Volitelný vlastní obraz Dockeru pro spuštění příkazu místo spravovaného prostředí. Viz Použití vlastních imagí Dockeru.
mlflow_run String Volitelný zobrazovací název pro běh MLflow.
mlflow_experiment_directory String Volitelný adresář pracovního prostoru, pod kterým je experiment vytvořen. Musí začínat na /Workspace. Nastavte to, když běžíte jako principal služby, který nemá výchozí uživatelský adresář.
mlflow_artifact_location String Volitelné kořenové umístění pro artefakty MLflow, například cesta /Volumes/<catalog>/<schema>/<volume>/… . Musí odpovídat umístění artefaktu existujícího experimentu, jinak musí být vynechán.

Nastavte počet opakování, časové limity, oprávnění a prostředí (environment_key) u úkolu a úlohy – nikoli uvnitř ai_runtime_task. Pro úplný odkaz na úkol viz AI Runtime task.

Konfigurace hardwarového akcelerátoru

Nastavte accelerator_type GPU, které vaše pracovní zátěž potřebuje, a accelerator_count celkový počet GPU. Počet je násobkem počtu GPU na uzel: 1 pro GPU_1xA10 a GPU_1xH100, a 8 pro GPU_8xH100. Počet instancí větší než velikost na uzel spustí úlohu na více uzlech – například GPU_8xH100 s accelerator_count: 16 poběží na dvou uzlech. Pro rady při výběru akcelerátoru viz Hardwarové možnosti.

Note

Pro víceuzlové běhy AI Runtime spustí příkaz na každém uzlu a vyplní standardní proměnné distribuovaného trénovacího prostředí v prostředí úloh –NUM_NODES , , WORLD_SIZELOCAL_WORLD_SIZE, MASTER_ADDR, a MASTER_PORT. Načítejte je z příkazu (například při spuštění pomocí torchrun); v balíčku je nenastavujete.

Nastavte prostředí a závislosti

Deklarujte blok na úkolu a odkazujte environments na něj z úkolu pomocí environment_key. AI Runtime instaluje uvedené závislosti před spuštěním vašeho příkazu:

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: '6'
            dependencies:
              - numpy

Pro dostupná prostředí viz Nastavit své prostředí.

Odesílejte svůj tréninkový kód

code_source_path říká úloze, kde se nachází váš trénovací kód. Má jednu ze dvou forem:

  • Zabalený tgz artefakt — deklarujte artefakt a nasměrujte code_source_path jej na jeho výstupní soubor. Azure Databricks vytváří archiv tar a nahrává ho na databricks bundle deploy. Takto se odesílá kód z místního adresáře projektů nebo z ověřené revize Gitu.
  • Pracovní prostor nebo cesta ke svazku — kód, který je již nahraný, se použije beze změn.

Balený artefakt

Deklarujte tgz artefakt a ukažte code_source_path na jeho výstupní soubor. V databricks bundle deploy CLI vytvoří archiv tar, nahraje jej a úloha jej rozbalí a spustí nad ním váš příkaz:

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

Použijte include k balení souborů z pracovního stromu, nebo git k snapshotu zadaného větve či commitu.

Pracovní prostor nebo cesta objemu

Chcete-li použít kód, který je již nahraný, nastavte code_source_path na cestu /Workspace/… nebo /Volumes/…. Azure Databricks použije cestu v původní podobě a nic nezabalí.

Pole tgz artefaktů:

Pole Description
type tgz Vytvoří gzipovaný tarball ze zdrojových souborů místo spuštění příkazu build .
path Základní adresář pro balení. include cesty a názvy záznamů v archivu jsou k němu vztahovány.
include Seznam podcest do path balíčku. Vynechat z balení vše z path. Respektuje .gitignore; sync.include a sync.exclude pro celý balíček se nepoužijí. Alternativa k příkazu build .
git Vytvořte snapshot potvrzené Git reference místo pracovního stromu. Nastavit git.branch nebo git.commit (commit vyhrává, když jsou obě nastaveny). Alternativa k příkazu build .
files[].source Cesta k vytvořenému tarballu. Namiřte code_source_path sem.

Note

AI Runtime extrahuje váš kód do adresáře a zpřístupní ho jako CODE_SOURCE_PATH proměnnou prostředí. Odkazujte na něj z příkazu, aby se relativní cesty vyřešily, například cd "$CODE_SOURCE_PATH" před spuštěním skriptu.

Kompletní příklad

Tento příklad trénuje na jednom GPU A10 z lokálního projektu, bez předchozího nastavení CLI kromě instalace a konfigurace Azure Databricks CLI. Projekt má tři soubory:

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

command.sh je vstupní bod pojmenovaný pomocí command_path. Změní se na adresář extrahovaného kódu a spustí trénovací skript:

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

databricks.yml pojmenuje balíček, zabalí src/ jako artefakt tgz, spustí jej jako ai_runtime_task, nainstaluje numpy do prostředí úlohy a definuje vývojové a produkční cíle:

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: '6'
            dependencies:
              - numpy

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

Nasaďte balíček a spusťte úlohu. databricks bundle deploy postaví a nahraje tgz artefakt a vytvoří úkol; databricks bundle run spustí ho:

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

Vytvořte pracovní postupy pro více úloh

ai_runtime_task je úloha v úloze Azure Databricks, takže ji lze kombinovat se zbytkem úlohy. Můžete spustit přípravný krok před tréninkem, kombinovat úlohy GPU a CPU v jedné úlohě a použít různé akcelerátory pro každou úlohu.

Řadit úkoly pomocí depends_on

Používejte depends_on pro spouštění úloh v pořadí. Následující pipeline spustí přípravný zápisník, poté trénovací úkol GPU, který začíná až po úspěšném dokončení přípravného úkolu:

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

Kombinace úloh GPU a CPU

Ve výše uvedené pipeline je GPU potřeba pouze pro krok trénování. Udržování práce mimo GPU, jako je příprava dat, v oddělených úkolech, udržuje čas GPU zaměřený na trénování.

Note

ai_runtime_task nepodporuje hodnoty úloh Azure Databricks ({{tasks.<task_key>.values.<name>}} nebo dbutils.jobs.taskValues). Pro předávání dat mezi kroky je zapište na sdílené místo, které obě úlohy mohou číst, například do svazku Unity Catalog nebo do souboru workspace, a odkazujte na tuto cestu z každého úkolu.

Naplánujte si pracovní zátěž

Přidejte do úlohy schedule, aby se spouštěla v pravidelných intervalech. Doručte plán v pozastaveném stavu, aby nasazení balíčku nespustilo běhy automaticky, a až budete připraveni, zrušte jeho pozastavení:

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

Propagace od vývoje k produkci

Posun z vývoje do produkce je standardní funkcí balíčku, kterou úkol AI Runtime dědí beze změny.

Cíle a režimy balíčku

Definujte produkční cíl pomocí mode: production vedle svého vývojového cíle. Cíl řídí, kde se balíček nasadí a jak jsou jeho zdroje pojmenovány:

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

Nasazení a spuštění

Nasadit a spustit balíček proti cíli pomocí standardních příkazů balíčku:

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

Další kroky