Deep Learning Academy · Lektion

Grunderna i DistributedDataParallel

Den vanliga vägen till träning med flera GPU:er

Lektion 2 av 413 steg

Grunderna i DistributedDataParallel är en gratis lektion i Deep Learning Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Deep Learning Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Deep Learning Academy innehåller totalt 4 lektioner.

Möt DDP

DistributedDataParallel, eller DDP, är PyTorchs förstahandsverktyg för träning med flera GPU:er. Det kör en process per GPU och håller alla modellkopior synkroniserade.

En process per GPU

Till skillnad från den äldre DataParallel startar DDP en separat process för varje GPU. Det undviker Pythons GIL och skalar mycket bättre.

Rank och world size

Varje process får en rank (dess id) och delar world size (det totala antalet processer). Rank 0 är vanligtvis den som loggar och sparar.

import torch.distributed as dist
rank = dist.get_rank()
world = dist.get_world_size()

Initiera processgruppen

Innan någon kommunikation sker anropar du init_process_group. Backend-alternativet nccl är det snabba valet för GPU:er.

import torch.distributed as dist
dist.init_process_group(backend="nccl")

Koppla varje process till en GPU

Använd local rank för att ange enheten, så att varje process äger exakt en GPU. Då samlas inte arbetet på ett enda grafikkort.

import torch
torch.cuda.set_device(local_rank)
model = model.to(local_rank)

Omslut din modell

Tricket är en enda rad: omslut modellen med DDP. Därefter synkroniseras gradienterna automatiskt under bakåtpassningen.

from torch.nn.parallel import DistributedDataParallel as DDP
model = DDP(model, device_ids=[local_rank])

Gradienterna synkroniseras automatiskt

Under backward() utför DDP en all-reduce för att beräkna genomsnittet av gradienterna över GPU:erna. Du skriver vanlig träningskod, och den förblir synkroniserad. ✨

Använd en DistributedSampler

Ge din DataLoader en DistributedSampler så att varje GPU ser olika data. Den ger varje process en icke-överlappande del av datamängden.

from torch.utils.data.distributed import DistributedSampler
sampler = DistributedSampler(dataset)

Blanda om vid varje epok

Anropa sampler.set_epoch(epoch) i början av varje epok. Utan detta blandar alla GPU:er om på samma sätt, och du förlorar den verkliga omblandningen.

for epoch in range(epochs):
    sampler.set_epoch(epoch)
    train_one_epoch()

Spara endast på rank 0

Alla kopior är identiska, så skapa checkpoint endast från rank 0. Om varje process sparar skrivs samma fil bara flera gånger.

if rank == 0:
    torch.save(model.module.state_dict(), "ckpt.pt")

Städa upp i slutet

När träningen är klar anropar du destroy_process_group för att frigöra gruppen korrekt och undvika processer som hänger sig.

import torch.distributed as dist
dist.destroy_process_group()

Snabb kontroll

Tänk på hur DDP håller kopiorna synkroniserade.

Sammanfattning

Ni har konfigurerat DDP: initierat processgruppen, slagit in modellen, försett den med en DistributedSampler och sparat från rank 0. Gradienterna synkroniseras automatiskt.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Grunderna i DistributedDataParallel” gratis?

Ja – hela texten till ”Grunderna i DistributedDataParallel” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Deep Learning Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Deep Learning Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Grunderna i DistributedDataParallel”?

Den vanliga vägen till träning med flera GPU:er Ni övar på Deep Learning Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Deep Learning Academy?

Du behöver inga förkunskaper. Utbildningen i Deep Learning Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Grunderna i DistributedDataParallel”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Deep Learning Academy-lektionen?

Ja. Varje Deep Learning Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Data- kontra modellparallellism
  2. Grunderna i DistributedDataParallel
  3. Synkroniserad Batch Norm och shardat tillstånd
  4. Starta jobb med torchrun
← Tillbaka till Deep Learning Academy