Kontextparallelität - Amazon SageMaker AI

Kontextparallelität

Kontextparallelität ist eine Art von Modellparallelität, bei der die Modellaktivierungen entlang der Sequenzdimension fragmentiert werden. Im Gegensatz zu anderen Techniken der Sequenzparallelität, die nur die LayerNorm und RMSNorm partitionieren, partitioniert die Kontextparallelität die Netzwerkeingänge und alle dazwischenliegenden Aktivierungen entlang der Sequenzdimension.

SMP v2 ist für die Kontextparallelität in Transformer Engine integriert und kann in Verbindung mit PyTorch FSDP und SMP Tensor-Parallelität verwendet werden. Sie können alle drei Parallelitäten gleichzeitig für das Modelltraining aktivieren. Kontextparallelität ist für Trainingsmodelle mit großen Aktivierungsgrößen und langen Sequenzlängen von Vorteil. Sie beschleunigt die Berechnung von Aufmerksamkeitswerten und Aufmerksamkeitsergebnissen, da jedes Gerät nur einen Teil der Werte und Ergebnisse entlang der Sequenzdimension berechnen kann. Die Tensorparallelität beschleunigt zwar auch die Berechnung durch Partitionierung entlang der verborgenen Dimension, doch der Vorteil der Kontextparallelität ist größer, da die Rechenanforderungen quadratisch mit der Sequenzdimension steigen.

Transformer-Modelle von Hugging Face, die mit der SMP-Kontextparallelität kompatibel sind

SMP v2 bietet derzeit Unterstützung der Kontextparallelität für die folgenden Transformer-Modelle von Hugging Face.

Kontextparallelität konfigurieren

Legen Sie einen ganzzahligen Wert für den context_parallel_degree-Parameter fest, der die Anzahl der GPUs in Ihrem Cluster gleichmäßig verteilt. Wenn Sie z. B. eine 8-GPU-Instance haben, verwenden Sie 2, 4 oder 8 für context_parallel_degree. Wir empfehlen, mit einem kleinen context_parallel_degree-Wert zu beginnen und ihn schrittweise zu erhöhen, bis das Modell mit der erforderlichen Länge der Eingabesequenz in den GPU-Speicher passt.

Die folgenden Codefragmente zeigen, wie Sie das SMP-Initialisierungsmodul torch.sagemaker.init() zu Ihrem Trainingsskript hinzufügen und das SMP-Konfigurationswörterbuch im JSON-Format für den Trainingsjob-Launcher einrichten. Dabei folgen Sie dem in Verwendung der SageMaker-Modellparallelitätsbibliothek v2 beschriebenen zweistufigen Prozess. Sie müssen keine Änderungen an Ihrem PyTorch-Modell oder der PyTorch-FSDP-Konfiguration vornehmen. Weitere Informationen zum Parameter context_parallel_degree erhalten Sie unter Konfigurationsparameter für die Kernfunktionen von SMP v2.

In Ihrem Trainingsskript

Initialisieren Sie im Rahmen von Schritt 1 Ihr Skript mit torch.sagemaker.init(), um SMP v2 zu aktivieren, und umschließen Sie Ihr Modell mit der torch.sagemaker.transform-API.

Ab SMP v2.6.0 können Sie das Argument cp_comm_type verwenden, um zu bestimmen, welche Implementierung der Kontextparallelität verwendet werden soll. Die SMP-Bibliothek unterstützt derzeit zwei Implementierungen: p2p und all_gather. Die p2p-Implementierung verwendet Peer-to-Peer-Aufrufe zum Senden/Empfangen für die Ansammlung von Schlüsselwerten während der Aufmerksamkeitsimplementierung und läuft asynchron, sodass Überschneidungen mit der Datenverarbeitung möglich sind. Die all_gather-Implementierung verwendet stattdessen die kollektive AllGather-Operation und wird synchron ausgeführt.

import torch.sagemaker as tsm tsm.init() from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_config(..) model = tsm.transform(model, cp_comm_type="p2p")

SMP-Konfiguration

Fügen Sie im Rahmen von Schritt 2 den folgenden Parameter zum SMP-Konfigurationswörterbuch für den SageMaker-PyTorch-Schätzer hinzu.

{ ..., # other SMP config parameters "context_parallel_degree": 2 }