Maximize o desempenho e reduza o custo de treinamento em deep learning com o AWS Trainium e o Amazon SageMaker

Maximize o desempenho e reduza o custo de treinamento em deep learning com o AWS Trainium e o Amazon SageMaker

Nó Fonte: 2010875

Hoje, dezenas de milhares de clientes estão criando, treinando e implantando modelos de aprendizado de máquina (ML) usando Amazon Sage Maker para capacitar aplicativos que têm o potencial de reinventar seus negócios e experiências do cliente. Esses modelos de ML têm aumentado em tamanho e complexidade nos últimos anos, o que levou a precisões de última geração em uma variedade de tarefas e também aumentou o tempo de treinamento de dias para semanas. Como resultado, os clientes devem dimensionar seus modelos de centenas a milhares de aceleradores, o que os torna mais caros para treinar.

O SageMaker é um serviço de ML totalmente gerenciado que ajuda desenvolvedores e cientistas de dados a criar, treinar e implantar modelos de ML com facilidade. O SageMaker já oferece a escolha mais ampla e profunda de ofertas de computação com aceleradores de hardware para treinamento de ML, incluindo G5 (Nvidia A10G) instâncias e P4d (Nvidia A100) instâncias.

Os crescentes requisitos de computação exigem poder de processamento mais rápido e econômico. Para reduzir ainda mais o tempo de treinamento do modelo e permitir que os profissionais de ML iterem mais rapidamente, a AWS inovou em chips, servidores e conectividade de data center. As novas instâncias Trn1 alimentadas por Treinamento AWS chips oferecem o melhor desempenho de preço e o treinamento de modelo de ML mais rápido na AWS, oferecendo até 50% menos custo para treinar modelos de aprendizado profundo em instâncias baseadas em GPU comparáveis ​​sem qualquer queda na precisão.

Nesta postagem, mostramos como você pode maximizar seu desempenho e reduzir custos usando instâncias Trn1 com SageMaker.

Visão geral da solução

Os trabalhos de treinamento do SageMaker oferecem suporte a instâncias ml.trn1, alimentadas por chips Trainium, criados especificamente para aplicativos de treinamento de ML de alto desempenho na nuvem. Você pode usar instâncias ml.trn1 no SageMaker para treinar processamento de linguagem natural (NLP), visão computacional e modelos de recomendação em uma amplo conjunto de aplicativos, como reconhecimento de fala, recomendação, detecção de fraude, classificação de imagem e vídeo e previsão. As instâncias ml.trn1 apresentam até 16 chips Trainium, que é um chip ML de segunda geração desenvolvido pela AWS após Inferência da AWS. instâncias ml.trn1 são as primeiras Amazon Elastic Compute Nuvem (Amazon EC2) com até 800 Gbps de largura de banda de rede Elastic Fabric Adapter (EFA). Para dados eficientes e paralelismo de modelo, cada instância ml.trn1.32xl tem 512 GB de memória de alta largura de banda, oferece até 3.4 petaflops de poder de computação FP16/BF16 e apresenta NeuronLink, uma interconexão sem bloqueio de alta largura de banda entre instâncias .

O Trainium está disponível em duas configurações e pode ser usado nas regiões Leste dos EUA (N. Virgínia) e Oeste dos EUA (Oregon).

A tabela a seguir resume os recursos das instâncias Trn1.

Tamanho da instância Treino
Aceleradores
Acelerador
Memória
(GB)
vCPUs Instância
Memória
(Gib)
Network
Largura de Banda
(Gbps)
EFA e
RDM
Suporte
trn1.2xgrande 1 32 8 32 Até 12.5 Não
trn1.32xgrande 16 512 128 512 800 Sim
trn1n.32xlarge (em breve) 16 512 128 512 1600 Sim

Vamos entender como usar o Trainium com o SageMaker com um exemplo simples. Treinaremos um modelo de classificação de texto com treinamento SageMaker e PyTorch usando a biblioteca Hugging Face Transformers.

Usamos o conjunto de dados Amazon Reviews, que consiste em avaliações de amazon.com. Os dados abrangem um período de 18 anos, abrangendo aproximadamente 35 milhões de análises até março de 2013. As análises incluem informações sobre produtos e usuários, classificações e uma análise em texto simples. O código a seguir é um exemplo do AmazonPolarity Conjunto de teste:

{
title':'Great CD', 'content':"My lovely Pat has one of the GREAT voices of her generation. I have listened to this CD for YEARS and I still LOVE IT. When I'm in a good mood it makes me feel better. A bad mood just evaporates like sugar in the rain. This CD just oozes LIFE. Vocals are jusat STUUNNING and lyrics just kill. One of life's hidden gems. This is a desert isle CD in my book. Why she never made it big is just beyond me. Everytime I play this, no matter black, white, young, old, male, female EVERYBODY says one thing ""Who was that singing ?""", 'label':1
}

