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ätLayerNorm 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
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.
-
GPT-NeoX
-
Llama 2 und Llama 3
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-FSDPcontext_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 }