Multi-GPU-træning med DataParallel
nn.DataParallel, balancering af GPU-hukommelse, båndbreddeflaskeshalse, hvornår DDP er bedre.
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..63Middelvæ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
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
- Multi-GPU-træning med DataParallel
- DistributedDataParallel (DDP)
- Træning med mixed precision og AMP
- Effektiv træning med Hugging Face Accelerate