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.
| Wymaganie | Kandydat do przetestowania |
|---|---|
| Natywne APIs PyTorch i rozproszony stan tensorów | FSDP2 |
| Podział stanu optymalizatora przy nadal replikowanych parametrach | DeepSpeed ZeRO-1 lub ZeRO-2 |
| Pełny podział stanu | FSDP lub ZeRO-3 |
| Przenoszenie stanu do NVMe | DeepSpeed 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.