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.
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.
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.
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.
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.
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()
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()
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)
Para preparar seu script de treinamento, consulte as páginas a seguir.
Para encontrar exemplos completos, consulte os seguintes cadernos:
A lista a seguir é o conjunto mínimo de parâmetros necessários para executar um trabalho de treinamento do SageMaker com o compilador.
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.
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.
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.
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 }}
.
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.