FSDP czy DeepSpeed ZeRO: co pasuje do mojego środowiska treningowego?

Tłumaczenie automatyczne

Ten artykuł został automatycznie przetłumaczony z angielskiego oryginału.

Zacznij od FSDP, gdy środowisko treningowe oparte na PyTorch wymaga rozproszonego podziału stanu. Przetestuj DeepSpeed, jeśli potrzebujesz jego wybieralnych etapów ZeRO lub funkcji przenoszenia danych do CPU i NVMe. Żaden z tych frameworków nie zapewnia najlepszej wydajności w każdej sytuacji; porównaj wymaganą konfigurację na swoim klastrze.

Oba mogą rozdzielać parametry, gradienty i stan optymalizatora między GPUs. Różnią się pod względem APIs, zasad działania i obsługi checkpointów.

Pełny podział stanu przebiega według tego samego podstawowego procesu

Przy pełnym podziale parametrów każda GPU przechowuje część modelu. Zanim framework wykona obliczenia dla grupy warstw, zbiera parametry potrzebne tej grupie. Następnie wykonuje obliczenia, zwalnia zebrane parametry zgodnie ze swoją zasadą ponownego podziału oraz łączy i rozdziela gradienty przez reduce-scatter.

Decyzje o grupowaniu i pobieraniu z wyprzedzeniem określają tymczasowe zużycie pamięci oraz nakładanie się komunikacji i obliczeń. Osobny podział każdej drobnej operacji może sprawić, że komunikacja zdominuje czas wykonania; zbieranie bardzo dużych grup może powodować chwilowy wzrost zużycia pamięci.

WymaganieKandydat do przetestowania
Natywne APIs PyTorch i rozproszony stan tensorówFSDP2
Podział stanu optymalizatora przy nadal replikowanych parametrachDeepSpeed ZeRO-1 lub ZeRO-2
Pełny podział stanuFSDP lub ZeRO-3
Przenoszenie stanu do NVMeDeepSpeed ZeRO-Infinity

Samouczek FSDP2 korzysta z fully_shard i parametrów DTensor. Udostępnia także zasady ponownego podziału: zachowanie parametrów po przejściu w przód zwiększa zużycie pamięci, ale ogranicza liczbę późniejszych operacji zbierania. Utwórz optymalizator po zastosowaniu wymaganych przekształceń podziału.

Porównaj cały krok treningowy

Zachowaj ten sam model, dane, precyzję, długość sekwencji, efektywny rozmiar partii i topologię GPUs. Zmierz szczytowe zużycie przydzielonej pamięci, czas kroku i komunikację. Sprawdź, czy zapisany checkpoint pozwala odtworzyć stan modelu, stan optymalizatora i zamierzony postęp treningu.

Hugging Face Accelerate może wybierać FSDP lub DeepSpeed za pomocą konfiguracji uruchomieniowych dla kodu przygotowanego do tych integracji. Nie oznacza to, że dowolny skrypt treningowy może przełączać się bez zmian, szczególnie w zakresie checkpointów, przenoszenia danych i obsługi niestandardowych optymalizatorów.

Porównanie FSDP w LLM Engineering Guide wiąże te wybory ze zużyciem pamięci przez stan treningowy.