Metodtips för serverlös GPU-beräkning

I den här artikeln får du rekommendationer om bästa praxis för att använda serverlös GPU-beräkning i dina notebook-filer och jobb.

Genom att följa dessa rekommendationer förbättrar du produktiviteten, kostnadseffektiviteten och tillförlitligheten för dina arbetsbelastningar i Azure Databricks.

Använda rätt beräkning

  • Använd serverlös GPU-beräkning. Det här alternativet levereras med torch, cuda och torchvision optimerade för kompatibilitet. Exakta paketversioner beror på miljöversionerna.
  • Välj din accelerator i miljösidans panel.
    • För fjärrfördelade träningsarbetsbelastningar använder du en A10 GPU, som är klienten för att skicka ett jobb till fjärr-H100 senare.
    • För att köra omfattande interaktiva jobb direkt på notebook kan du koppla den till H100, vilket upptar en nod (8 H100-GPU:er).
  • För att undvika att ta upp GPU:er kan du koppla din notebook till ett CPU-kluster för åtgärder som git-kloning och konvertering av Spark Dataframe till MDS-format (Mosaic Data Shard).

MLflow-rekommendationer

För en optimal ML-utvecklingscykel använder du MLflow 3 på Databricks. Följ dessa tips:

  • Uppgradera miljöns MLflow till version 3.6 eller senare och följ MLflows djupinlärningsflöde i MLflow 3-arbetsflödet för djupinlärning.

  • Ange parametern step i MLFlowLogger till ett rimligt antal batchar. MLflow har en gräns på 10 miljoner måttsteg som kan loggas. Se Resursbegränsningar.

  • Aktivera mlflow.pytorch.autolog() om Pytorch Lightning används som tränare.

  • Anpassa MLflow-körningsnamnet genom att kapsla in din modellträningskod inom API-omfånget mlflow.start_run() . Detta ger dig kontroll över körningsnamnet och gör att du kan starta om från en tidigare körning. Du kan anpassa körningsnamnet med hjälp av parametern run_name i mlflow.start_run(run_name="your-custom-name") eller i bibliotek från tredje part som stöder MLflow (till exempel Hugging Face Transformers). Annars är standardkörningsnamnet jobTaskRun-xxxxx.

    from transformers import TrainingArguments
    args = TrainingArguments(
        report_to="mlflow",
        run_name="llama7b-sft-lr3e5",  # <-- MLflow run name
        logging_steps=50,
    )
    
  • Det serverlösa GPU-API:et startar ett MLflow-experiment för att logga systemmått. Som standard använder den namnet /Users/{WORKSPACE_USER}/{get_notebook_name()} såvida inte användaren skriver över det med miljövariabeln MLFLOW_EXPERIMENT_NAME.

    • När du ställer in MLFLOW_EXPERIMENT_NAME miljövariabeln använder du en absolut sökväg. Till exempel/Users/<username>/my-experiment.
    • Experimentnamnet får inte innehålla det befintliga mappnamnet. Om till exempel my-experiment är en befintlig mapp kommer det att generera ett fel.
    import os
    from serverless_gpu import distributed
    os.environ['MLFLOW_EXPERIMENT_NAME'] = '/Users/{WORKSPACE_USER}/my_experiment'
    @distributed(gpus=num_gpus, gpu_type=gpu_type, remote=True)
    def run_train():
    # my training code
    
  • Om du vill återuppta träningen från en tidigare körning anger du MLFLOW_RUN_ID från föregående körning enligt följande.

    import os
    os.environ[‘MLFLOW_RUN_ID’] = <previous_run_id>
    run_train.distributed()
    

Samarbete för flera användare

  • För att säkerställa att alla användare kan komma åt delad kod (t.ex. hjälpmoduler, environment.yaml), skapar du git-mappar i eller /Workspace/Repos i /Workspace/Shared stället för användarspecifika mappar som /Workspace/Users/<your_email>/.
  • För kod som är i aktiv utveckling använder du Git-mappar i användarspecifika mappar /Workspace/Users/<your_email>/ och push-överför till fjärranslutna Git-lagringsplatser. Detta gör att flera användare kan ha en användarspecifik klon (och gren) men ändå använda en fjärransluten Git-lagringsplats för versionskontroll. Se metodtips för att använda Git på Databricks.
  • Medarbetare kan dela och kommentera anteckningsböcker.

Läs in data i dekoratören @distributed

När du använder det serverlösa GPU-API: et för distribuerad träning flyttar du datainläsningskoden i @distributed dekoratören. Datamängdens storlek kan överskrida den maximala storlek som tillåts av pickle, så vi rekommenderar att du genererar datamängden inuti dekoratören enligt nedan:

from serverless_gpu import distributed

# this may cause pickle error
dataset = get_dataset(file_path)
@distributed(gpus=8, remote=True)
def run_train():
  # good practice
  dataset = get_dataset(file_path)
  ....

Globala gränser i Databricks

Se Resursbegränsningar.