GUIDA TECNICA

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.

2 minuti di letturaUltimo aggiornamento

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

1

Definire obiettivi di latenza, qualità e costi prima dell'implementazione.

2

Benchmark in condizioni di carico e dati realistiche.

3

Monitoraggio dello strumento per errori, deriva e impatto sull'utente.

4

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.

Inizia il quiz

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.