Gemischtes Präzisionstraining - Amazon SageMaker

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.

Gemischtes Präzisionstraining

Die SageMaker Modellparallelism (SMP) -Bibliothek v2 unterstützt standardmäßig gemischtes Präzisionstraining, indem sie in Open-Source-Frameworks wie PyTorch FSDP Transformer Engine integriert wird. Weitere Informationen finden Sie unter den folgenden Themen.

Training mit gemischter Präzision FP8 auf P5-Instanzen unter Verwendung der Transformer Engine

Ausgehend von der SageMaker Modellparallelism (SMP) -Bibliothek v2.2.0 ist die Bibliothek in die SMP Transformer Engine integriert und unterstützt standardmäßig FP8gemischtes Präzisionstraining, wobei die Kompatibilität mit gewahrt bleibt. PyTorch FSDPMixedPrecision Das bedeutet, dass Sie sowohl PyTorch FSDP für gemischtes Präzisionstraining als auch Transformer Engine für das Training verwenden können. FP8 Bei Modellebenen, die nicht von der FP8 Trainingsfunktion der Transformer Engine unterstützt werden, wird für diese Ebenen auf PyTorch FSDP gemischte Genauigkeit zurückgegriffen.

Anmerkung

SMPv2 bietet FP8 Unterstützung für die folgenden Hugging Face Transformer-Modelle:

  • GPT-NeoX (verfügbar in SMP v2.2.0 und höher)

  • Llama 2 (verfügbar in v2.2.0 und höher) SMP

  • Mixtral 8x7b und Mixtral 8x22b (verfügbar in v2.5.0 und höher) SMP

Anmerkung

Diese FP8 Schulung zur P5-Funktion ist in der folgenden Kombination aus Bibliotheken von und der Bibliothek verfügbar: SageMaker PyTorch

  • SageMaker Python SDK v2.212.0 und höher

  • PyTorch v2.2.0 und höher

FP8(8-Bit-Fließkomma-Präzision) ist ein Datentyp, der sich als weiteres Paradigma zur Beschleunigung des Deep-Learning-Trainings von Modellen herausgestellt hat. LLM Mit der Veröffentlichung von NVIDIA H100, die FP8 Datentypen GPUs unterstützen, können Sie von den Vorteilen der Leistungsverbesserungen auf P5-Instances profitieren, die mit dem H100 ausgestattet sindGPUs, und gleichzeitig das verteilte Training mit gemischter Präzision beschleunigen. FP8

Der FP8 Datentyp unterteilt sich weiter in die Formate E4M3 und E5M2. E4M3 bietet eine bessere Präzision, hat einen begrenzten Dynamikbereich und ist ideal für den Vorwärtspass beim Modelltraining. E5M2 hat einen größeren Dynamikbereich, hat aber eine geringere Präzision und eignet sich besser für den Rückwärtspass, bei dem Präzision weniger wichtig ist und ein größerer Dynamikbereich von Vorteil ist. Daher empfehlen wir Ihnen, die FP8Hybridstrategie zu verwenden, um diese Eigenschaften effektiv zu nutzen.

Bei Datentypen mit halber Genauigkeit (FP16undBF16) lösen globale Techniken zur Verlustskalierung wie statische Verlustskalierung oder dynamische Verlustskalierung Konvergenzprobleme, die sich aus Informationsverlusten aufgrund von Rundungsgradienten bei halber Genauigkeit ergeben. Der Dynamikbereich von FP8 ist jedoch noch enger, und die Techniken zur globalen Verlustskalierung reichen nicht aus. An diesem Punkt benötigen wir eine detailliertere Skalierungstechnik pro Tensor. Die verzögerte Skalierung ist eine Strategie, bei der ein Skalierungsfaktor auf der Grundlage der maximalen absoluten Werte ausgewählt wird, die in einer Reihe von Tensoren aus früheren Iterationen beobachtet wurden. Bei dieser Strategie gibt es einen Kompromiss: Sie nutzt alle Leistungsvorteile der FP8 Berechnung, benötigt aber Speicherplatz, um den Verlauf der Höchstwerte von Tensoren zu speichern. Weitere Informationen zur Strategie der verzögerten Skalierung im Allgemeinen finden Sie im paper FP8Formate für Deep Learning.

