Accumulo dei gradienti per batch grandi
Simuli batch grandi su GPU di piccole dimensioni
Accumulo dei gradienti per batch grandi è una lezione Deep Learning Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Deep Learning Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Deep Learning Academy include 4 lezioni in totale.
Il problema dei batch grandi
I batch grandi spesso rendono l'addestramento più stabile, ma richiedono anche molta memoria della GPU. Una scheda di piccole dimensioni non può contenere un batch enorme tutto in una volta.
Il concetto fondamentale
Gradient accumulation suddivide un batch grande in piccoli blocchi. I relativi gradienti vengono sommati e si esegue un solo aggiornamento, come se l'intero batch fosse stato elaborato insieme.
I gradienti si accumulano già
PyTorch aggiunge ogni passaggio backward a .grad invece di sostituirlo. Questo comportamento predefinito è esattamente ciò su cui si basa l'accumulo.
Scegliere il numero di accumuli
Scelga quanti mini-batch debbano formare un aggiornamento. Con un valore di quattro per accum_steps, quattro batch piccoli si comportano come un unico batch quattro volte più grande.
accum_steps = 4Non azzerare a ogni step
Il cambiamento fondamentale riguarda il momento: usi zero_grad solo all'inizio di un ciclo di accumulo, non dopo ogni singolo mini-batch.
if step % accum_steps == 0:
optimizer.zero_grad()Ridimensionare la loss
Divida la loss di ogni mini-batch per accum_steps prima del backward. In questo modo il gradiente medio resta identico a quello ottenuto eseguendo subito il batch completo.
loss = loss_fn(model(x), y) / accum_steps
loss.backward()Eseguire lo step solo quando è completo
Dopo aver accumulato un numero sufficiente di mini-batch, chiami optimizer.step. I gradienti accumulati rappresentano ora l'intero batch grande.
if (step + 1) % accum_steps == 0:
optimizer.step()Lo schema completo
Metta tutto insieme: ridimensioni la loss ed esegua il backward a ogni step, ma faccia step e zero solo una volta per ciclo. Il ciclo rimane semplice.
for step, (x, y) in enumerate(loader):
loss = loss_fn(model(x), y) / accum_steps
loss.backward()
if (step + 1) % accum_steps == 0:
optimizer.step()
optimizer.zero_grad()La memoria resta contenuta
In memoria viene mantenuto un solo mini-batch alla volta. Ecco perché una GPU di dimensioni moderate può simulare un batch molte volte più grande della propria capacità effettiva.
Il compromesso
L'accumulo scambia tempo con memoria: più passaggi forward e backward per ogni aggiornamento fanno sì che ogni batch effettivo richieda un po' più di tempo per essere completato.
Attenzione alla Batch Norm
La batch norm continua a vedere solo il mini-batch piccolo, quindi le sue statistiche sono più rumorose di quelle prodotte da un vero batch grande. Lo tenga presente.
Verifica rapida
Sta accumulando i gradienti su 4 mini-batch. Quando deve chiamare optimizer.step()?
Riepilogo
Divida un batch grande in blocchi, divida la loss per accum_steps, esegua il backward su ogni blocco ed esegua lo step una sola volta per ciclo, simulando un batch grande con poca memoria. 🧮
Domande Frequenti
La lezione «Accumulo dei gradienti per batch grandi» è gratuita?
Sì — il testo completo di «Accumulo dei gradienti per batch grandi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Deep Learning Academy, passa a CoddyKit PRO. Il corso Deep Learning Academy include 4 lezioni in totale.
Cosa imparerò in «Accumulo dei gradienti per batch grandi»?
Simuli batch grandi su GPU di piccole dimensioni Eserciti Deep Learning Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Deep Learning Academy?
Non è richiesta alcuna esperienza precedente. Deep Learning Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Accumulo dei gradienti per batch grandi»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Deep Learning Academy?
Sì. Ogni lezione Deep Learning Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Precisione mista con autocast e GradScaler
- Accumulo dei gradienti per batch grandi
- Profilare il collo di bottiglia
- Ridurre l'uso della memoria della GPU