Sledování experimentů a pozorovatelnost

Důležité

Modul runtime AI pro úlohy s jedním uzlem je ve verzi Public Preview. Distribuované trénovací rozhraní API pro úlohy s více GPU zůstává v beta verzi.

AI Runtime se nativně integruje s MLflow pro sledování experimentů a zahrnuje integrované podokno prostředků GPU pro monitorování využití, paměti a teploty. Pomocí MLflow můžete protokolovat metriky a spuštění, zobrazit výstup trénování v poznámkovém bloku a uživatelském rozhraní MLflow, uložit kontrolní body modelu do svazků katalogu Unity a sledovat stav GPU při spuštění kódu.

Integrace MLflow

AI Runtime se nativně integruje s MLflow pro sledování experimentů, protokolování modelů a vizualizaci metrik.

Doporučení k nastavení:

  • Upgradujte MLflow na verzi 3.7 nebo novější a postupujte podle vzorů pracovních postupů hlubokého učení.

  • Povolení automatického přihlašování pro PyTorch Lightning:

    import mlflow
    mlflow.pytorch.autolog()
    
  • Přizpůsobte si název spuštění MLflow zapouzdřením trénovacího kódu modelu ve mlflow.start_run() rámci rozhraní API. Tím získáte kontrolu nad názvem spuštění a umožníte restartování z předchozího spuštění. Název spuštění můžete přizpůsobit pomocí parametru run_name v mlflow.start_run(run_name="your-custom-name") knihovnách třetích stran, které podporují MLflow (například Hugging Face Transformers). V opačném případě je výchozí název spuštění jobTaskRun-xxxxx.

    from transformers import TrainingArguments
    args = TrainingArguments(
        report_to="mlflow",
        run_name="llama7b-sft-lr3e5",  # <-- MLflow run name
        logging_steps=50,
    )
    
  • Při použití bezserverového GPU API každé volání .distributed() automaticky vytvoří běh experimentu v MLflow. Pokud je volána v rámci aktivního běhu MLflow, místo toho se v rámci aktivního nadřazeného běhu vytvoří vnořený podřízený běh.

    import mlflow
    
    with mlflow.start_run() as outer_run:
        ...
        run_train.distributed()  # creates a nested child run under outer_run
    
  • Chcete-li přizpůsobit experiment používaný funkcí .distributed(), zavolejte mlflow.set_experiment() před voláním .distributed() nebo nastavte proměnnou prostředí MLFLOW_EXPERIMENT_NAME. Výchozí název experimentu je /Users/{WORKSPACE_USER}/{notebook-name}. Vždy používejte absolutní cesty.

    import mlflow
    mlflow.set_experiment("/Users/<username>/my-experiment")
    run_train.distributed()
    

    Alternatively:

    import os
    os.environ["MLFLOW_EXPERIMENT_NAME"] = "/Users/<username>/my-experiment"
    
  • Pokud chcete obnovit předchozí spuštění MLflow, použijte mlflow.start_run(run_id="<previous-run-id>").

  • Chcete-li obnovit předchozí běh MLflow pomocí .distributed(), nastavte před jeho zavoláním MLFLOW_RUN_ID:

    os.environ["MLFLOW_RUN_ID"] = "<previous-run-id>"
    run_train.distributed()
    
  • Nastavte parametr step v MLFlowLogger na přiměřené hodnoty dávkového zpracování. MLflow má limit 10 milionů kroků metrik, takže zaznamenávání každé jednotlivé dávky u rozsáhlých trénovacích běhů může na tento limit narazit. Viz Omezení prostředků.

Zobrazení protokolů

  • Výstup notebooku: Standardní výstup a chybový výstup z vašeho trénovacího kódu se zobrazují ve výstupu buňky notebooku.
  • Protokoly MLflow: Uživatelské rozhraní experimentu MLflow zobrazuje metriky trénování, parametry a artefakty.

Vytváření kontrolních bodů modelu

