Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Optimizer-Zustandsfragmentierung
Die Optimizer-Zustandsfragmentierung ist eine nützliche Technik zur Speichereinsparung, bei der der Optimizer-Zustand (die Menge der Gewichtungen, die den Zustand des Optimierers beschreiben) auf datenparallele Gerätegruppen fragmentiert wird. Sie können das State-Sharding des Optimizers immer dann verwenden, wenn Sie einen Stateful-Optimizer (wie Adam) oder einen FP16 Optimizer (der beide und Kopien der Parameter speichert) verwenden. FP16 FP32
Anmerkung
Das State-Sharding von Optimizer ist PyTorch in der Modellparallelismus-Bibliothek v1.6.0 und höher verfügbar. SageMaker
So wird die Optimizer-Zustandsfragmentierung verwendet
Die Optimizer-Zustandsfragmentierung können Sie aktivieren, indem Sie in der modelparallel
Konfiguration "shard_optimizer_state": True
einstellen.
Wenn diese Funktion aktiviert ist, partitioniert die Bibliothek die Menge der Modellparameter anhand des Datenparallelitätsgrades. Die Steigungen, die i
-ten Partition entsprechen, werden erst im i
ten Datenparallelrang reduziert. Am Ende des ersten Aufrufs einer smp.step
Decorator-Funktion definiert der mit smp.DistributedOptimizer
umschlossene Optimizer seine Parameter neu, so dass sie auf diejenigen Parameter beschränkt sind, die der Partition des aktuellen Datenparallelrangs entsprechen. Die neu definierten Parameter werden als virtuelle Parameter bezeichnet und teilen sich den zugrunde liegenden Speicher mit den ursprünglichen Parametern. Beim ersten Aufruf von optimizer.step
werden die Optimierer-Zustände anhand dieser neu definierten Parameter erstellt, die aufgrund der ursprünglichen Partition fragmentiert sind. Nach dem Optimierer-Update wird der AllGather Vorgang (als Teil des optimizer.step
Aufrufs) über die parallel Datenränge hinweg ausgeführt, um konsistente Parameterstatus zu erreichen.
Tipp
Die Optimizer-Zustandsfragmentierung kann nützlich sein, wenn der Daten-Parallelitätsgrad größer ist als 1 und das Modell mehr als eine Milliarde Parameter hat.
Der Daten-Parallelitätsgrad wird nach (processes_per_host *
instance_count / pipeline_parallel_degree)
berechnet, und die smp.dp_size()
Funktion übernimmt im Hintergrund die Größenanpassung.
Konfigurieren Sie einen SageMaker PyTorch Schätzer
mpi_options = { "enabled" : True, "processes_per_host" : 8, # 8 processes "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none " } smp_options = { "enabled":True, "parameters": { "microbatches": 4, "pipeline_parallel_degree": 2, # alias for "partitions" "placement_strategy": "cluster", "tensor_parallel_degree": 2, # tp over 2 devices "ddp": True, "shard_optimizer_state": True } }
Passen Sie Ihr PyTorch Trainingsskript an
Weitere Informationen finden Sie unter Anpassen Ihres PyTorch Trainingsskripts im Abschnitt Tensor-Parallelität kombiniert mit Pipeline-Parallelität. Für das Skript sind keine weiteren Änderungen erforderlich.