PRZEWODNIK techniczny

Optymalizatory ZeRO i Sharded

ZeRO (Zero Redundancy Optimizer) eliminuje marnotrawne duplikowanie pamięci w wyniku równoległości danych poprzez sharding stanu optymalizatora, gradientów i wag pomiędzy procesorami graficznymi.

2 minuty czytaniaOstatnia aktualizacja

Przegląd

It lets you train enormous models with the simplicity of data parallelism but a fraction of the per-GPU memory.

Głębokie nurkowanie

In ordinary data parallelism, every GPU stores a redundant full copy of the optimizer state, gradients, and parameters, which is hugely wasteful, especially for Adam, where optimizer state can be several times the size of the model itself. ZeRO, introduced by Microsoft in DeepSpeed, removes this redundancy by partitioning these tensors across GPUs so each device owns only a slice. ZeRO comes in three progressive stages: Stage 1 shards optimizer state, Stage 2 adds gradient sharding, and Stage 3 shards the parameters themselves. W razie potrzeby procesory graficzne gromadzą brakujące wycinki za pośrednictwem komunikacji, obliczają, a następnie udostępniają je. The result is dramatically lower memory per GPU, enabling billion- to trillion-parameter training, while keeping the easy programming model of data parallelism.

Wgląd techniczny

ZeRO poświęca dodatkową komunikację na rzecz oszczędności pamięci. Na etapie 3, przed przejściem warstwy w przód, funkcja all-gather zbiera pełne parametry tej warstwy na każdym procesorze graficznym; następnie niebędące własnością plasterki są odrzucane, aby odzyskać pamięć. Gradienty są rozproszone redukcyjnie, więc każdy procesor graficzny przechowuje tylko wycinek gradientu odpowiadający posiadanym parametrom. FSDP (Fully Sharded Data Parallel) firmy PyTorch implementuje ten sam pomysł natywnie, zawijając moduły do ​​fragmentów i reshardów w locie.

Wpływ strategiczny

Koszt i budżet

Decyzje dotyczące architektury wpływają na wydajność i koszty operacyjne przez lata.

Jaśniejsze decyzje

Edukacja techniczna pomaga zespołom wybrać odpowiedni stos, a nie tylko najnowszy.

Kontrola jakości

Lepsze wybory inżynieryjne zmniejszają liczbę incydentów związanych z niezawodnością w produkcji.

Przyszłość optymalizatorów ZeRO i Sharded

Sharding staje się standardem w przypadku szkoleń na dużą skalę, a nie egzotyczną opcją. Expect deeper integration with offloading (pushing slices to CPU or NVMe via ZeRO-Infinity), better overlap of all-gather and reduce-scatter with computation to hide their cost, and combinations with tensor and pipeline parallelism. W miarę ciągłego rozwoju modeli, wydajne pod względem pamięci optymalizatory dzielone na fragmenty odgrywają kluczową rolę w dopasowaniu ich do realistycznych budżetów sprzętowych.

Implementacja w świecie rzeczywistym

Wykorzystanie DeepSpeed ​​ZeRO Stage 2 do dostrojenia wielomiliardowego modelu językowego, który w przeciwnym razie spowodowałby przepełnienie pamięci GPU.

Szkolenie z PyTorch FSDP, które dzieli parametry, gradienty i stan optymalizatora na procesory graficzne i gromadzi je na żądanie w poszczególnych warstwach.

Zastosowanie funkcji ZeRO-Offload w celu wypychania stanu optymalizatora do pamięci procesora, umożliwiając pojedynczemu procesorowi graficznemu trenowanie modelu wielokrotnie większego niż jego VRAM.

Skalowanie modelu o bilionach parametrów za pomocą ZeRO-Infinity poprzez przesyłanie strumieniowe fragmentów parametrów z pamięci NVMe w przypadku wyczerpania się pamięci GPU i procesora.

Zagrożenia i poręcze

Optymalizacja jednego testu porównawczego może ukryć szersze słabości systemu.

Koszty infrastruktury i utrzymania są często niedoszacowane.

W miarę jak systemy stają się coraz bardziej złożone, luki w bezpieczeństwie i obserwowalności mogą się zwiększać.

Plan wdrożenia

1

Przed wdrożeniem zdefiniuj docelowe opóźnienia, jakość i koszty.

2

Test porównawczy w realistycznych warunkach obciążenia i danych.

3

Monitorowanie przyrządu pod kątem błędów, dryftu i wpływu użytkownika.

4

Przed skalowaniem przygotuj ścieżki wycofywania zmian i reakcji na incydenty.

Odkrywaj dalej

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.

Rozpocznij quiz

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

Następny poradnik

Lookahead i Lion Optimizery

Często zadawane pytania

What is ZeRO and Sharded Optimizers?

ZeRO (Zero Redundancy Optimizer) eliminates the wasteful memory duplication of data parallelism by sharding optimizer state, gradients, and weights across GPUs. Pozwala trenować ogromne modele z prostotą równoległości danych, ale przy ułamku pamięci przypadającej na procesor graficzny.

Jaką redundancję eliminuje ZeRO w porównaniu ze zwykłą równoległością danych?

Standardowa równoległość danych przechowuje pełną kopię stanu optymalizatora, gradientów i wag na każdym procesorze graficznym; ZeRO dzieli je na kawałki, więc każdy procesor graficzny przechowuje tylko wycinek.

Dlaczego stan optymalizatora często jest największym obciążeniem pamięci dla Adama?

Adam utrzymuje bieżące szacunki, takie jak pierwszy i drugi moment na parametr, co w połączeniu z głównymi wagami FP32 może przyćmić własny rozmiar modelu.

Co zawiera fragment ZeRO Stage 3, którego nie mają Etapy 1 i 2?

Etap 1 oddziela stan optymalizatora, etap 2 dodaje gradienty, a etap 3 idzie dalej, dzieląc również parametry modelu na procesory graficzne.

W jaki sposób procesor graficzny uzyskuje w ZeRO Stage 3 pełne parametry potrzebne do przejścia warstwy w przód?

Przed obliczeniem warstwy funkcja all-gather gromadzi jej pełne parametry na każdym procesorze graficznym; po zakończeniu niebędące własnością plasterki są uwalniane w celu odzyskania pamięci.

Która funkcja PyTorch natywnie implementuje sharding w stylu ZeRO?

Funkcja Fully Sharded Data Parallel (FSDP) PyTorch dzieli parametry, gradienty i stan optymalizatora na fragmenty, gromadząc je i ponownie dzieląc na fragmenty, odzwierciedlając ZeRO.