Pro distribuované trénování uložte a načtěte kontrolní body modelu asynchronně do svazků katalogu Unity, které poskytují stejné zásady správného řízení jako ostatní objekty katalogu Unity. Použijte UCVolumeWriter a UCVolumeReader z balíčku serverless_gpu.data s rozhraním API Torch Distributed Checkpoint (DCP). Tyto úložné backendy zpracovávají všechny vstupně-výstupní operace přes rychlý místní adresář (/tmp, který je na bezserverových GPU uzlech podložený technologií NVMe), a data pak nahrávají do svazku Unity Catalog nebo z něj stahují, což je rychlejší než zapisovat fragmenty checkpointů přímo do připojeného svazku FUSE. Atomičnost metadat je zachována: zapisující proces publikuje soubor .metadata až po dokončení nahrávání jeho datových shardů.

Note

UCVolumeWriter, UCVolumeReader a UCVolumeDataset vyžadují prostředí GPU verze 5 nebo vyšší (bezserverové rozhraní GPU Python API 0.5.16+).

Kontrolní bod často stačí k omezení ztráty práce po přerušení, ale ne tak často, že režie vstupně-výstupních operací zpomaluje trénování. Snažte se o jeden kontrolní bod každých 30 minut až hodinu a vylaďte interval podle času kroku a velikosti kontrolního bodu.

Chcete-li na pozadí nahrávat checkpointy, zatímco trénink pokračuje, předejte UCVolumeWriter jako parametr storage_writer pro dcp.async_save. Asynchronní ukládání vyžaduje back-end procesoru ve skupině procesů, takže ho inicializujte takto torch.distributed.init_process_group(backend="cpu:gloo,cuda:nccl", ...):

import torch.distributed.checkpoint as dcp
from serverless_gpu.data import UCVolumeWriter

checkpoint_path = "/Volumes/my_catalog/my_schema/model/checkpoints"
writer = UCVolumeWriter(checkpoint_path)

future = dcp.async_save(state_dict, storage_writer=writer)
# ...continue training...
future.result()  # blocks until the upload lands on the UC volume

Načtení kontrolního bodu pomocí UCVolumeReader:

from serverless_gpu.data import UCVolumeReader

reader = UCVolumeReader(checkpoint_path)
dcp.load(state_dict, storage_reader=reader)

Vytváření kontrolních bodů datového kanálu

Kontrolní bod modelu zachycuje stav modelu a optimalizátoru, ale ne pozici datového kanálu v datové sadě, takže obnovené spuštění nemůže rychle přejít na přesnou ukázku, kde se zastavila. Počítejte s tím při obnovování: restartujte na hranici epochy, nebo si ve vlastním stavu trénování sledujte zpracované vzorky či shardy, abyste je při obnovení mohli přeskočit.

Monitorujte prostředky GPU

Pomocí podokna prostředků GPU můžete monitorovat stav a využití GPU během spouštění kódu v prostředí AI Runtime. Panel podporuje jednouzlové i víceuzlové úlohy.

Pokud chcete podokno otevřít, připojte notebook k AI Runtime a potom v pravém podokně klikněte na ikonu Čip.Prostředky GPU

Panel prostředků GPU zobrazující využití, paměť a teplotu u každého grafického procesoru.

V podokně se zobrazí následující metriky pro každý GPU:

  • Procento využití GPU
  • Využití paměti GPU
  • Teplota

Panel načítá metriky každých 10 sekund a uchovává až 2 hodiny historických dat. Klikněte na ikonu Aktualizovat.Aktualizovat, aby se okamžitě načetly nejnovější hodnoty. Po 5 minutách nečinnosti se podokno pozastaví; znovu ho otevřete, abyste mohli pokračovat v monitorování.

Spolupráce s více uživateli

  • Pokud chcete zajistit, aby všichni uživatelé měli přístup ke sdílenému kódu (například k pomocným modulům nebo souborům YAML prostředí), uložte je /Workspace/Shared místo složek specifických pro uživatele, jako /Workspace/Users/<your_email>/je .
  • Pro kód, který je v aktivním vývoji, použijte uživatelské složky Gitu /Workspace/Users/<your_email>/ a přeneste je do vzdálených úložišť Git. To umožňuje více uživatelům mít klon a větev specifickou pro uživatele, zatímco pro správu verzí stále používá vzdálené úložiště Git. Podívejte se na osvědčené postupy pro používání Gitu v Databricks.
  • Spolupracovníci můžou poznámkové bloky sdílet a komentovat .

Globální limity v Azure Databricks

Viz Omezení prostředků.