Ejecutar trabajos de entrenamiento de PyTorch con el compilador de entrenamiento de SageMaker - Amazon SageMaker AI

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.

Ejecutar trabajos de entrenamiento de PyTorch con el compilador de entrenamiento de SageMaker

Puede utilizar cualquiera de las interfaces de SageMaker AI para ejecutar un trabajo de entrenamiento con el Compilador de entrenamiento de SageMaker: Amazon SageMaker Studio Classic, instancias de cuadernos de Amazon SageMaker, AWS SDK para Python (Boto3) y AWS Command Line Interface.

Uso de SageMaker Python SDK

El Compilador de entrenamiento de SageMaker para PyTorch está disponible a través de las clases de estimador de marco PyTorch y HuggingFace de SageMaker AI. Para activar el Compilador de entrenamiento de SageMaker, añada el parámetro compiler_config a los estimadores de SageMaker AI. Importe la clase TrainingCompilerConfig y pase una instancia de ella al parámetro compiler_config. Los siguientes ejemplos de código muestran la estructura de las clases de estimador de SageMaker AI con el Compilador de entrenamiento de SageMaker activado.

sugerencia

Para empezar con los modelos prediseñados proporcionados por PyTorch o Transformers, pruebe a usar los tamaños de lote que se proporcionan en la tabla de referencia en Modelos probados.

nota

La compatibilidad nativa con PyTorch está disponible en el SDK Sagemaker Python v2.121.0 y versiones posteriores. Asegúrese de actualizar SageMaker Python SDK en consecuencia.

nota

A partir de PyTorch v1.12.0, están disponibles los contenedores del Compilador de entrenamiento de SageMaker para PyTorch. Tenga en cuenta que los contenedores del compilador de entrenamiento SageMaker para PyTorch no vienen preempaquetados con Hugging Face Transformers. Si necesita instalar la biblioteca en el contenedor, asegúrese de añadir el archivo requirements.txt en el directorio de origen cuando envíe un trabajo de entrenamiento.

Para PyTorch v1.11.0 y versiones anteriores, utilice las versiones anteriores de los contenedores del Compilador de entrenamiento de SageMaker para Hugging Face y PyTorch.

Para ver una lista completa de las versiones de marco y la información de contenedores correspondiente, consulte Marcos admitidos.

Para obtener información que se adapte a su caso de uso, consulte una de las siguientes opciones.

PyTorch v1.12.0 and later

Para compilar y entrenar un modelo de PyTorch, configure un estimador PyTorch de SageMaker AI con el Compilador de entrenamiento de SageMaker, tal y como se muestra en el siguiente ejemplo de código.

nota

La compatibilidad nativa con PyTorch está disponible en el SageMaker AI Python SDK v2.120.0 y versiones posteriores. Asegúrese de actualizar el SageMaker AI Python SDK.

from sagemaker.pytorch import PyTorch, TrainingCompilerConfig # the original max batch size that can fit into GPU memory without compiler batch_size_native=12 learning_rate_native=float('5e-5') # an updated max batch size that can fit into GPU memory with compiler batch_size=64 # update learning rate learning_rate=learning_rate_native/batch_size_native*batch_size hyperparameters={ "n_gpus": 1, "batch_size": batch_size, "learning_rate": learning_rate } pytorch_estimator=PyTorch( entry_point='train.py', source_dir='path-to-requirements-file', # Optional. Add this if need to install additional packages. instance_count=1, instance_type='ml.p3.2xlarge', framework_version='1.13.1', py_version='py3', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) pytorch_estimator.fit()
Hugging Face Transformers with PyTorch v1.11.0 and before

Para compilar y entrenar un modelo de transformador con PyTorch, configure un estimador Hugging Face de SageMaker AI con el Compilador de entrenamiento de SageMaker, como se muestra en el siguiente código de ejemplo.

from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig # the original max batch size that can fit into GPU memory without compiler batch_size_native=12 learning_rate_native=float('5e-5') # an updated max batch size that can fit into GPU memory with compiler batch_size=64 # update learning rate learning_rate=learning_rate_native/batch_size_native*batch_size hyperparameters={ "n_gpus": 1, "batch_size": batch_size, "learning_rate": learning_rate } pytorch_huggingface_estimator=HuggingFace( entry_point='train.py', instance_count=1, instance_type='ml.p3.2xlarge', transformers_version='4.21.1', pytorch_version='1.11.0', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) pytorch_huggingface_estimator.fit()

Para preparar su script de entrenamiento, consulte las siguientes páginas.

Para ver ejemplos integrales, consulte los siguientes cuadernos de notas:

PyTorch v1.12

Para PyTorch v1.12, puede ejecutar un entrenamiento distribuido con el Compilador de entrenamiento de SageMaker añadiendo la opción pytorch_xla especificada en el parámetro distribution de la clase de estimador PyTorch de SageMaker AI.

nota

La compatibilidad nativa con PyTorch está disponible en el SageMaker AI Python SDK v2.121.0 y versiones posteriores. Asegúrese de actualizar el SageMaker AI Python SDK.

