As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Treinamento de precisão mista
A biblioteca de paralelismo de SageMaker modelos (SMP) v2 oferece suporte a treinamento misto de precisão pronto para uso, integrando-se a estruturas de código aberto, como FSDP e Transformer Engine. PyTorch Para saber mais, consulte os tópicos a seguir.
Tópicos
Treinamento misto de precisão com FP8 instâncias P5 usando o Transformer Engine
A partir da biblioteca de paralelismo de SageMaker modelos (SMP) v2.2.0, a biblioteca SMP se integra ao Transformer EngineMixedPrecision
nota
O SMP v2 oferece FP8 suporte para os seguintes modelos de Hugging Face Transformer:
-
GPT-NeoX (disponível no SMP v2.2.0 e versões posteriores)
-
Llama 2 (disponível no SMP v2.2.0 e versões posteriores)
-
Mixtral 8x7b e Mixtral 8x22b (disponíveis no SMP v2.5.0 e versões posteriores)
nota
Esse FP8 treinamento sobre o recurso P5 está disponível na seguinte combinação de bibliotecas de SageMaker e da PyTorch biblioteca:
-
O SageMaker Python SDK v2.212.0 e versões posteriores
-
PyTorch v2.2.0 e versões posteriores
FP8(precisão de ponto flutuante de 8 bits) é um tipo de dados que surgiu como outro paradigma para acelerar o treinamento de aprendizado profundo de modelos LLM. Com o lançamento da NVIDIA H100 GPUs suportando tipos de FP8 dados, você pode se beneficiar das vantagens das melhorias de desempenho nas instâncias P5 equipadas com o H100 GPUs, ao mesmo tempo em que acelera o treinamento distribuído com treinamento de precisão mista. FP8
O tipo FP8 de dados se ramifica ainda mais para os formatos E4M3 e E5M2. O E4M3 oferece uma melhor precisão, tem uma faixa dinâmica limitada e é ideal para o passe para frente no treinamento de modelos. O E5M2 tem uma faixa dinâmica mais ampla, mas com precisão reduzida, e é mais adequado para a passagem para trás, onde a precisão é menos crítica e uma faixa dinâmica mais ampla torna-se benéfica. Portanto, recomendamos que você use a receita da FP8 estratégia híbrida
Para tipos de dados de meia precisão (FP16 e BF16), técnicas globais de escalonamento de perdas, como escalabilidade de perda estática ou escalabilidade dinâmica de perdas, lidam com problemas de convergência que surgem da perda de informações devido a gradientes de arredondamento em meia precisão. No entanto, a faixa dinâmica de FP8 é ainda mais estreita e as técnicas de escalonamento de perdas globais não são suficientes. Nesse ponto, precisamos de uma técnica de ajuste de escala por tensor mais refinada. O ajuste de escala atrasado é uma estratégia que seleciona um fator de escala com base nos valores absolutos máximos observados em vários tensores das iterações anteriores. Há uma desvantagem nessa estratégia: ela usa todos os benefícios de desempenho da FP8 computação, mas requer memória para manter o histórico de valores máximos dos tensores. Para saber mais sobre a estratégia de escalabilidade retardada em geral, consulte o artigo FP8 Formats for Deep Learning
Na prática, o uso FP8 é útil em todos os cenários de treinamento em instâncias P5. É altamente recomendável ativar FP8 sempre que possível para melhorar o desempenho do treinamento.
O SMP v2 é compatível com o Transformer Engine pronto para uso. Portanto, ao executar o FP8 treinamento com SMP v2 em instâncias P5 de SageMaker AI (ml.p5.48xlarge
), a única coisa que você precisa fazer é importar torch.sagemaker
seu script de treinamento e continuar usando o pacote Python nativo do Transformer Engine. Para saber mais sobre como usar o Transformer Engine para FP8 treinamento em geral, consulte Usando FP8 com o 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()
Para encontrar um exemplo prático de FP8 treinamento com SMP v2 em instâncias P5, consulte o exemplo de caderno em Accelerate SageMaker PyTorch FSDP Training of LLama-v2
Treinamento de precisão mista com tipos de dados de meia precisão usando PyTorch FSDP
O SMP v2 oferece suporte ao PyTorch FSDP MixedPrecision
nota
Esse treinamento misto de precisão com o recurso PyTorch FSDP está disponível na seguinte combinação de bibliotecas de SageMaker e da PyTorch biblioteca.
-
SMP v2.0.0 e versões posteriores
-
o SageMaker Python SDK v2.200.0 e versões posteriores
-
PyTorch v2.0.1 e versões posteriores
A forma padrão de configurar um modelo para precisão mista é criar o modelo em float32
e, em seguida, permitir que o FSDP transmita os parâmetros para float16
ou bfloat16
dinamicamente ao passar uma política de MixedPrecision
, conforme apresentado no trecho de código a seguir. Para obter mais informações sobre as opções de alteração de parâmetros, redução ou buffers para precisão mista PyTorch, consulte a MixedPrecision
API PyTorch FSDP na documentaçãodtype
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 )
Observe que certos modelos (como o modelo Llama da Hugging Face Transformers) esperam buffers como float32
. Para usar float32
, substitua torch.bfloat16
por torch.float32
, na linha que define o objeto dtype
.