Treinamento distribuído no Amazon SageMaker AI - SageMaker IA da Amazon

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á.

Treinamento distribuído no Amazon SageMaker AI

O SageMaker AI oferece bibliotecas de treinamento distribuído e várias opções de treinamento distribuído para tarefas de aprendizado profundo, como visão computacional (CV) e processamento de linguagem natural (PLN). Com as bibliotecas de treinamento distribuído do SageMaker AI, é possível executar tarefas de treinamento de aprendizado profundo altamente escaláveis e econômicas usando paralelismo personalizado de dados e de modelos. Você também pode utilizar outros frameworks e pacotes de treinamento distribuído, como o PyTorch DistributedDataParallel (DDP), torchrun, MPI (mpirun) e servidor de parâmetros. A seção a seguir fornece informações sobre conceitos fundamentais de treinamento distribuído. Ao longo da documentação, as instruções e os exemplos se concentram em como configurar as opções de treinamento distribuídas para tarefas de aprendizado profundo usando o SageMaker Python SDK.

dica

Para conhecer as melhores práticas para computação distribuída em treinamento e processamento de trabalhos de machine learning (ML) em geral, consulte Computação distribuída com as práticas recomendadas do SageMaker AI.

Conceitos de treinamento distribuído

As bibliotecas de treinamento distribuído do SageMaker AI usam os seguintes termos e atributos de treinamento distribuído:

Conjuntos de dados e lotes

  • Conjunto de dados de treinamento: todos os dados que você usa para treinar o modelo.

  • Tamanho global do lote: o número de registros selecionados do conjunto de dados de treinamento em cada iteração para enviar às GPUs no cluster. Esse é o número de registros sobre os quais o gradiente é calculado em cada iteração. Se o paralelismo de dados for utilizado, ele será igual ao número total de réplicas do modelo multiplicado pelo tamanho de lote por réplica: global batch size = (the number of model replicas) * (per-replica batch size). Um único lote de tamanho do lote global geralmente é chamado de minilote na literatura de machine learning.

  • Tamanho do lote por réplica: quando o paralelismo de dados é utilizado, isso representa o número de registros enviados para cada réplica do modelo. Cada réplica do modelo realiza uma passagem para frente e uma passagem para trás com este lote para calcular as atualizações de peso. As atualizações de peso resultantes são sincronizadas (calculadas em média) em todas as réplicas antes que o próximo conjunto de lotes por réplica seja processado.

  • Micro-lote: um subconjunto do minilote ou, se o modelo híbrido e o paralelismo de dados forem usados, é um subconjunto do lote com tamanho por réplica. Quando você utiliza a biblioteca de paralelismo de modelos distribuídos do SageMaker AI, cada microlote é inserido no pipeline de treinamento um por um e segue uma programação de execução definida pelo runtime da biblioteca.

Treinamento

  • Época: um ciclo de treinamento em todo o conjunto de dados. É comum ter várias iterações por época. O número de épocas que você usa no treinamento é exclusivo em seu modelo e caso de uso.

  • Iteração: uma única passagem para frente e para trás é realizada utilizando um lote de dados de treinamento com um tamanho de lote global (um minilote). O número de iterações realizadas durante o treinamento é determinado pelo tamanho global do lote e pelo número de épocas usadas para o treinamento. Por exemplo, se um conjunto de dados incluir 5.000 amostras e você usar um tamanho de lote global de 500, serão necessárias 10 iterações para concluir uma única época.

  • Taxa de aprendizado: uma variável que influencia a quantidade em que os pesos são alterados em resposta ao erro calculado do modelo. A taxa de aprendizado desempenha um papel importante na capacidade do modelo de convergir, bem como na velocidade e otimalidade dessa convergência.

Instâncias e GPUs

  • Instâncias: uma instância de computação de machine learning AWS. Eles também são chamados de nós.

  • Tamanho do cluster: ao utilizar a biblioteca de treinamento distribuído do SageMaker AI, o tamanho é o resultado da multiplicação do número de instâncias pelo número de GPUs em cada instância. Por exemplo, se você usar duas instâncias ml.p3.8xlarge em um trabalho de treinamento, com 4 GPUs cada, o tamanho do cluster será 8. Embora o aumento do tamanho do cluster possa resultar em tempos de treinamento mais rápidos, a comunicação entre as instâncias deve ser otimizada; caso contrário, a comunicação entre os nós pode adicionar sobrecarga e levar a tempos de treinamento mais lentos. A biblioteca de treinamento distribuído do SageMaker AI foi projetada para otimizar a comunicação entre as instâncias de computação de ML do Amazon EC2, o que possibilita maior utilização de dispositivos e tempos de treinamento mais rápidos.

Soluções de treinamento distribuído

  • Paralelismo de dados: uma estratégia no treinamento distribuído em que um conjunto de dados de treinamento é dividido entre várias GPUs em um cluster de computação, composto por várias instâncias Amazon EC2 ML. Cada GPU contém uma réplica do modelo, recebe lotes diferentes de dados de treinamento, realiza uma passagem para frente e para trás e compartilha as atualizações de peso com os outros nós para sincronização antes de passar para o próximo lote e, finalmente, outra época.

  • Paralelismo de dados: uma estratégia no treinamento distribuído em que o modelo é particionado entre várias GPUs em um cluster de computação, composto por várias instâncias Amazon EC2 ML. O modelo pode ser complexo e ter um grande número de camadas ocultas e pesos, tornando-o incapaz de caber na memória de uma única instância. Cada GPU carrega um subconjunto do modelo, através do qual os dados fluem e as transformações são compartilhadas e compiladas. A eficiência do paralelismo de modelos, em termos de utilização de GPU e tempo de treinamento, depende muito de como o modelo é particionado e do cronograma de execução utilizado para realizar passagens para frente e para trás.

  • Cronograma de execução do pipeline (Pipelining): o cronograma de execução em pipelining determina a ordem na qual os cálculos (micro-lotes) são realizados e os dados são processados entre dispositivos durante o treinamento de modelos. Pipelining é uma técnica para alcançar a verdadeira paralelização no paralelismo de modelos e superar a perda de desempenho devido à computação sequencial, permitindo que as GPUs calculem simultaneamente em diferentes amostras de dados. Para saber mais, consulte Cronograma de execução do pipeline.

Conceitos avançados

Os profissionais de Machine Learning (ML) geralmente enfrentam dois desafios de escalabilidade ao treinar modelos: escalabilidade do tamanho do modelo e escalabilidade de dados de treinamento. Embora o tamanho e a complexidade do modelo possam resultar em maior precisão, há um limite para o tamanho do modelo que você pode encaixar em uma única CPU ou GPU. Além disso, a escalabilidade do tamanho do modelo pode resultar em mais cálculos e períodos de treinamento mais longos.

Nem todos os modelos lidam igualmente bem com a escalabilidade dos dados de treinamento, pois precisam carregar todos os dados de treinamento na memória para o treinamento. Eles apenas escalonam verticalmente, ou seja, para instâncias maiores e maiores. Na maioria dos casos, a escalabilidade dos dados de treinamento resulta em períodos de treinamento mais longos.

O aprendizado profundo (Aprendizado Profundo, DL) é uma família específica de algoritmos de machine learning que consiste em várias camadas de redes neurais artificiais. O método de treinamento mais comum é com o Stochastic Gradient Descent (SGD) em minilote. No minilote SGD, o modelo é treinado conduzindo pequenas mudanças iterativas de seus coeficientes na direção que reduz seu erro. Essas iterações são conduzidas em subamostras de tamanhos iguais do conjunto de dados de treinamento, chamadas de minilotes. Para cada minilote, o modelo é executado em cada registro do minilote, seu erro medido e o gradiente do erro estimado. Em seguida, o gradiente médio é calculado para todas as amostras do minilote e fornece uma direção de atualização para cada coeficiente do modelo. Uma passagem completa pelo conjunto de dados de treinamento é chamada de época. Treinamentos de modelos geralmente consistem em dezenas a centenas de épocas. O SGD com minilotes tem várias vantagens: primeiro, seu design iterativo faz com que o tempo de treinamento seja teoricamente linear em relação ao tamanho do conjunto de dados. Segundo, em um determinado minilote, cada registro é processado individualmente pelo modelo sem a necessidade de comunicação entre registros, exceto pela média final do gradiente. Consequentemente, o processamento de um minilote é particularmente adequado para paralelização e distribuição. 

Paralelizar o treinamento SGD distribuindo os registros de um minilote em diferentes dispositivos de computação é chamado de treinamento distribuído de paralelismo de dados e é o paradigma de distribuição mais comumente usado em DL. O treinamento de paralelismo de dados é uma estratégia de distribuição relevante para dimensionar o tamanho do minilote e processar cada minilote mais rapidamente. No entanto, o treinamento de paralelismo de dados vem com a complexidade adicional de ter que calcular a média do gradiente do minilote com gradientes provenientes de todos os operadores e comunicá-la para todos os operadores, uma etapa chamada allreduce, que pode representar uma sobrecarga crescente à medida que o cluster de treinamento é escalado, e que também pode penalizar drasticamente o tempo de treinamento se implementado de forma inadequada ou em hardware inadequado. 

O SGD paralelismo de dados ainda exige que os desenvolvedores sejam capazes de ajustar pelo menos o modelo e um único registro em um dispositivo de computação, como uma única CPU ou GPU. Ao treinar modelos muito grandes, como grandes transformadores em Processamento de Linguagem Natural (PLN) ou modelos de segmentação em imagens de alta resolução, pode haver situações em que isso não é viável. Uma forma alternativa de dividir o workload é particionar o modelo em vários dispositivos de computação, uma abordagem chamada treinamento distribuído de paralelismo de modelos.