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.
Argomenti
Addestramento di precisione misto con FP8 su istanze P5 utilizzando Transformer Engine
A partire dalla libreria SageMaker Model Parallelism (SMP) v2.2.0, la libreria SMP si integra con TransformerMixedPrecision
Nota
SMP v2 offre il supporto di FP8 per i seguenti modelli di Hugging Face Transformers:
-
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 corso di formazione FP8 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 si sta affermando come un altro paradigma per accelerare l’addestramento deep learning dei modelli LLM. Il rilascio delle GPU NVIDIA H100 che supportano i tipi di dati FP8 consente di sfruttare i vantaggi derivanti dai miglioramenti delle prestazioni sulle istanze P5 dotate di GPU H100, accelerando al contempo l’addestramento distribuito grazie all’addestramento di precisione misto FP8.
Il tipo di dati FP8 si estende anche 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, per sfruttare queste caratteristiche in modo efficace ti consigliamo di utilizzare la strategia FP8 ibrida
Per i tipi di dati a mezza precisione (FP16 e BF16), le tecniche globali di dimensionamento delle perdite, come il dimensionamento statico o il dimensionamento dinamico, permettono di gestire i problemi di convergenza derivanti dalla perdita di informazioni dovuta ai gradienti di arrotondamento a mezza precisione. Tuttavia, l’intervallo dinamico di FP8 è ancora più ristretto e le tecniche di dimensionamento globale delle perdite non sono sufficienti. 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 rappresenta un compromesso: sfrutta tutti i vantaggi offerti dalle prestazioni del calcolo FP8, ma richiede memoria per conservare la cronologia dei valori massimi dei tensori. Per ulteriori informazioni sulla strategia di dimensionamento ritardato in generale, consulta il documento FP8 Formats for Deep Learning
In pratica, l’utilizzo di FP8 è utile in tutti gli scenari di addestramento sulle istanze P5. Consigliamo vivamente di abilitare FP8 ogni volta che sia possibile per migliorare le prestazioni dell’addestramento.
SMP v2 offre il supporto immediato di Transformer Engine. Pertanto, quando si esegue l'addestramento FP8 con SMP v2 su istanze P5 di SageMaker AI (ml.p5.48xlarge), l'unica cosa che devi fare è importare lo script di formazione e continuare torch.sagemaker a utilizzare il pacchetto nativo Transformer Engine Python. Per ulteriori informazioni sull’utilizzo di Transformer Engine per l’addestramento su FP8 in generale, consulta Utilizzo di FP8 con Transformer Engine
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()
Addestramento di precisione misto PyTorch con tipi di dati a semiprecisione utilizzando FSDP
SMP v2 supporta PyTorch FSDP MixedPrecision
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
# 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.