from sagemaker.pytorch import PyTorch, TrainingCompilerConfig # choose an instance type, specify the number of instances you want to use, # and set the num_gpus variable the number of GPUs per instance. instance_count=1 instance_type='ml.p3.8xlarge' num_gpus=4 # the original max batch size that can fit to GPU memory without compiler batch_size_native=16 learning_rate_native=float('5e-5') # an updated max batch size that can fit to GPU memory with compiler batch_size=26 # update learning rate learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count hyperparameters={ "n_gpus": num_gpus, "batch_size": batch_size, "learning_rate": learning_rate } pytorch_estimator=PyTorch( entry_point='your_training_script.py', source_dir='path-to-requirements-file', # Optional. Add this if need to install additional packages. instance_count=instance_count, instance_type=instance_type, framework_version='1.13.1', py_version='py3', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), distribution ={'pytorchxla' : { 'enabled': True }}, disable_profiler=True, debugger_hook_config=False ) pytorch_estimator.fit()
sugerencia

Para preparar el script de entrenamiento, consulte PyTorch

Transformers v4.21 with PyTorch v1.11

Para PyTorch v1.11 y versiones posteriores, el Compilador de entrenamiento de SageMaker está disponible para el entrenamiento distribuido con la opción pytorch_xla especificada en el parámetro distribution.

from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig # choose an instance type, specify the number of instances you want to use, # and set the num_gpus variable the number of GPUs per instance. instance_count=1 instance_type='ml.p3.8xlarge' num_gpus=4 # the original max batch size that can fit to GPU memory without compiler batch_size_native=16 learning_rate_native=float('5e-5') # an updated max batch size that can fit to GPU memory with compiler batch_size=26 # update learning rate learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count hyperparameters={ "n_gpus": num_gpus, "batch_size": batch_size, "learning_rate": learning_rate } pytorch_huggingface_estimator=HuggingFace( entry_point='your_training_script.py', instance_count=instance_count, instance_type=instance_type, transformers_version='4.21.1', pytorch_version='1.11.0', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), distribution ={'pytorchxla' : { 'enabled': True }}, disable_profiler=True, debugger_hook_config=False ) pytorch_huggingface_estimator.fit()
sugerencia

Para preparar su script de entrenamiento, consulte las siguientes páginas.

Transformers v4.17 with PyTorch v1.10.2 and before

Para la versión compatible de PyTorch v1.10.2 y anteriores, el Compilador de entrenamiento de SageMaker requiere un mecanismo alternativo para lanzar un trabajo de entrenamiento distribuido. Para ejecutar entrenamiento distribuido, el Compilador de entrenamiento de SageMaker requiere que pase un script del lanzador de entrenamiento distribuido de SageMaker AI al argumento entry_point y que pase el script de entrenamiento al argumento hyperparameters. En el siguiente ejemplo de código, se muestra cómo configurar un estimador Hugging Face de SageMaker AI aplicando los cambios necesarios.

from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig # choose an instance type, specify the number of instances you want to use, # and set the num_gpus variable the number of GPUs per instance. instance_count=1 instance_type='ml.p3.8xlarge' num_gpus=4 # the original max batch size that can fit to GPU memory without compiler batch_size_native=16 learning_rate_native=float('5e-5') # an updated max batch size that can fit to GPU memory with compiler batch_size=26 # update learning rate learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count training_script="your_training_script.py" hyperparameters={ "n_gpus": num_gpus, "batch_size": batch_size, "learning_rate": learning_rate, "training_script": training_script # Specify the file name of your training script. } pytorch_huggingface_estimator=HuggingFace( entry_point='distributed_training_launcher.py', # Specify the distributed training launcher script. instance_count=instance_count, instance_type=instance_type, transformers_version='4.17.0', pytorch_version='1.10.2', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) pytorch_huggingface_estimator.fit()

El script del lanzador debe tener el aspecto siguiente: Encapsula el script de entrenamiento y configura el entorno de entrenamiento distribuido en función del tamaño de la instancia de entrenamiento que elija.

# distributed_training_launcher.py #!/bin/python import subprocess import sys if __name__ == "__main__": arguments_command = " ".join([arg for arg in sys.argv[1:]]) """ The following line takes care of setting up an inter-node communication as well as managing intra-node workers for each GPU. """ subprocess.check_call("python -m torch_xla.distributed.sm_dist " + arguments_command, shell=True)
sugerencia

Para preparar su script de entrenamiento, consulte las siguientes páginas.

La siguiente lista es el conjunto mínimo de parámetros necesarios para ejecutar un trabajo de entrenamiento de SageMaker con el compilador.

nota

