Execute trabalhos de treinamento do PyTorch com o SageMaker Training Compiler - Amazon SageMaker

Execute trabalhos de treinamento do PyTorch com o SageMaker Training Compiler

Você pode usar qualquer uma das interfaces do SageMaker para executar um trabalho de treinamento com o SageMaker Training Compiler: Amazon SageMaker Studio Classic, instâncias de caderno do Amazon SageMaker, AWS SDK for Python (Boto3) e AWS Command Line Interface.

Usando o SageMaker Python SDK

O SageMaker Training Compiler para PyTorch está disponível nas classes SageMaker PyTorch e estimador de framework HuggingFace. Para ativar o SageMaker Training Compiler, adicione o parâmetro compiler_config aos estimadores do SageMaker. Importe a classe TrainingCompilerConfig e passe uma instância dela para o parâmetro compiler_config. Os exemplos de código a seguir mostram a estrutura das classes de estimadores do SageMaker com o SageMaker Training Compiler ativado.

dica

Para começar com modelos pré-construídos fornecidos pelo PyTorch ou Transformers, tente usar os tamanhos de lote fornecidos na tabela de referência em Modelos testados.

nota

A compatibilidade nativa ao PyTorch está disponível no SageMaker Python SDK v2.121.0 e versões posteriores. Certifique-se de atualizar o SageMaker Python SDK adequadamente.

nota

A partir do PyTorch v1.12.0, os contêineres do SageMaker Training Compiler para PyTorch estão disponíveis. Observe que os contêineres do SageMaker Training Compiler para PyTorch não vêm pré-embalados com Hugging Face Transformers. Se precisar instalar a biblioteca no contêiner, certifique-se de adicionar o arquivo requirements.txt no diretório de origem ao enviar um trabalho de treinamento.

Para o PyTorch v1.11.0 e anteriores, use as versões anteriores dos contêineres do SageMaker Training Compiler para Hugging Face e PyTorch.

Para obter uma lista completa de versões de framework e informações de contêiner correspondentes, consulte Estruturas compatíveis.

Para obter informações adequadas ao seu caso de uso, consulte uma das opções a seguir.

PyTorch v1.12.0 and later

Para compilar e treinar um modelo do PyTorch, configure um estimador do SageMaker PyTorch com o SageMaker Training Compiler, conforme mostrado no exemplo de código a seguir.

nota

Esta compatibilidade nativa ao PyTorch está disponível no SageMaker Python SDK v2.120.0 e versões posteriores. Certifique-se de atualizar o SageMaker 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 e treinar um modelo transformer com PyTorch, configure um estimador do SageMaker Hugging Face com o SageMaker Training Compiler, conforme mostrado no exemplo de código a seguir.

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 seu script de treinamento, consulte as páginas a seguir.

Para encontrar exemplos completos, consulte os seguintes cadernos:

PyTorch v1.12

Para o PyTorch v1.12, você pode executar um treinamento distribuído com o SageMaker Training Compiler adicionando a opção pytorch_xla especificada ao parâmetro distribution da classe estimadora do PyTorch do SageMaker.

nota

Esta compatibilidade nativa ao PyTorch está disponível no SageMaker Python SDK v2.121.0 e versões posteriores. Certifique-se de atualizar o SageMaker 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()
dica

Para preparar seu roteiro de treinamento, consulte PyTorch

Transformers v4.21 with PyTorch v1.11

Para o PyTorch v1.11 e versões posteriores, o SageMaker Training Compiler está disponível para treinamento distribuído com a opção especificada pytorch_xla no 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()
dica

Para preparar seu script de treinamento, consulte as páginas a seguir.

Transformers v4.17 with PyTorch v1.10.2 and before

Para a versão compatível do PyTorch v1.10.2 e anteriores, o SageMaker Training Compiler requer um mecanismo alternativo para iniciar um trabalho de treinamento distribuído. Para executar treinamento distribuído, o SageMaker Training Compiler exige que você passe um script de inicialização de treinamento distribuído do SageMaker para o argumento entry_point e passe seu script de treinamento para o argumento hyperparameters. O exemplo de código a seguir mostra como configurar um estimador do SageMaker Hugging Face aplicando as alterações necessárias.

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

O script Inicializador deve ser semelhante ao seguinte: Ele empacota seu script de treinamento e configura o ambiente de treinamento distribuído, dependendo do tamanho da instância de treinamento de sua escolha.

# 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)
dica

Para preparar seu script de treinamento, consulte as páginas a seguir.