In der Praxis FP8 ist die Verwendung in allen Trainingsszenarien auf P5-Instanzen hilfreich. Wir empfehlen dringend, die Aktivierung FP8 wann immer möglich zu aktivieren, um die Trainingsleistung zu verbessern.

SMPv2 unterstützt Transformer Engine von Haus aus. Wenn Sie also ein FP8 Training mit SMP v2 auf P5-Instanzen von SageMaker (ml.p5.48xlarge) ausführen, müssen Sie nur torch.sagemaker in Ihr Trainingsskript importieren und weiterhin das native Python-Paket Transformer Engine verwenden. Weitere Informationen zur Verwendung von Transformer Engine für FP8 Schulungen im Allgemeinen finden Sie unter Verwendung FP8 mit Transformer Engine in der NVIDIATransformer Engine-Dokumentation. Der folgende Codeausschnitt zeigt, wie die Codezeilen für den Import der SMP Bibliothek und die Einrichtung FP8 in Ihrem Trainingsskript aussehen sollten.

import torch.sagemaker as tsm import transformer_engine.pytorch as te from transformer_engine.common.recipe import DelayedScaling, Format # Initialize the SMP torch.sagemaker API. tsm.init() # Define a transformer model and wrap it with the torch.sagemaker.transform API. from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_config(ModelConfig) model = tsm.transform(model) # Enable E4M3 during forward pass, E5M2 during backward pass. fp8_format = Format.HYBRID # Create an FP8 recipe. fp8_recipe = DelayedScaling(fp8_format=fp8_format, amax_history_len=32, amax_compute_algo="max") # Enable FP8 autocasting. with te.fp8_autocast(enabled=True, fp8_recipe=fp8_recipe, fp8_group=tsm.state.world_process_group): out = model(inp) loss = out.sum() loss.backward()

Ein praktisches Beispiel für das FP8 Training mit SMP v2 auf P5-Instances finden Sie im Beispiel-Notizbuch unter Accelerate SageMaker PyTorch FSDP Training of LLama-v2 (oder GPT -NeoX) with on P5-Instances. FP8

Gemischtes Präzisionstraining mit Datentypen mit halber Genauigkeit unter Verwendung von PyTorch FSDP

SMPv2 unterstützt PyTorch FSDPMixedPrecisionTrainingsjobs auf P4- und P5-Instances. PyTorch FSDPbietet verschiedene Konfigurationen für gemischte Präzision zur Leistungsverbesserung und Speicherreduzierung.

Anmerkung

Dieses Training mit gemischter Präzision und dieser PyTorch FSDP Funktion ist in der folgenden Kombination aus Bibliotheken von SageMaker und der PyTorch Bibliothek verfügbar.

  • SMPv2.0.0 und höher

  • SageMaker Python SDK v2.200.0 und höher

  • PyTorch v2.0.1 und später

Die Standardmethode, ein Modell für gemischte Genauigkeit zu konfigurieren, besteht darinfloat32, das Modell in FSDP zu erstellen und dann die Parameter in float16 oder bfloat16 im laufenden Betrieb umzuwandeln, indem eine MixedPrecision Richtlinie übergeben wird, wie im folgenden Codeausschnitt gezeigt. Weitere Informationen zu den Optionen zum Ändern der dtype Parameter, der Reduzierung oder der Puffer für gemischte Genauigkeit in finden Sie PyTorch FSDPMixedPrecisionAPIin der PyTorch Dokumentation. PyTorch

# Native PyTorch API from torch.distributed.fsdp import MixedPrecision dtype = torch.bfloat16 mixed_precision_policy = MixedPrecision( param_dtype=dtype, reduce_dtype=dtype, buffer_dtype=dtype ) model = FSDP( model, ..., mixed_precision=mixed_precision_policy )

Beachten Sie, dass bei bestimmten Modellen (wie dem Hugging Face Transformers Lama-Modell) Puffer als erwartet werden. float32 Um das Objekt zu verwendenfloat32, torch.bfloat16 ersetzen Sie es durch torch.float32 in der Zeile, die das Objekt definiert. dtype