Grunderna i DistributedDataParallel
Den vanliga vägen till träning med flera GPU:er
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.
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
- Data- kontra modellparallellism
- Grunderna i DistributedDataParallel
- Synkroniserad Batch Norm och shardat tillstånd
- Starta jobb med torchrun