Para esta postagem, usamos apenas os campos de conteúdo e rótulo. O campo de conteúdo é uma resenha de texto livre e o campo de rótulo é um valor binário contendo 1 ou 0 para resenhas positivas ou negativas, respectivamente.

Para nosso algoritmo, usamos o BERT, um modelo de transformador pré-treinado em um grande corpus de dados em inglês de maneira autossupervisionada. Esse modelo visa principalmente ser ajustado em tarefas que usam a frase inteira (potencialmente mascarada) para tomar decisões, como classificação de sequência, classificação de token ou resposta a perguntas.

Detalhes de implementação

Vamos começar examinando mais de perto os diferentes componentes envolvidos no treinamento do modelo:

  • Treinamento AWS – Em sua essência, cada Instância do Trainium tem dispositivos Trainium integrados. Trn1.2xlarge tem 1 dispositivo Trainium e Trn1.32xlarge tem 16 dispositivos Trainium. Cada dispositivo Trainium consiste em computação (2 NeuronCore-v2), 32 GB de memória de dispositivo HBM e NeuronLink para comunicação rápida entre dispositivos. Cada NeuronCore-v2 consiste em uma unidade de computação heterogênea totalmente independente com mecanismos separados (Tensor/Vetor/Escala/GPSIMD). GPSIMD são processadores de uso geral totalmente programáveis ​​que você pode usar para implementar operadores personalizados e executá-los diretamente nos mecanismos NeuronCore.
  • Treinamento Amazon SageMaker – O SageMaker fornece uma experiência de treinamento totalmente gerenciada para treinar facilmente os modelos sem a necessidade de se preocupar com a infraestrutura. Quando você usa o SageMaker Training, ele executa tudo o que é necessário para um trabalho de treinamento, como código, contêiner e dados, em uma infraestrutura de computação separada do ambiente de chamada. Isso nos permite executar experimentos em paralelo e iterar rapidamente. SageMaker fornece um SDK do Python lançar trabalhos de formação. O exemplo nesta postagem usa o SageMaker Python SDK para acionar o trabalho de treinamento usando o Trainium.
  • Neurônio AWS – Como o Trainium NeuronCore tem seu próprio mecanismo de computação, precisamos de um mecanismo para compilar nosso código de treinamento. O Neurônio AWS O compilador pega o código escrito em Pytorch/XLA e o otimiza para rodar em dispositivos Neuron. O compilador Neuron está integrado como parte do Deep Learning Container que usaremos para treinar nosso modelo.
  • PyTorch/XLA - Este Pacote Python usa o compilador de aprendizagem profunda XLA para conectar a estrutura de aprendizagem profunda PyTorch e aceleradores de nuvem como o Trainium. Construir uma nova rede PyTorch ou converter uma rede existente para execução em dispositivos XLA requer apenas algumas linhas de código específico do XLA. Veremos para o nosso caso de uso quais alterações precisamos fazer.
  • Treinamento distribuído – Para executar o treinamento de forma eficiente em vários NeuronCores, precisamos de um mecanismo para distribuir o treinamento em NeuronCores disponíveis. O SageMaker oferece suporte ao archrun com instâncias do Trainium, que podem ser usadas para executar vários processos equivalentes ao número de NeuronCores no cluster. Isso é feito passando o parâmetro de distribuição para o estimador SageMaker da seguinte maneira, que inicia um treinamento distribuído paralelo de dados em que o mesmo modelo é carregado em diferentes NeuronCores que processam lotes de dados separados:
distribution={"torch_distributed": {"enabled": True}}

Mudanças de script necessárias para rodar no Trainium

Vejamos as alterações de código necessárias para adotar um script PyTorch baseado em GPU regular para execução no Trainium. Em um nível alto, precisamos fazer as seguintes alterações:

  1. Substitua dispositivos GPU por dispositivos Pytorch/XLA. Como usamos a distribuição da tocha, precisamos inicializar o treinamento com o XLA como o dispositivo da seguinte forma:
    device = "xla"
    torch.distributed.init_process_group(device)

  2. Usamos o back-end distribuído PyTorch/XLA para conectar as APIs distribuídas PyTorch à semântica de comunicação XLA.
  3. Usamos PyTorch/XLA MpDeviceLoader para os pipelines de ingestão de dados. O MpDeviceLoader ajuda a melhorar o desempenho sobrepondo três etapas: rastreamento, compilação e carregamento de lote de dados no dispositivo. Precisamos agrupar o carregador de dados PyTorch com o MpDeviceDataLoader da seguinte maneira:
    train_device_loader = pl.MpDeviceLoader(train_loader, "xla")

  4. Execute a etapa de otimização usando a API fornecida pelo XLA, conforme mostrado no código a seguir. Isso consolida os gradientes entre os núcleos e emite a computação da etapa do dispositivo XLA.
    torch_xla.core.xla_model.optimizer_step(optimizer)

  5. Mapeie APIs CUDA (se houver) para APIs PyTorch genéricas.
  6. Substitua os otimizadores fundidos CUDA (se houver) por alternativas genéricas do PyTorch.