Al utilizar el estimador Hugging Face de SageMaker AI, debe especificar los parámetros transformers_version, pytorch_version, hyperparameters y compiler_config para activar el Compilador de entrenamiento de SageMaker. No puede utilizar image_uri para especificar manualmente los contenedores de aprendizaje profundo integrados en el Compilador de entrenamiento que aparecen en Marcos admitidos.

  • entry_point (str): obligatorio. Especifique el nombre de archivo de su script de entrenamiento.

    nota

    Para ejecutar un entrenamiento distribuido con el Compilador de entrenamiento de SageMaker y PyTorch v1.10.2 y versiones anteriores, especifique el nombre de archivo de un script de inicio en este parámetro. El script de inicio debe estar preparado para encapsular el script de entrenamiento y configurar el entorno de entrenamiento distribuido. Para obtener más información, consulte los ejemplos de cuadernos siguientes:

  • source_dir(str): opcional. Añada esto si necesita instalar paquetes adicionales. Para instalar paquetes, debe preparar un archivo requirements.txt en este directorio.

  • instance_count (int): obligatorio. Especifique el número de instancias.

  • instance_type (str): obligatorio. Especifique el tipo de instancia.

  • transformers_version (str): necesario únicamente cuando se utiliza el estimador Hugging Face de SageMaker AI. Especifique la versión de la biblioteca Hugging Face Transformers compatible con el Compilador de entrenamiento de SageMaker. Para buscar las versiones disponibles, consulte Marcos admitidos.

  • framework_version or pytorch_version (str): obligatorio. Especifique la versión de PyTorch compatible con el Compilador de entrenamiento de SageMaker. Para buscar las versiones disponibles, consulte Marcos admitidos.

    nota

    Al utilizar el estimador Hugging Face de SageMaker AI, debe especificar tanto transformers_version como pytorch_version.

  • hyperparameters (dict): opcional. Especifique los hiperparámetros para el trabajo de entrenamiento, como n_gpus, batch_size y learning_rate. Al activar el Compilador de entrenamiento de SageMaker, pruebe con lotes más grandes y ajuste la velocidad de aprendizaje en consecuencia. Para encontrar casos prácticos sobre el uso del compilador y los tamaños de lote ajustados para mejorar la velocidad de entrenamiento, consulte Modelos probados y Ejemplos de cuadernos y blogs del compilador de entrenamiento SageMaker.

    nota

    Para ejecutar un entrenamiento distribuido con el Compilador de entrenamiento de SageMaker y PyTorch v1.10.2 y versiones anteriores, debe añadir un parámetro adicional para especificar el script de entrenamiento, "training_script", como se muestra en el ejemplo de código anterior.

  • compiler_config (objeto TrainingCompilerConfig): necesario para activar el Compilador de entrenamiento de SageMaker. Incluya este parámetro para activar el Compilador de entrenamiento de SageMaker. A continuación se incluyen los parámetros para la clase TrainingCompilerConfig.

    • enabled (bool): opcional. Especifique True o False para activar o desactivar el Compilador de entrenamiento de SageMaker. El valor predeterminado es True.

    • debug (bool): opcional. Para recibir registros de entrenamiento más detallados de sus trabajos de entrenamiento acelerados por el compilador, cámbielo a True. Sin embargo, el registro adicional podría añadir una sobrecarga y ralentizar el trabajo de entrenamiento compilado. El valor predeterminado es False.

  • distribution (dict): opcional. Para ejecutar un trabajo de entrenamiento distribuido con el Compilador de entrenamiento de SageMaker, añada distribution = { 'pytorchxla' : { 'enabled': True }}.

aviso

Si activa Depurador de SageMaker, podría afectar al rendimiento de Compilador de entrenamiento de SageMaker. Le recomendamos que desactive el Depurador cuando ejecute el Compilador de entrenamiento de SageMaker para asegurarse de que no se vea afectado el rendimiento. Para obtener más información, consulte Consideraciones. Para desactivar las funcionalidades del Depurador, añada los dos argumentos siguientes al estimador:

disable_profiler=True, debugger_hook_config=False

Si el trabajo de entrenamiento con el compilador se ha iniciado correctamente, recibirá los siguientes registros durante la fase de inicialización del trabajo:

  • Con TrainingCompilerConfig(debug=False)

    Found configuration for Training Compiler Configuring SM Training Compiler...
  • Con TrainingCompilerConfig(debug=True)

    Found configuration for Training Compiler Configuring SM Training Compiler... Training Compiler set to debug mode

Uso de la operación de la API CreateTrainingJob de SageMaker AI

Las opciones de configuración del Compilador de entrenamiento de SageMaker deben especificarse a través del campo AlgorithmSpecification y HyperParameters en la sintaxis de solicitud de la operación de API CreateTrainingJob.

"AlgorithmSpecification": { "TrainingImage": "<sagemaker-training-compiler-enabled-dlc-image>" }, "HyperParameters": { "sagemaker_training_compiler_enabled": "true", "sagemaker_training_compiler_debug_mode": "false", "sagemaker_pytorch_xla_multi_worker_enabled": "false" // set to "true" for distributed training }

Para encontrar una lista completa de los URI de imágenes de contenedores de aprendizaje profundo que tienen implementado el Compilador de entrenamiento de Sagemaker, consulte Marcos admitidos.