ZeRO e ottimizzatori frammentati
ZeRO (Zero Redundancy Optimizer) elimina la dispendiosa duplicazione della memoria del parallelismo dei dati suddividendo lo stato, i gradienti e i pesi dell'ottimizzatore tra le GPU.
Panoramica
It lets you train enormous models with the simplicity of data parallelism but a fraction of the per-GPU memory.
Immersione profonda
Nel normale parallelismo dei dati, ogni GPU memorizza una copia completa ridondante dello stato, dei gradienti e dei parametri dell'ottimizzatore, il che è estremamente dispendioso, soprattutto per Adam, dove lo stato dell'ottimizzatore può essere molte volte più grande del modello stesso. ZeRO, introdotto da Microsoft in DeepSpeed, rimuove questa ridondanza suddividendo questi tensori tra le GPU in modo che ogni dispositivo possieda solo una porzione. ZeRO è disponibile in tre fasi progressive: la Fase 1 frammenta lo stato dell'ottimizzatore, la Fase 2 aggiunge lo sharding con gradiente e la Fase 3 frammenta i parametri stessi. Se necessario, le GPU raccolgono le parti mancanti tramite la comunicazione, le elaborano e quindi le rilasciano. Il risultato è una memoria per GPU notevolmente inferiore, che consente l'addestramento da miliardi a trilioni di parametri, pur mantenendo il modello di programmazione semplice del parallelismo dei dati.
Approfondimento tecnico
ZeRO scambia comunicazioni extra con il risparmio di memoria. Nella fase 3, prima del passaggio in avanti di un livello, un all-gather raccoglie i parametri completi di quel livello su ciascuna GPU; successivamente le fette non di proprietà vengono scartate per recuperare memoria. I gradienti vengono ridotti e distribuiti in modo che ogni GPU mantenga solo la sezione del gradiente corrispondente ai parametri di sua proprietà. FSDP (Fully Sharded Data Parallel) di PyTorch implementa la stessa idea in modo nativo, avvolgendo i moduli in shard e resharding al volo.
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 di ZeRO e degli ottimizzatori frammentati
Lo sharding sta diventando l’impostazione predefinita per l’addestramento su larga scala piuttosto che un’opzione esotica. Aspettatevi un'integrazione più profonda con l'offload (spingendo le sezioni su CPU o NVMe tramite ZeRO-Infinity), una migliore sovrapposizione di raccolta completa e riduzione della dispersione con il calcolo per nasconderne i costi e combinazioni con tensore e parallelismo della pipeline. Poiché i modelli continuano a crescere, gli ottimizzatori partizionati efficienti in termini di memoria sono fondamentali per adattarli a budget hardware realistici.
Implementazione nel mondo reale
Utilizzo di DeepSpeed ZeRO Stage 2 per mettere a punto un modello linguistico con molti miliardi di parametri che altrimenti traboccherebbe la memoria della GPU.
Formazione con PyTorch FSDP, che suddivide parametri, gradienti e stato dell'ottimizzatore tra GPU e li raccoglie per livello su richiesta.
Applicazione di ZeRO-Offload per inviare lo stato dell'ottimizzatore alla memoria della CPU, consentendo a una singola GPU di addestrare un modello molte volte più grande della sua VRAM.
Scalabilità di un modello da trilioni di parametri con ZeRO-Infinity eseguendo lo streaming di frammenti di parametri dallo storage NVMe quando la memoria della GPU e della CPU si esaurisce.
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 ZeRO and Sharded Optimizers 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
Lookahead e ottimizzatori Lion
Domande frequenti
What is ZeRO and Sharded Optimizers?
ZeRO (Zero Redundancy Optimizer) elimina la dispendiosa duplicazione della memoria del parallelismo dei dati suddividendo lo stato, i gradienti e i pesi dell'ottimizzatore tra le GPU. Ti consente di addestrare modelli enormi con la semplicità del parallelismo dei dati ma con una frazione della memoria per GPU.
Quale ridondanza elimina ZeRO rispetto al semplice parallelismo dei dati?
Il parallelismo dei dati standard memorizza una copia completa dello stato, dei gradienti e dei pesi dell'ottimizzatore su ogni GPU; ZeRO li suddivide in modo che ogni GPU ne contenga solo una fetta.
Perché lo stato dell'ottimizzatore è spesso il più grande divoratore di memoria con Adam?
Adam mantiene stime correnti come il primo e il secondo momento per parametro, che combinate con i pesi principali fp32 possono far impallidire le dimensioni del modello.
Cosa fa lo shard di ZeRO Stage 3 rispetto agli Stage 1 e 2?
La Fase 1 frammenta lo stato dell'ottimizzatore, la Fase 2 aggiunge gradienti e la Fase 3 va oltre suddividendo i parametri del modello anche tra le GPU.
In ZeRO Stage 3, come fa una GPU a ottenere tutti i parametri necessari per il passaggio in avanti di un livello?
Prima di calcolare un livello, un all-gather assembla i suoi parametri completi su ciascuna GPU; una volta terminato, le porzioni non di proprietà vengono liberate per recuperare memoria.
Quale funzionalità PyTorch implementa nativamente lo sharding in stile ZeRO?
FSDP (Fully Sharded Data Parallel) di PyTorch suddivide parametri, gradienti e stato dell'ottimizzatore, raccogliendoli ed effettuando il resharding al volo, rispecchiando ZeRO.