O exemplo completo, que treina um modelo de classificação de texto usando SageMaker e Trainium, está disponível no seguinte GitHub repo. O arquivo do caderno Transformers de ajuste fino para a construção de modelos de classificação usando SageMaker e Trainium.ipynb é o ponto de entrada e contém instruções passo a passo para executar o treinamento.

Testes de referência

No teste, executamos dois trabalhos de treinamento: um em ml.trn1.32xlarge e outro em ml.p4d.24xlarge com o mesmo tamanho de lote, dados de treinamento e outros hiperparâmetros. Durante os trabalhos de treinamento, medimos o tempo faturável dos trabalhos de treinamento do SageMaker e calculamos o preço-desempenho multiplicando o tempo necessário para executar trabalhos de treinamento em horas pelo preço por hora do tipo de instância. Selecionamos o melhor resultado para cada tipo de instância entre várias execuções de trabalhos.

A tabela a seguir resume nossas descobertas de benchmark.

Modelo Tipo de Instância Preço (por nó * hora) Rendimento (iterações/seg) ValidaçãoPrecisão Tempo faturável (seg) Custo de treinamento em $
Classificação de base BERT ml.trn1.32xgrande 24.725 6.64 0.984 6033 41.47
Classificação de base BERT ml.p4d.24xgrande 37.69 5.44 0.984 6553 68.6

Os resultados mostraram que a instância Trainium custa menos que a instância P4d, proporcionando throughput e precisão semelhantes ao treinar o mesmo modelo com os mesmos dados de entrada e parâmetros de treinamento. Isso significa que a instância Trainium oferece melhor desempenho de preço do que as instâncias P4D baseadas em GPU. Com um exemplo simples como este, podemos ver que o Trainium oferece um tempo de treinamento cerca de 22% mais rápido e um custo até 50% menor em relação às instâncias P4d.

Implantar o modelo treinado

Depois de treinar o modelo, podemos implantá-lo em vários tipos de instância, como CPU, GPU ou AWS Inferentia. O ponto principal a ser observado é que o modelo treinado não depende de hardware especializado para implantar e fazer inferência. O SageMaker fornece mecanismos para implantar um modelo treinado usando mecanismos em tempo real ou em lote. O exemplo de notebook no repositório GitHub contém código para implantar o modelo treinado como um endpoint em tempo real usando uma instância ml.c5.xlarge (baseada em CPU).

Conclusão

Nesta postagem, vimos como usar o Trainium e o SageMaker para configurar e treinar rapidamente um modelo de classificação que oferece até 50% de economia de custos sem comprometer a precisão. Você pode usar o Trainium para uma ampla variedade de casos de uso que envolvem pré-treinamento ou ajuste fino de modelos baseados no Transformer. Para obter mais informações sobre o suporte de várias arquiteturas de modelo, consulte Diretrizes de adequação da arquitetura do modelo.


Sobre os autores

Arun Kumar Lokanatha é arquiteto sênior de soluções de ML da equipe do Amazon SageMaker Service. Ele se concentra em ajudar os clientes a criar, treinar e migrar cargas de trabalho de produção de ML para o SageMaker em escala. Ele é especialista em Deep Learning, especialmente na área de PNL e CV. Fora do trabalho, ele gosta de correr e fazer caminhadas.

Mark Yu é um engenheiro de software no AWS SageMaker. Ele se concentra na criação de sistemas de treinamento distribuídos em larga escala, otimizando o desempenho do treinamento e desenvolvendo hardwares de treinamento de ml de alto desempenho, incluindo o SageMaker trainium. Mark também tem conhecimento profundo sobre otimização de infraestrutura de aprendizado de máquina. Em seu tempo livre, ele gosta de caminhar e correr.

Omri Fuchs é gerente de desenvolvimento de software na AWS SageMaker. Ele é o líder técnico responsável pela plataforma de trabalho de treinamento SageMaker, com foco na otimização do desempenho do treinamento SageMaker e na melhoria da experiência de treinamento. Ele é apaixonado por tecnologia de ponta de ML e IA. Nas horas vagas, gosta de andar de bicicleta e fazer caminhadas.

Gal Oshri é gerente de produto sênior da equipe do Amazon SageMaker. Ele tem 7 anos de experiência trabalhando em ferramentas, frameworks e serviços de Machine Learning.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS