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á.
Práticas recomendadas de paralelismo de modelos distribuídos pelo SageMaker
Use as diretrizes a seguir ao executar uma tarefa de treinamento distribuída com a biblioteca em paralelo de modelos do SageMaker.
Configuração correta para um determinado modelo
Ao aumentar a escala verticalmente de um modelo, recomendamos que você consulte a lista a seguir em ordem. Cada item da lista debate a vantagem de usar as técnicas da biblioteca junto com as concessões que podem surgir.
dica
Se um modelo pode se encaixar bem usando um subconjunto dos atributos da biblioteca, adicionar mais atributos de paralelismo ao modelo ou de economia de memória geralmente não melhora o desempenho.
Usando tipos de instância grandes de GPU
-
No campo do paralelismo de modelos, é melhor usar instâncias avançadas com memórias da GPU grandes para lidar com a sobrecarga das operações de paralelismo de modelos, como modelos de particionamento em várias GPUs. Recomendamos usar as instâncias de
ml.p4douml.p3dnpara treinar modelos grandes de DL. Essas instâncias também são equipadas com o Elastic Fabric Adapter (EFA), que fornece maior largura de banda de rede e habilita treinamento em grande escala com paralelismo de modelos.
Estado do otimizador de fragmentação
-
O impacto do estado do otimizador de fragmentação depende do número de classificações em paralelo dos dados. Normalmente, um maior grau de paralelismo de dados (proporcional ao tamanho do nó de computação) pode melhorar a eficiência do uso de memória.
Quando você quiser reduzir o tamanho de um cluster, verifique a configuração de fragmentação de estado do otimizador. Por exemplo, um modelo de DL grande com fragmentação de estado do otimizador que cabe em um cluster de computação com 16 GPUs (por exemplo, duas instâncias P4d ou P4de) nem sempre cabe em um nó com 8 GPUs (por exemplo, uma única instância P4d ou P4de). Isso ocorre porque a memória combinada de 8 GPUs é menor que a memória combinada de 16 GPUs, e a memória necessária por GPU para fragmentar mais de 8 GPUs também é maior do que a memória por GPU para fragmentar no cenário de 16 GPUs. Como resultado, o aumento no requisito de memória pode não se ajustar no cluster menor.
Para ter mais informações, consulte Fragmentação de estado do otimizador.
Ponto de verificação de ativação
-
A eficiência da memória pode ser melhorada usando o ponto de verificação de ativação para um grupo de módulos. Quanto mais você agrupar os módulos, mais eficiente será o uso de memória. Ao realizar ponto de verificação de módulos sequenciais para camadas, o argumento
strategyda funçãosmp.set_activation_checkpointingagrupa as camadas para o ponto de verificação. Por exemplo, o agrupamento de duas ou mais camadas para pontos de verificação é mais eficiente em termos de memória do que o ponto de verificação de uma camada por vez, e isso troca o tempo de computação extra pela redução do uso de memória.Para ter mais informações, consulte Ponto de verificação de ativação.
Paralelismo de tensores
-
O grau de paralelismo de tensores deve ser uma potência de dois (2, 4, 8, ..., 2 n), onde o grau máximo deve ser igual ao número de GPUs por nó. Por exemplo, se você usa o nó com 8 GPUs, os números possíveis para o grau de paralelismo de tensores são 2, 4 e 8. Não recomendamos números arbitrários (como 3, 5, 6 e 7) para o grau de paralelismo de tensores. Quando você usa vários nós, a configuração incorreta do grau de paralelismo de tensores pode resultar na execução do paralelismo de tensores nos nós; isso adiciona uma sobrecarga significativa na comunicação das ativações entre os nós e pode se tornar computacionalmente caro.
Para ter mais informações, consulte Paralelismo de tensores.
Paralelismo de pipeline entre os nós
-
Você pode executar o paralelismo de pipeline em um nó único e em vários nós. Ao usar o paralelismo do pipeline em combinação com o paralelismo de tensores, recomendamos executar o paralelismo de pipeline em vários nós e manter o paralelismo de tensores em nós individuais.
-
O paralelismo de pipeline vem com os seguintes três botões:
microbatches,active_microbatcheseprescaled_batch.-
Quando você usa paralelismo de tensores com paralelismo de pipeline, recomendamos ativar o
prescaled_batchpara que o tamanho do lote por grupo em paralelo do modelo possa ser aumentado para um pipeline eficiente. Quandoprescaled_batché ativado, o tamanho do lote definido no script de treinamento se tornatp_sizevezes o tamanho do lote definido para cada classificação semprescaled_batch. -
Aumentar o número de
microbatchesajuda a obter um pipeline eficiente e uma melhor performance. Observe que o tamanho efetivo do microlote é o tamanho do lote dividido pelo número de microlotes. Se você aumentar o número de microlotes enquanto mantém o tamanho do lote constante, cada microlote processa um número menor de amostras. -
O número de
active_microbatchesé o número máximo de microlotes que estão sendo processados simultaneamente durante o pipeline. Para cada microlote ativo no processo, suas ativações e gradientes ocupam a memória da GPU. Portanto, aumentar oactive_microbatchesconsome mais memória da GPU.
-
-
Se a memória da GPU e da GPU estiverem subutilizadas, aumente o
active_microbatchespara um melhor paralelismo durante o pipeline. -
Para obter mais informações sobre como usar o paralelismo de tensores com o paralelismo de pipeline, consulte Paralelismo de tensores combinado com paralelismo de pipeline.
-
Para obter descrições dos parâmetros mencionados acima, consulte Parâmetros de
smdistributedna documentação do SageMaker Python SDK.
Descarregar ativações para a CPU
-
Certifique-se de que isso seja usado em combinação com o ponto de verificação de ativação e o paralelismo de pipeline. Para garantir que o descarregamento e o pré-carregamento ocorram no plano de fundo, especifique um valor maior que 1 para o parâmetro de microlotes.
-
Ao descarregar as ativações, talvez você consiga aumentar o
active_microbatchese, às vezes, igualar o número total de microlotes. Isso depende de quais módulos são determinados como pontos de verificação e como o modelo é particionado.Para ter mais informações, consulte Ativação e descarregamento.
Configurações de referência
A equipe de treinamento de paralelismo de modelos do SageMaker fornece os seguintes pontos de referência baseados em experimentos com o modelo GPT-2, o comprimento da sequência de 512 e o tamanho do vocabulário de 50:000:
| O número de parâmetros de modelo | Tipo de instância | Paralelismo de pipeline | Paralelismo de tensores | Fragmentação de estado do otimizador | Ponto de verificação de ativação | Lote pré-escalado | Tamanho do lote |
|---|---|---|---|---|---|---|---|
| 10 bilhões | 16 ml.p4d.24xlarge |
1 | 4 | Verdadeiro | Cada camada do transformador | Verdadeiro | batch_size=40 |
| 30 bilhões | 16 ml.p4d.24xlarge |
1 | 8 | Verdadeiro | Cada camada do transformador | Verdadeiro | batch_size=32 |
| 60 bilhões | 32 ml.p4d.24xlarge |
2 | 8 | Verdadeiro | Cada camada do transformador | Verdadeiro | batch_size=56, microbatches=4,
active_microbatches=2 |
Você pode extrapolar a partir das configurações anteriores para estimar o uso de memória da GPU para a configuração do modelo. Por exemplo, se você aumentar o comprimento da sequência de um modelo com parâmetro de 10 bilhões ou aumentar o tamanho do modelo para 20 bilhões, talvez você queira reduzir o tamanho do lote primeiro. Se o modelo ainda não couber, tente aumentar o grau de paralelismo de tensores.
Modificar o script de treinamento
-
Antes de usar os atributos da biblioteca em paralelo do modelo do SageMaker em seu script de treinamento, revise Dicas e armadilhas da configuração da biblioteca de paralelismo de modelos distribuídos do SageMaker.
-
Para executar uma tarefa de treinamento mais depressa, use o modo local do SageMaker AI
. Isso ajuda você a executar rapidamente uma tarefa de treinamento localmente em uma instância do caderno do SageMaker. Dependendo da escala da instância de ML na qual sua instância do caderno do SageMaker está sendo executada, talvez seja necessário ajustar o tamanho do seu modelo alterando as configurações do modelo, como a largura oculta, o número de camadas do transformador e os cabeçalhos de atenção. Valide se o modelo reduzido funciona bem na instância do caderno antes de usar um cluster grande para treinar o modelo completo.
Monitoramento e registro em log de uma tarefa de treinamento usando o console do SageMaker AI e o Amazon CloudWatch
Para monitorar métricas no nível de sistema, como utilização de memória da CPU, utilização de memória da GPU e utilização da GPU, use a visualização fornecida pelo console do SageMaker AI
-
No painel de navegação à esquerda, selecione Treinamento.
-
Escolha Trabalhos de treinamento.
-
No painel principal, escolha o nome da tarefa de treinamento do qual você deseja ver mais detalhes.
-
Procure no painel principal e encontre a seção Monitoramento para ver a visualização automatizada.
-
Para ver os logs de tarefa de treinamento, escolha Visualizar logs na seção Monitoramento. Você pode acessar os logs distribuídos de tarefa de treinamento no CloudWatch. Se você executou o treinamento distribuído de vários nós, você poderá ver vários fluxo de logs com tags no formato algo-n-1234567890. O fluxo de logs algo-1 rastreia os logs de treinamento do nó principal (0º).
Para ter mais informações, consulte Métricas do Amazon CloudWatch para monitorar e analisar trabalhos de treinamento.
Permissões
Para executar uma tarefa de treinamento do SageMaker com paralelismo de modelo ou os cadernos de exemplo de treinamento distribuídos no SageMaker
-
Para usar FSx for Lustre
, adicione AmazonFSxFullAccess. -
Para usar o Amazon S3 como um canal de dados, adicione
AmazonS3FullAccess. -
Para usar o Docker, crie seu próprio contêiner e envie-o para o Amazon ECR, adicione
AmazonEC2ContainerRegistryFullAccess. -
Para ter acesso total para usar todo o conjunto de recursos do SageMaker AI, adicione
AmazonSageMakerFullAccess.