FSDP vs DeepSpeed ZeRO: Was passt zu meinem Trainingssetup?

Automatische Übersetzung

Dieser Artikel wurde automatisch aus der englischen Originalversion übersetzt.

Beginnen Sie mit FSDP, wenn ein PyTorch-Trainingsstack verteiltes State-Sharding benötigt. Testen Sie DeepSpeed, wenn Sie dessen wählbare ZeRO-Stufen oder CPU- und NVMe-Offload-Funktionen brauchen. Kein Framework ist grundsätzlich schneller; vergleichen Sie die benötigte Konfiguration auf Ihrem Cluster.

Beide können Parameter, Gradienten und den Optimizer-Zustand auf GPUs verteilen. Ihre APIs, Richtlinien und der Umgang mit Checkpoints unterscheiden sich.

Vollständiges Sharding folgt demselben grundlegenden Ablauf

Bei vollständigem Parameter-Sharding speichert jede GPU einen Teil des Models. Bevor das Framework eine Gruppe von Schichten berechnet, sammelt es die dafür benötigten Parameter. Anschließend führt es die Berechnung aus, gibt die gesammelten Parameter entsprechend seiner Resharding-Richtlinie frei und kombiniert und verteilt die Gradienten mit reduce-scatter.

Die Gruppierung und das Prefetching bestimmen den temporären Speicherbedarf und die Überlappung der Kommunikation mit der Berechnung. Wenn jede kleine Operation einzeln geshardet wird, kann die Kommunikation den Aufwand dominieren; das Sammeln sehr großer Gruppen kann vorübergehend einen hohen Speicherbedarf verursachen.

AnforderungZu testender Kandidat
PyTorch-native APIs und verteilter TensorzustandFSDP2
Sharding des Optimizer-Zustands bei weiterhin replizierten ParameternDeepSpeed ZeRO-1 oder ZeRO-2
Vollständiges State-ShardingFSDP oder ZeRO-3
NVMe-Offload des ZustandsDeepSpeed ZeRO-Infinity

Das FSDP2-Tutorial verwendet fully_shard und DTensor-Parameter. Es bietet auch Resharding-Richtlinien: Wer Parameter nach dem Forward-Pass behält, benötigt mehr Speicher, muss sie später aber seltener sammeln. Erstellen Sie den Optimizer erst nach den erforderlichen Sharding-Transformationen.

Vergleichen Sie einen vollständigen Trainingsschritt

Halten Sie Model, Daten, Präzision, Sequenzlänge, effektive Batchgröße und GPU-Topologie konstant. Messen Sie den höchsten Bedarf an zugewiesenem Speicher, die Dauer eines Schritts und die Kommunikation. Prüfen Sie, ob ein gespeicherter Checkpoint den Modelzustand, den Optimizer-Zustand und den vorgesehenen Trainingsfortschritt wiederherstellen kann.

Hugging Face Accelerate kann FSDP oder DeepSpeed über Startkonfigurationen auswählen, wenn der Code für diese Integrationen vorbereitet ist. Das bedeutet nicht, dass jedes beliebige Trainingsskript ohne Anpassungen wechseln kann, insbesondere bei Checkpoints, Offload und eigener Optimizer-Verarbeitung.

Der FSDP-Vergleich im LLM Engineering Guide stellt den Zusammenhang zwischen diesen Entscheidungen und dem Speicherbedarf des Trainingszustands her.