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á.
SageMaker Práticas recomendadas e considerações sobre o Training Compiler
Importante
A Amazon Web Services (AWS) anuncia que não haverá novos lançamentos ou versões do SageMaker Training Compiler. Você pode continuar a utilizar o SageMaker Training Compiler por meio dos AWS Deep Learning Containers (DLCs) existentes para SageMaker treinamento. É importante observar que, embora os existentes DLCs permaneçam acessíveis, eles não receberão mais patches ou atualizações de AWS, de acordo com a Política de Suporte do AWS Deep Learning Containers Framework.
Analise as seguintes práticas e considerações recomendadas ao usar o SageMaker Training Compiler.
Práticas recomendadas
Use as diretrizes a seguir para obter os melhores resultados ao executar trabalhos de treinamento com o SageMaker Training Compiler.
Melhores práticas gerais
-
Certifique-se de usar um dos Tipos de instâncias compatíveis e Modelos testados.
-
Ao criar um tokenizador para um NLP modelo usando a biblioteca Hugging Face Transformers em seu script de treinamento, certifique-se de usar uma forma de tensor de entrada estática especificando.
padding='max_length'
Não usepadding='longest'
porque o preenchimento da sequência mais longa do lote pode alterar a forma do tensor de cada lote de treinamento. A forma dinâmica de entrada pode iniciar a recompilação do modelo e pode aumentar o tempo total de treinamento. Para obter mais informações sobre as opções de preenchimento dos tokenizadores Transformadores, consulte Preenchimento e truncamentona documentação de Hugging Face Transformers. -
Meça a utilização da GPU memória para garantir que você use o tamanho máximo do lote que cabe na GPU memória. O Amazon SageMaker Training Compiler reduz o espaço de memória do seu modelo durante o treinamento, o que normalmente permite que você coloque um tamanho maior
batch_size
na GPU memória. Usar um maiorbatch_size
resulta em uma melhor GPU utilização e reduz o tempo total de treinamento.Ao ajustar o tamanho do lote, você também precisa ajustá-lo
learning_rate
adequadamente. Por exemplo, se você aumentou o tamanho do lote em um fator dek
, precisará ajustarlearning_rate
linearmente (multiplicação simples pork
) ou multiplicar pela raiz quadrada dek
. Isso é para alcançar o mesmo comportamento de convergência ou similar no tempo de treinamento reduzido. Para referência debatch_size
testado em modelos populares, consulte Modelos testados. -
Para depurar o trabalho de treinamento acelerado pelo compilador, ative o
debug
sinalizador no parâmetro.compiler_config
Isso permite SageMaker colocar os registros de depuração em registros de tarefas de SageMaker treinamento.huggingface_estimator=HuggingFace( ... compiler_config=TrainingCompilerConfig(debug=True) )
Observe que, se você habilitar a depuração completa do trabalho de treinamento com o compilador, isso poderá adicionar alguma sobrecarga.
Melhores práticas para PyTorch
-
Se você trouxer um PyTorch modelo e quiser verificá-lo, certifique-se de usar a função de salvamento XLA de modelo PyTorch/para verificar seu modelo adequadamente. Para obter mais informações sobre a função, consulte
torch_xla.core.xla_model.save
a documentação PyTorch on XLA Devices. Para saber como adicionar as modificações ao seu PyTorch script, consulteModelos de linguagem grandes usando PyTorch diretamente (sem a API Hugging Face Transformers Trainer).
Para obter mais informações sobre a aplicação real do uso da função de salvamento de modelo, consulte Checkpoint Writing and Loading
in the Hugging Face PyTorch on XLATPUs/: Blog de treinamento mais rápido e barato. -
Para obter o melhor tempo de treinamento para treinamento distribuído, considere o seguinte.
-
Use instâncias com várias GPUs em vez de usar instâncias de gpu única. Por exemplo, uma única instância
ml.p3dn.24xlarge
tem um tempo de treinamento mais rápido em comparação com 8 instânciasml.p3.2xlarge
. -
Use instâncias com EFA suporte, como
ml.p3dn.24xlarge
ml.p4d.24xlarge
e. Esses tipos de instância aceleraram a velocidade da rede e reduziram o tempo de treinamento. -
Ajuste o parâmetro
preprocessing_num_workers
para conjuntos de dados, para que o treinamento do modelo não seja atrasado pelo lento pré-processamento.
-
Considerações
Considere o seguinte ao usar o SageMaker Training Compiler.
Degradação do desempenho devido ao registro, pontos de verificação e criação de perfil
-
Evite registrar, apontar e criar perfis de tensores de modelo que levem a avaliações explícitas. Para entender o que é uma avaliação explícita, considere o seguinte exemplo de compilação de código.
a = b+c e = a+d
Um compilador interpreta o código da seguinte forma e reduz o espaço de memória da variável
a
.e = b+c+d
Agora, considere o seguinte caso em que o código é alterado para adicionar uma função de impressão para a variável
a
.a = b+c e = a+d print(a)
O compilador faz uma avaliação explícita da variável
a
da seguinte forma.e = b+c+d a = b+c # Explicit evaluation print(a)
Em PyTorch, por exemplo, evite usar torch.tensor.items ()
, que pode introduzir avaliações explícitas. No aprendizado profundo, essas avaliações explícitas podem causar sobrecarga porque interrompem as operações fundidas em um gráfico de compilação de um modelo e levam à recalculação dos tensores. Se você ainda quiser avaliar periodicamente o modelo durante o treinamento usando o SageMaker Training Compiler, recomendamos registrar e fazer checkpoints com uma frequência menor para reduzir a sobrecarga devido a avaliações explícitas. Por exemplo, registre a cada 10 épocas em vez de cada época.
-
A compilação de gráficos é executada durante as primeiras etapas do treinamento. Como resultado, espera-se que as primeiras etapas sejam excepcionalmente lentas. No entanto, esse é um custo de compilação único e pode ser amortizado por treinamento por um período mais longo, pois a compilação torna as etapas futuras muito mais rápidas. A sobrecarga inicial de compilação depende do tamanho do modelo, do tamanho dos tensores de entrada e da distribuição das formas dos tensores de entrada.
Uso incorreto do PyTorch/XLAAPIsao usar PyTorch diretamente
PyTorch/XLAdefine um conjunto de APIs para substituir alguns dos PyTorch treinamentos existentesAPIs. Deixar de usá-los adequadamente leva ao fracasso do PyTorch treinamento.
-
Um dos erros mais comuns ao compilar um PyTorch modelo é devido a um tipo de dispositivo incorreto para operadores e tensores. Para compilar adequadamente um PyTorch modelo, certifique-se de usar XLA devices (
xm.xla_device()
) em vez de usar CUDA ou misturar CUDA dispositivos e XLA dispositivos. -
mark_step()
é uma barreira só paraXLA. Não configurá-lo corretamente faz com que um trabalho de treinamento pare. -
PyTorch/XLAfornece treinamento distribuído adicionalAPIs. Deixar de programar APIs corretamente faz com que os gradientes sejam coletados incorretamente, o que causa uma falha na convergência do treinamento.
Para configurar adequadamente seu PyTorch script e evitar os API usos incorretos mencionados acima, consulte. Modelos de linguagem grandes usando PyTorch diretamente (sem a API Hugging Face Transformers Trainer)