Treinamento distribuído na Amazon SageMaker - Amazon SageMaker

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 na Amazon SageMaker

SageMaker fornece bibliotecas de treinamento distribuídas e oferece suporte a várias opções de treinamento distribuído para tarefas de aprendizado profundo, como visão computacional (CV) e processamento de linguagem natural (NLP). Com as bibliotecas SageMaker de treinamento distribuídas, você pode executar paralelamente dados personalizados altamente escaláveis e econômicos e modelar trabalhos paralelos de treinamento de aprendizado profundo. Você também pode usar outras estruturas e pacotes de treinamento distribuídos, como 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. Em toda a documentação, as instruções e os exemplos se concentram em como configurar as opções de treinamento distribuído para tarefas de aprendizado profundo usando o SageMaker PythonSDK.

dica

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

Conceitos de treinamento distribuído

SageMakerAs bibliotecas de treinamento distribuído da usam os seguintes termos e recursos 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 ao GPUs 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ê usa a biblioteca SageMaker de paralelismo de modelos distribuídos da, cada microlote é inserido no pipeline de treinamento one-by-one e segue um cronograma de execução definido pelo tempo de execução 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 aprendizagem: 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 AWS de aprendizado de máquina. Eles também são chamados de nós.

  • Tamanho do cluster: ao usar SageMaker a biblioteca de treinamento distribuída, esse é o número de instâncias multiplicado 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, que têm 4 GPUs cada, o tamanho do cluster é 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 SageMaker distribuída foi projetada para otimizar a comunicação entre as instâncias computacionais do Amazon EC2 ML, levando a uma maior utilização do dispositivo e a tempos de treinamento mais rápidos.

Soluções de treinamento distribuído

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

  • Paralelismo de modelos: uma estratégia de treinamento distribuído em que o modelo é particionado em várias instâncias GPUs em um cluster de computação, que consiste em várias instâncias de ML da Amazon. EC2 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 um GPU carrega um subconjunto do modelo, por meio do qual os fluxos de dados e as transformações são compartilhados e compilados. A eficiência do paralelismo do modelo, em termos de GPU utilização e tempo de treinamento, depende muito de como o modelo é particionado e do cronograma de execução usado 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. O pipelining é uma técnica para alcançar a verdadeira paralelização no paralelismo do modelo e superar a perda de desempenho devido à computação sequencial, fazendo com que a computação seja computada simultaneamente em diferentes amostras de dados. GPUs 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: escalar o tamanho do modelo e escalar os dados de treinamento. Embora o tamanho e a complexidade do modelo possam resultar em melhor precisão, há um limite para o tamanho do modelo que você pode encaixar em um único CPU ouGPU. 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 (Deep Learning, 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 () em minilote. SGD No mini-loteSGD, 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 mini-lote SGD tem vários benefícios: primeiro, seu design iterativo torna o tempo de treinamento 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. 

A paralelização do SGD treinamento distribuindo os registros de um mini-lote em diferentes dispositivos de computação é chamada de treinamento distribuído paralelo de dados e é o paradigma de distribuição de DL mais comumente usado. 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 data parallel SGD ainda exige que os desenvolvedores sejam capazes de ajustar pelo menos o modelo e um único registro em um dispositivo de computação, como um único CPU ouGPU. Ao treinar modelos muito grandes, como grandes transformadores em Processamento de Linguagem Natural (NLP) ou modelos de segmentação em imagens de alta resolução, pode haver situações em que isso não seja 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.