Lær AI med Python · Lektion

Multi-GPU-træning med DataParallel

nn.DataParallel, balancering af GPU-hukommelse, båndbreddeflaskeshalse, hvornår DDP er bedre.

Lektion 1 af 413 trin

Multi-GPU-træning med DataParallel er en gratis Lær AI med Python-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær AI med Python, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær AI med Python-kurset indeholder 4 lektioner i alt.

Hvorfor flere GPU'er

Moderne modeller og batches vokser ud over en enkelt GPU's hukommelse og beregningskapacitet. Ved at bruge flere GPU'er kan du træne større modeller eller behandle større batches på kortere tid. PyTorch tilbyder flere måder at gøre dette på; den enkleste er DataParallel.

Dataparallelisme

Dataparallelisme replikerer modellen på hver GPU og opdeler hver inddata-batch mellem dem. Hver GPU beregner på sin del, hvorefter gradienterne kombineres, så alle modelkopier forbliver synkroniserede.

nn.DataParallel

nn.DataParallel pakker en model ind på én linje. Du angiver de GPU-id'er, der skal bruges, og PyTorch håndterer automatisk fordelingen af inddata og samlingen af uddata.

import torch
import torch.nn as nn

model = MyModel().cuda()
model = nn.DataParallel(model, device_ids=[0, 1])

Automatisk batchopdeling

Under det fremadrettede gennemløb opdeler DataParallel batchen langs dimension 0 på tværs af de angivne GPU'er. En batch på 64 på to GPU'er bliver til to underbatches på 32. Hver GPU kører den samme model på sin underbatch parallelt.

# batch of 64 with device_ids=[0, 1]
# GPU 0 processes samples 0..31
# GPU 1 processes samples 32..63

Middelværdiberegning af gradienter

Under det baglæns gennemløb samles gradienterne fra de enkelte GPU'er på den primære enhed og beregnes som et gennemsnit (de lægges reelt sammen og skaleres), så modelopdateringen afspejler hele batchen. Modelkopierne synkroniseres derefter igen til næste trin.

En normal træningsløkke

Det bedste er, at din træningsløkke næsten ikke ændres. Du flytter data til den primære GPU og kalder den indpakkede model som normalt; DataParallel håndterer fordelingen i baggrunden.

for x, y in loader:
    x, y = x.cuda(), y.cuda()
    optimizer.zero_grad()
    out = model(x)            # auto-split across GPUs
    loss = criterion(out, y)
    loss.backward()           # gradients averaged
    optimizer.step()

Ubalancen på GPU 0

DataParallel har en velkendt svaghed: Den primære GPU (normalt GPU 0) samler alle uddata og beregner tabet, så den belastes med ekstra hukommelsesforbrug og beregninger. Med mange GPU'er bliver GPU 0 en flaskehals og kan løbe tør for hukommelse, før de andre gør det.

Én proces, mange tråde

DataParallel kører i én Python-proces og bruger tråde til at styre GPU'erne. Pythons globale fortolkerlås og overheadet ved opdeling og samling begrænser skalerings effektivitet, især ved mere end 2 til 4 GPU'er.

Hvorfor DDP foretrækkes

Af disse grunde anbefales DistributedDataParallel (DDP) til krævende arbejde med flere GPU'er. DDP kører én proces pr. GPU, synkroniserer gradienter med effektiv all-reduce og undgår flaskehalsen på GPU 0, hvilket giver næsten lineær skalering.

Hvornår DataParallel stadig er fint

DataParallel er acceptabelt til hurtige eksperimenter på en enkelt maskine med 2 GPU'er, hvor enkeltheden ved én linje opvejer ineffektiviteten. Til træning på flere noder eller med mange GPU'er bør du i stedet bruge DDP.

Almindelig faldgrube: Gemning

En indpakket models tilstandsordbog har præfikset module.. Gem et rent checkpoint med model.module.state_dict(), så det senere indlæses korrekt i en model, der ikke er pakket ind.

torch.save(model.module.state_dict(), "model.pt")

Hurtig kontrol

Test din viden om DataParallel.

Opsummering

Du har lært om træning med flere GPU'er ved hjælp af DataParallel:

  • nn.DataParallel(model, device_ids=[0, 1]) replikerer modellen og opdeler batches
  • Gradienterne beregnes som et gennemsnit på tværs af GPU'er ved hvert trin
  • Ubalancen på GPU 0 og designet med én proces begrænser skaleringen
  • Foretræk DDP ved mange GPU'er eller træning på flere noder
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
53
Lektioner
225

Ofte stillede spørgsmål

Er lektionen “Multi-GPU-træning med DataParallel” gratis?

Ja — alle 3 lektioner i læringssporet Lær AI med Python, inklusive “Multi-GPU-træning med DataParallel”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær AI med Python-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Multi-GPU-træning med DataParallel”?

nn.DataParallel, balancering af GPU-hukommelse, båndbreddeflaskeshalse, hvornår DDP er bedre. Du øver dig i Lær AI med Python 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å Lær AI med Python?

Der kræves ingen tidligere erfaring. Lær AI med Python 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 1 af 4.

Hvor lang tid tager lektionen “Multi-GPU-træning med DataParallel”?

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 Lær AI med Python-lektion?

Ja. Alle Lær AI med Python-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. Multi-GPU-træning med DataParallel
  2. DistributedDataParallel (DDP)
  3. Træning med mixed precision og AMP
  4. Effektiv træning med Hugging Face Accelerate
← Tilbage til Lær AI med Python