Deep Learning Academy · Lektion

Grundlæggende DistributedDataParallel

Den standardiserede vej til træning på flere GPU'er.

Lektion 2 af 413 trin

Grundlæggende DistributedDataParallel er en gratis Deep Learning Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Deep Learning Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Deep Learning Academy-kurset indeholder 4 lektioner i alt.

Mød DDP

DistributedDataParallel, eller DDP, er PyTorch's foretrukne værktøj til træning på flere GPU'er. Det kører én proces pr. GPU og holder alle modelkopier synkroniserede.

Én proces pr. GPU

I modsætning til den ældre DataParallel opretter DDP en separat proces for hver GPU. Det omgår Pythons GIL og skalerer langt mere effektivt.

Rank og verdensstørrelse

Hver proces får en rank (dens id) og deler verdensstørrelsen (det samlede antal processer). Rank 0 er normalt den, der logger og gemmer.

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

Initialisér procesgruppen

Før nogen kommunikation skal du kalde init_process_group. Backend'en nccl er det hurtige valg til GPU'er.

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

Knyt hver proces til en GPU

Brug den lokale rank til at angive enheden, så hver proces ejer præcis én GPU. Det forhindrer, at arbejdet samler sig på ét grafikkort.

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

Pak din model ind

Magien er én linje: Pak din model ind i DDP. Derefter synkroniseres gradienterne automatisk under backward-passet.

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

Gradienterne synkroniserer sig selv

Under backward() udfører DDP en all-reduce for at beregne gennemsnittet af gradienterne på tværs af GPU'er. Du skriver normal træningskode, og den forbliver blot synkroniseret. ✨

Brug en DistributedSampler

Giv din DataLoader en DistributedSampler, så hver GPU ser forskellige data. Den giver hver proces en del af datasættet, som ikke overlapper med de andres.

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

Bland dataene igen ved hver epoch

Kald sampler.set_epoch(epoch) øverst i hver epoch. Uden det blander alle GPU'er dataene på samme måde, så du mister den reelle blanding.

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

Gem kun på rank 0

Alle kopier er identiske, så opret kun et checkpoint fra rank 0. Hvis alle processer gemmer, skrives den samme fil blot mange gange.

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

Ryd op til sidst

Når træningen er færdig, skal du kalde destroy_process_group for at frigive gruppen korrekt og undgå processer, der hænger.

import torch.distributed as dist
dist.destroy_process_group()

Hurtigt tjek

Tænk over, hvordan DDP holder kopierne synkroniserede.

Opsummering

Du har sat DDP op: initialiser procesgruppen, pak modellen ind, giv den en DistributedSampler, og gem fra rang 0. Gradienter synkroniseres automatisk.

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Grundlæggende DistributedDataParallel” gratis?

Ja — hele teksten til “Grundlæggende DistributedDataParallel” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Deep Learning Academy-kurset, skal du opgradere til CoddyKit PRO. Deep Learning Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Grundlæggende DistributedDataParallel”?

Den standardiserede vej til træning på flere GPU'er. Du øver dig i Deep Learning Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Deep Learning Academy?

Der kræves ingen tidligere erfaring. Deep Learning Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Grundlæggende DistributedDataParallel”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Deep Learning Academy-lektion?

Ja. Alle Deep Learning Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Data- vs. modelparallelisme
  2. Grundlæggende DistributedDataParallel
  3. Synkron batch norm og sharded state
  4. Start jobs med torchrun
← Tilbage til Deep Learning Academy