Addestramento di precisione misto - Amazon SageMaker AI

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Addestramento di precisione misto

La libreria di parallelismo dei SageMaker modelli (SMP) v2 supporta l'addestramento di precisione misto pronto all'uso grazie all'integrazione con framework open source come FSDP e Transformer Engine. PyTorch Per ulteriori informazioni, consulta i seguenti argomenti.

Addestramento di precisione misto con nessuna istanza P5 utilizzando Transformer Engine FP8

A partire dalla libreria SageMaker Model Parallelism (SMP) v2.2.0, la libreria SMP si integra con Transformer Engine e supporta l'addestramento di precisione FP8 misto pronto all'uso, mantenendo la compatibilità con FSDP. PyTorch MixedPrecision Ciò significa che puoi utilizzare sia PyTorch FSDP per l'addestramento di precisione misto che Transformer Engine per l'allenamento. FP8 Per i livelli del modello non supportati dalla funzione di FP8 addestramento di Transformer Engine, tali livelli ricorrono alla PyTorch precisione mista FSDP.

Nota

SMP v2 offre FP8 supporto per i seguenti modelli Hugging Face Transformer:

  • GPT-NeoX (disponibile in SMP v2.2.0 e versioni successive)

  • Llama 2 (disponibile in SMP v2.2.0 e versioni successive)

  • Mixtral 8x7b e Mixtral 8x22b (disponibili in SMP v2.5.0 e versioni successive)

Nota

Questo FP8 corso di formazione sulla funzionalità P5 è disponibile nella seguente combinazione di librerie di e libreria: SageMaker PyTorch

  • SageMaker Python SDK v2.212.0 e versioni successive

  • PyTorch v2.2.0 e versioni successive

FP8(precisione in virgola mobile a 8 bit) è un tipo di dati che è emerso come un altro paradigma per accelerare l'addestramento del deep learning dei modelli LLM. Con il rilascio di NVIDIA H100 GPUs che supporta FP8 i tipi di dati, puoi sfruttare i vantaggi derivanti dai miglioramenti delle prestazioni sulle istanze P5 dotate di H100 GPUs, accelerando al contempo l'addestramento distribuito con un addestramento di precisione misto. FP8

Il tipo di FP8 dati si estende ulteriormente ai formati E4M3 ed E5M2. E4M3 offre una maggiore precisione, dispone di una gamma dinamica limitata ed è ideale per il passaggio all’addestramento dei modelli. E5M2 si distingue per una gamma dinamica più ampia, ma una precisione ridotta, ed è più adatto per il passaggio all’indietro, in cui la precisione è meno importante e la gamma dinamica più ampia rappresenta un vantaggio. Pertanto, ti consigliamo di utilizzare la ricetta della FP8 strategia ibrida per sfruttare efficacemente queste caratteristiche.

Per i tipi di dati a mezza precisione (FP16 e BF16), le tecniche globali di scalabilità delle perdite come la scalabilità statica delle perdite o la scalabilità dinamica delle perdite gestiscono i problemi di convergenza derivanti dalla perdita di informazioni dovuta all'arrotondamento dei gradienti a semiprecisione. Tuttavia, l'intervallo dinamico di è ancora più ristretto e le tecniche di scala globale delle perdite non sono sufficienti. FP8 A questo punto, occorre una tecnica di dimensionamento per tensore di maggiore precisione. Il dimensionamento ritardato è una strategia che seleziona un fattore di dimensionamento basato sui valori massimi assoluti osservati in una serie di tensori nelle iterazioni precedenti. Questa strategia presenta un compromesso: sfrutta tutti i vantaggi prestazionali del FP8 calcolo, ma richiede memoria per conservare la cronologia dei valori massimi dei tensori. Per saperne di più sulla strategia di scalabilità ritardata in generale, consulta il paper FP8 Formats for Deep Learning.

In pratica, l'utilizzo FP8 è utile in tutti gli scenari di addestramento sulle istanze P5. Ti consigliamo vivamente di abilitarlo FP8 quando possibile per migliorare le prestazioni dell'allenamento.

SMP v2 offre il supporto immediato di Transformer Engine. Pertanto, quando si esegue l' FP8allenamento con SMP v2 su istanze P5 di SageMaker AI (ml.p5.48xlarge), l'unica cosa che devi fare è importare torch.sagemaker lo script di addestramento e continuare a utilizzare il pacchetto Python Transformer Engine nativo. Per ulteriori informazioni sull'uso di Transformer Engine per la FP8 formazione in generale, consulta Using FP8 with Transformer Engine nella documentazione di NVIDIA Transformer Engine. Il seguente frammento di codice mostra come dovrebbero apparire le righe di codice per l'importazione della libreria SMP e la configurazione nello script di training. FP8

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()

Per trovare un esempio pratico di FP8 formazione con SMP v2 su istanze P5, consultate il taccuino di esempio su Accelerate SageMaker PyTorch FSDP Training of LLAMA-v2 (o GPT-Neox) con istanze P5. FP8

Addestramento di precisione misto con PyTorch tipi di dati a semiprecisione utilizzando FSDP

SMP v2 supporta PyTorch FSDP MixedPrecision per i lavori di formazione su istanze P4 e P5. PyTorch FSDP offre varie configurazioni per una precisione mista sia per il miglioramento delle prestazioni che per la riduzione della memoria.

Nota

Questo addestramento di precisione misto con la funzionalità PyTorch FSDP è disponibile nella seguente combinazione di librerie di e libreria. SageMaker PyTorch

  • SMP v2.0.0 e versioni successive

  • SageMaker Python SDK v2.200.0 e versioni successive

  • PyTorch v2.0.1 e versioni successive

La modalità standard per configurare un modello a precisione mista consiste nel creare il modello interno in float32 e quindi consentire a FSDP di trasmettere i parametri float16 o bfloat16 immediatamente propagando una policy MixedPrecision, come mostrato nel frammento di codice riportato di seguito. Per ulteriori informazioni sulle opzioni per modificare i parametri dtype for, la riduzione o i buffer per la precisione mista PyTorch, consulta l'API PyTorch FSDP MixedPrecision nella documentazione. 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 )

Tieni presente che alcuni modelli (come Hugging Face Transformers Llama) prevedono buffer come float32. Per utilizzare float32, sostituisci torch.bfloat16 con torch.float32 nella riga che definisce l’oggetto dtype.