Checkpoint del gradiente
Il checkpoint del gradiente (chiamato anche checkpoint di attivazione) è un trucco per risparmiare memoria che elimina la maggior parte delle attivazioni intermedie durante il passaggio in avanti e le ricalcola al volo durante la propagazione all'indietro.
Panoramica
It lets you train deeper, larger networks by trading extra compute for much lower memory use.
Immersione profonda
L'addestramento delle reti neurali normalmente memorizza le attivazioni di ogni strato durante il passaggio in avanti perché la propagazione all'indietro ne ha bisogno per calcolare i gradienti. Per i modelli profondi queste attivazioni dominano la memoria. Il checkpoint gradiente salva invece le attivazioni solo su un insieme sparso di livelli "checkpoint" e scarta il resto. Quando il backprop raggiunge una regione le cui attivazioni sono state eliminate, esegue nuovamente il calcolo in avanti solo per quel segmento per rigenerare ciò di cui ha bisogno, quindi procede. Con i checkpoint posizionati all'incirca ogni strato di radice quadrata di N, la memoria per le attivazioni scende dall'ordine N all'ordine radice quadrata di N, mentre il calcolo aumenta solo di un passaggio in avanti aggiuntivo (circa il 20-30% più lento). Ciò consente di adattare lotti di dimensioni maggiori o trasformatori più profondi sulla stessa GPU.
Approfondimento tecnico
La tecnica sfrutta un compromesso tempo-memoria. Memorizzare tutte le attivazioni è veloce ma richiede molta memoria; ricalcolarli è economico sui moderni acceleratori rispetto al costo di rimanere senza memoria. Framework come PyTorch (torch.utils.checkpoint) avvolgono un modulo in modo che il suo output in avanti venga salvato ma i suoi interni vengano ricalcolati durante la fase all'indietro. La scelta del posizionamento del checkpoint è importante: una spaziatura uniforme di circa segmenti sqrt(N) riduce al minimo la memoria totale aggiungendo nel complesso solo un singolo passaggio in avanti aggiuntivo di calcolo.
Impatto strategico
Costo e budget
Le decisioni relative all'architettura determinano prestazioni e costi operativi per anni.
Decisioni più chiare
La formazione tecnica aiuta i team a scegliere lo stack giusto, non solo quello più nuovo.
Controllo di qualità
Migliori scelte ingegneristiche riducono gli incidenti legati all’affidabilità nella produzione.
Il futuro del checkpoint del gradiente
Il checkpoint del gradiente è ora uno standard nell'addestramento di modelli di grandi dimensioni ed è sempre più automatizzato, con le biblioteche che selezionano per te le posizioni ottimali dei checkpoint. Si abbina naturalmente a FSDP, precisione mista e offload per aumentare le dimensioni dei modelli. Aspettatevi checkpoint "selettivi" che ricalcolino solo le operazioni economiche mantenendo nella cache quelle costose (come le matrici di attenzione), oltre ad approcci guidati dal compilatore in strumenti come torch.compile di PyTorch che decidono automaticamente cosa salvare rispetto a ricalcolare per il miglior equilibrio velocità-memoria.
Implementazione nel mondo reale
Addestramento di un trasformatore profondo con dimensioni batch maggiori su una singola GPU scartando e ricalcolando le attivazioni dei livelli.
Ottimizzazione dei modelli di visione su immagini ad alta risoluzione in cui le mappe di attivazione altrimenti traboccherebbero la memoria della GPU.
Hugging Face Transformers abilita gradient_checkpointing=Verissimo per adattarsi a modelli con miliardi di parametri durante la messa a punto.
Combinando il checkpoint con FSDP in modo che sia i parametri che le attivazioni siano mantenuti piccoli, consentendo l'addestramento di modelli linguistici molto ampi.
Rischi e guardrail
L'ottimizzazione di un benchmark può nascondere debolezze di sistema più ampie.
I costi delle infrastrutture e della manutenzione sono spesso sottostimati.
Le lacune in termini di sicurezza e osservabilità possono aumentare man mano che i sistemi diventano più complessi.
Tabella di marcia per l'implementazione
Definire obiettivi di latenza, qualità e costi prima dell'implementazione.
Benchmark in condizioni di carico e dati realistiche.
Monitoraggio dello strumento per errori, deriva e impatto sull'utente.
Preparare percorsi di rollback e risposta agli incidenti prima della scalabilità.
Continua a esplorare
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the Gradient Checkpointing quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
Prossima guida
Accumulo di gradienti
Domande frequenti
What is Gradient Checkpointing?
Il checkpoint del gradiente (chiamato anche checkpoint di attivazione) è un trucco per risparmiare memoria che elimina la maggior parte delle attivazioni intermedie durante il passaggio in avanti e le ricalcola al volo durante la propagazione all'indietro. Ti consente di addestrare reti più profonde e più grandi scambiando risorse di calcolo aggiuntive con un utilizzo della memoria molto inferiore.
Cosa viene scambiato principalmente con il checkpoint gradiente per risparmiare memoria?
Il checkpoint del gradiente ricalcola le attivazioni scartate durante il passaggio all'indietro, spendendo ulteriore calcolo in cambio di una memoria sostanzialmente ridotta.
Perché le attivazioni vengono normalmente memorizzate durante il passaggio in avanti?
Backprop calcola i gradienti utilizzando le attivazioni intermedie dal passaggio in avanti, quindi devono essere disponibili a meno che non vengano ricalcolati.
All'incirca come si ridimensiona la memoria di attivazione se i checkpoint vengono posizionati su ogni livello sqrt(N) in una rete a N livelli?
La spaziatura dei checkpoint su ogni livello di radice quadrata di N riduce la memoria di attivazione memorizzata dall'ordine N fino all'ordine sqrt(N).
Approssimativamente, quanto calcolo aggiuntivo aggiunge in genere il checkpoint del gradiente ben posizionato?
Con un buon posizionamento dei checkpoint, il sovraccarico è all'incirca un singolo passaggio in avanti aggiuntivo, spesso un rallentamento di circa il 20-30%.
In PyTorch, quale utilità viene comunemente utilizzata per applicare il checkpoint del gradiente a un modulo?
torch.utils.checkpoint esegue il wrapper di un modulo in modo che le sue attivazioni interne vengano ricalcolate durante la fase all'indietro invece di essere archiviate.