A lista a seguir é o conjunto mínimo de parâmetros necessários para executar um trabalho de treinamento do SageMaker com o compilador.

nota

Ao usar o estimador do SageMaker Hugging Face, você deve especificar os parâmetros transformers_version, pytorch_version, hyperparameters e compiler_config para ativar o SageMaker Training Compiler. Você não pode usar image_uri para especificar manualmente os contêineres de aprendizado profundo integrados ao Training Compiler que estão listados em Estruturas compatíveis.

  • entry_point (str): Obrigatório. Especifique o nome do arquivo do seu script de treinamento.

    nota

    Para executar um treinamento distribuído com o SageMaker Training Compiler e o PyTorch v1.10.2 e anteriores, especifique o nome do arquivo de um script de inicialização para esse parâmetro. O script do lançador deve estar preparado para empacotar seu script de treinamento e configurar o ambiente de treinamento distribuído. Para obter mais informações, veja os cadernos de seguintes exemplos:

  • source_dir (str): Opcional. Adicione isso se precisar instalar pacotes adicionais. Para instalar pacotes, você precisa preparar um arquivo requirements.txt nesse diretório.

  • instance_count (int): Obrigatório. Especifique o número de instâncias.

  • instance_type (str): Obrigatório. Especifique o tipo de instância.

  • transformers_version (str): Obrigatório somente quando usar o estimador SageMaker Hugging Face. Especifique a versão da biblioteca Hugging Face Transformers compatível com o SageMaker Training Compiler. Para encontrar as versões disponíveis, consulte Estruturas compatíveis.

  • framework_version ou pytorch_version (str): Obrigatório. Especifique a versão do PyTorch compatível com o SageMaker Training Compiler. Para encontrar as versões disponíveis, consulte Estruturas compatíveis.

    nota

    Ao usar o estimador SageMaker Hugging Face, você deve especificar transformers_version e pytorch_version.

  • hyperparameters (dict): Opcional. Especifique hiperparâmetros para o trabalho de treinamento n_gpus, batch_size e. learning_rate Ao ativar o SageMaker Training Compiler, experimente lotes maiores e ajuste a taxa de aprendizado adequadamente. Para encontrar estudos de caso sobre o uso do compilador e tamanhos de lote ajustados para melhorar a velocidade de treinamento, consulte Modelos testados e Exemplos de cadernos e blogs do training compiler do SageMaker.

    nota

    Para executar um treinamento distribuído com o SageMaker Training Compiler e o PyTorch v1.10.2 e anteriores, é preciso adicionar um parâmetro adicional, "training_script", para especificar seu script de treinamento, conforme mostrado no exemplo de código anterior.

  • compiler_config (objeto TrainingCompilerConfig): Obrigatório para ativar o SageMaker Training Compiler. Inclua esse parâmetro para ativar o SageMaker Training Compiler. Veja a seguir os parâmetros para a classe TrainingCompilerConfig.

    • enabled (bool): Opcional. Especifique True ou False para ativar ou desativar o SageMaker Training Compiler. O valor padrão é True.

    • debug (bool): Opcional. Para receber logs de treinamento mais detalhados de seus trabalhos de treinamento acelerados por compilador, altere-os para True. No entanto, o registro adicional pode aumentar a sobrecarga e retardar o trabalho de treinamento compilado. O valor padrão é False.

  • distribution (dict): Opcional. Para executar um trabalho de treinamento distribuído com o SageMaker Training Compiler, adicione distribution = { 'pytorchxla' : { 'enabled': True }}.

Atenção

Se você ativar o SageMaker Debugger, ele poderá afetar o desempenho do SageMaker Training Compiler. Recomendamos que desative o Depurador ao executar o SageMaker Training Compiler para garantir que não haja impacto no desempenho. Para obter mais informações, consulte Considerações. Para desativar as funcionalidades do Depurador, adicione os dois argumentos a seguir ao estimador.

disable_profiler=True, debugger_hook_config=False

Se o trabalho de treinamento com o compilador for iniciado com êxito, você receberá os seguintes logs durante a fase de inicialização do trabalho:

  • Com TrainingCompilerConfig(debug=False)

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

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

Usando a operação CreateTrainingJob da API SageMaker

As opções de configuração do SageMaker Training Compiler devem ser especificadas por meio dos campos AlgorithmSpecification e HyperParameters na sintaxe da solicitação para a operação CreateTrainingJob da API.

"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 uma lista completa de URIs de imagens de contêiner de aprendizado profundo que têm o SageMaker Training Compiler implementado, consulte Estruturas compatíveis.