Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Entrenamiento de precisión mixta
La biblioteca SageMaker model parallelism (SMP) v2 admite el entrenamiento mixto de precisión lista para usar, ya que se integra con marcos de código abierto como Transformer Engine. PyTorch FSDP Para obtener más información, consulte los temas siguientes.
Temas
Entrenamiento de precisión mixto con instancias P5 que FP8 utilizan Transformer Engine
A partir de la biblioteca SageMaker model parallelism (SMP) v2.2.0, la SMP biblioteca se integra con Transformer EngineMixedPrecision
nota
SMPLa versión 2 es FP8 compatible con los siguientes modelos de Hugging Face Transformer:
-
GPT-NeoX (disponible en la versión 2.2.0 y versiones SMP posteriores)
-
Llama 2 (disponible en SMP la versión 2.2.0 y versiones posteriores)
-
Mixtral 8x7b y Mixtral 8x22b (disponibles en la versión 2.5.0 y versiones posteriores) SMP
nota
Esta FP8 formación sobre la función P5 está disponible en la siguiente combinación de bibliotecas de y la biblioteca: SageMaker PyTorch
-
SageMaker Python SDK v2.212.0 y versiones posteriores
-
PyTorch v2.2.0 y versiones posteriores
FP8(precisión de punto flotante de 8 bits) es un tipo de datos que se ha convertido en otro paradigma para acelerar el entrenamiento de modelos mediante el aprendizaje profundo. LLM Con el lanzamiento de los tipos de FP8 datos GPUs compatibles con el NVIDIA H100, puede beneficiarse de las ventajas de las mejoras de rendimiento de las instancias P5 equipadas con el H100 y, al mismo tiempoGPUs, acelerar el entrenamiento distribuido con FP8 un entrenamiento de precisión mixto.
Además, el tipo de FP8 datos se divide en los formatos E4M3 y E5M2. El E4M3 ofrece una mayor precisión, tiene un rango dinámico limitado y es ideal para avanzar en el entrenamiento con modelos. El E5M2 tiene un rango dinámico más amplio, pero una precisión reducida, y es más adecuado para el pase hacia atrás, donde la precisión es menos crítica y un rango dinámico más amplio resulta beneficioso. Por lo tanto, le recomendamos que utilice la receta de la FP8 estrategia híbrida
En el caso de los tipos de datos de precisión media (FP16yBF16), las técnicas de escalado de pérdidas globales, como el escalado de pérdidas estático o el escalado de pérdidas dinámico, solucionan los problemas de convergencia que surgen de la pérdida de información debido al redondeo de los gradientes con precisión media. Sin embargo, el rango dinámico de FP8 es aún más estrecho y las técnicas de escalado de pérdidas globales no son suficientes. En este punto, necesitamos una técnica de escalado por tensor más detallada. El escalado diferido es una estrategia que selecciona un factor de escalado en función de los valores absolutos máximos observados en varios tensores de iteraciones anteriores. Esta estrategia tiene su contrapartida: aprovecha todos los beneficios de rendimiento de la FP8 computación, pero requiere memoria para mantener el historial de valores máximos de los tensores. Para obtener más información sobre la estrategia de escalado diferido en general, consulte el paper FP8Formats for Deep Learning
En la práctica, su uso FP8 resulta útil en todos los escenarios de entrenamiento en instancias P5. Recomendamos encarecidamente activarlo FP8 siempre que sea posible para mejorar el rendimiento del entrenamiento.
SMPLa versión 2 es compatible con el Transformer Engine nada más sacarla de la caja. Por lo tanto, cuando ejecute un FP8 SMP entrenamiento con la versión 2 en instancias P5 de SageMaker (ml.p5.48xlarge
), lo único que debe hacer es importar torch.sagemaker
su script de entrenamiento y seguir usando el paquete Python nativo de Transformer Engine. Para obtener más información sobre el uso de Transformer Engine para el FP8 entrenamiento en general, consulta Uso 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()
Para encontrar un ejemplo práctico de FP8 formación con la SMP versión 2 en instancias P5, consulte el cuaderno de ejemplo de Llama-v2 (o GPT -NeoX) en instancias P5, en Accelerate SageMaker PyTorch FSDP Training
Entrenamiento de precisión mixto con tipos de datos de precisión media mediante PyTorch FSDP
SMPLa versión 2 admite trabajos PyTorch FSDPMixedPrecision
nota
Este entrenamiento de precisión combinado con la PyTorch FSDP función está disponible en la siguiente combinación de bibliotecas de SageMaker y la PyTorch biblioteca.
-
SMPv2.0.0 y versiones posteriores
-
SageMaker Python SDK v2.200.0 y versiones posteriores
-
PyTorch v2.0.1 y versiones posteriores
La forma estándar de configurar un modelo con una precisión mixta consiste en crear el modelo en él yfloat32
, a continuación, permitir FSDP la conversión de los parámetros a float16
o bfloat16
sobre la marcha mediante la aprobación de una MixedPrecision
política, como se muestra en el siguiente fragmento de código. Para obtener más información sobre las opciones dtype
para cambiar los parámetros, la reducción o los búferes para obtener una precisión mixta PyTorch, consulte PyTorch FSDPMixedPrecision
API
# 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 )
Ten en cuenta que algunos modelos (como el modelo Hugging Face Transformers Llama) esperan amortiguadores como. float32
Para usarlofloat32
, sustitúyalo por torch.bfloat16
torch.float32
en la línea que define el objeto. dtype