Optimizatoare ZeRO și Sharded
ZeRO (Zero Redundancy Optimizer) elimină duplicarea irosită a memoriei a paralelismului de date prin împărțirea stării, gradienților și greutăților optimizatorului pe GPU-uri.
Prezentare generală
It lets you train enormous models with the simplicity of data parallelism but a fraction of the per-GPU memory.
Scufundare în profunzime
În paralelismul de date obișnuit, fiecare GPU stochează o copie redundantă completă a stării, gradienților și parametrilor optimizatorului, ceea ce este extrem de irositor, în special pentru Adam, unde starea optimizatorului poate fi de câteva ori mai mare decât modelul în sine. ZeRO, introdus de Microsoft în DeepSpeed, elimină această redundanță prin partiționarea acestor tensori pe GPU-uri, astfel încât fiecare dispozitiv să dețină doar o porțiune. ZeRO vine în trei etape progresive: Etapa 1, starea de optimizare a fragmentelor, Etapa 2 adaugă fragmentare în gradient, iar Etapa 3 fragmentează parametrii înșiși. După cum este necesar, GPU-urile adună secțiunile lipsă prin comunicare, calculează, apoi le eliberează. Rezultatul este o memorie semnificativ mai redusă per GPU, permițând antrenamentul de la miliarde până la trilioane de parametri, păstrând în același timp modelul de programare ușoară al paralelismului de date.
Perspectivă tehnică
ZeRO schimbă comunicații suplimentare pentru economisirea memoriei. În etapa 3, înainte de trecerea înainte a unui strat, o colectare completă colectează parametrii completi ai acelui strat pe fiecare GPU; apoi feliile care nu sunt deținute sunt aruncate pentru a recupera memoria. Gradienții sunt împrăștiați în mod redus, astfel încât fiecare GPU păstrează doar porțiunea de gradient care se potrivește cu parametrii pe care îi deține. FSDP (Fully Sharded Data Parallel) de la PyTorch implementează aceeași idee în mod nativ, împachetând module în fragment și rehard din mers.
Impact strategic
Cost și buget
Deciziile de arhitectură generează performanța și costurile de operare de ani de zile.
Decizii mai clare
Educația tehnică ajută echipele să aleagă stiva potrivită, nu doar cea mai nouă.
Controlul calității
Opțiuni de inginerie mai bune reduc incidentele de fiabilitate în producție.
Viitorul ZeRO și Sharded Optimizers
Sharding-ul devine varianta implicită pentru antrenamentul la scară largă, mai degrabă decât o opțiune exotică. Așteptați-vă la o integrare mai profundă cu descărcare (împingerea secțiunilor către CPU sau NVMe prin ZeRO-Infinity), o mai bună suprapunere a totalității și reducerea dispersării cu calcul pentru a ascunde costul acestora și combinații cu paralelismul tensorului și conductei. Pe măsură ce modelele continuă să crească, optimizatoarele fragmentate eficiente din punct de vedere al memoriei sunt esențiale pentru a le potrivi în bugete hardware realiste.
Implementare în lumea reală
Utilizarea DeepSpeed ZeRO Stage 2 pentru a regla fin un model de limbaj cu mai multe miliarde de parametri care altfel ar depăși memoria GPU.
Antrenament cu PyTorch FSDP, care fragmentează parametrii, gradienții și starea optimizatorului pe GPU-uri și le adună pe strat la cerere.
Aplicarea ZeRO-Offload pentru a împinge starea optimizatorului în memoria CPU, permițând unui singur GPU să antreneze un model de multe ori mai mare decât VRAM-ul său.
Scalarea unui model cu un trilion de parametri cu ZeRO-Infinity prin streaming de fragmente de parametri din stocarea NVMe atunci când memoria GPU și CPU se epuizează.
Riscuri și balustrade
Optimizarea unui punct de referință poate ascunde slăbiciunile mai largi ale sistemului.
Costurile de infrastructură și întreținere sunt adesea subestimate.
Lacunele de securitate și observabilitate pot crește pe măsură ce sistemele devin mai complexe.
Foaia de parcurs de implementare
Definiți obiectivele de latență, calitate și cost înainte de implementare.
Benchmark în condiții realiste de încărcare și date.
Monitorizarea instrumentelor pentru erori, deriva și impactul utilizatorului.
Pregătiți căile de retragere și răspuns la incident înainte de scalare.
Continuați să explorați
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
Următorul ghid
Lookahead și Lion Optimizers
Întrebări frecvente
What is ZeRO and Sharded Optimizers?
ZeRO (Zero Redundancy Optimizer) elimină duplicarea irosită a memoriei a paralelismului de date prin împărțirea stării, gradienților și greutăților optimizatorului pe GPU-uri. Vă permite să antrenați modele enorme cu simplitatea paralelismului de date, dar o fracțiune din memoria per-GPU.
Ce redundanță elimină ZeRO în comparație cu paralelismul simplu de date?
Paralelismul standard de date stochează o copie completă a stării, gradienților și greutăților optimizatorului pe fiecare GPU; ZeRO fragmente acestea, astfel încât fiecare GPU să dețină doar o bucată.
De ce starea optimizatorului este adesea cel mai mare porc de memorie cu Adam?
Adam menține estimări de rulare, cum ar fi primul și al doilea moment per parametru, care, combinate cu greutățile principale fp32, pot depăși dimensiunea modelului.
Ce fragmente ZeRO Stage 3 nu fac etapele 1 și 2?
Starea de optimizare a fragmentelor din etapa 1, etapa 2 adaugă gradienți, iar etapa 3 merge mai departe, împărțind parametrii modelului și pe GPU-uri.
În ZeRO Stage 3, cum obține un GPU toți parametrii de care are nevoie pentru trecerea înainte a unui strat?
Înainte de a calcula un strat, un all-gather își adună parametrii completi pe fiecare GPU; odată terminat, feliile care nu sunt deținute sunt eliberate pentru a recupera memoria.
Ce caracteristică PyTorch implementează în mod nativ fragmentarea în stilul ZeRO?
Fully Sharded Data Parallel (FSDP) de la PyTorch fragmentează parametrii, gradienții și starea optimizatorului, adunându-le și reparându-le din mers, reflectând ZeRO.