Os últimos anos têm visto um rápido desenvolvimento no campo do processamento de linguagem natural (PLN). Embora o hardware tenha melhorado, como com a última geração de aceleradores da NVIDIA e da Amazon, os praticantes de machine learning (ML) avançado ainda enfrentam problemas para dimensionar seus grandes modelos de linguagem em várias GPUs.
Nesta postagem do blog, resumimos brevemente a ascensão dos modelos de PNL de grande e pequena escala, principalmente por meio da abstração fornecida pelo Hugging Face e com o back-end modular do Amazon SageMaker. Em particular, destacamos o lançamento de quatro recursos adicionais na biblioteca paralela do modelo SageMaker que desbloqueiam 175 bilhões de parâmetros de pré-treinamento e ajuste fino do modelo NLP para os clientes.
Usamos essa biblioteca na plataforma de treinamento SageMaker e alcançamos uma taxa de transferência de 32 amostras por segundo em instâncias de 120 ml.p4d.24xlarge e 175 bilhões de parâmetros. Prevemos que, se aumentarmos para 240 instâncias, o modelo completo levaria 25 dias para ser treinado.
Para obter mais informações sobre paralelismo de modelo, consulte o artigo Paralelismo de modelo do Amazon SageMaker: uma estrutura geral e flexível para treinamento de modelos grandes.
Você também pode ver o notebook GPT2 que usamos para gerar esses números de desempenho em nosso Repositório GitHub.
Para saber mais sobre como usar os novos recursos no modelo paralelo do SageMaker, consulte Recursos estendidos da biblioteca paralela de modelos do SageMaker para PyTorch e Use com o SDK do Python do SageMaker.
PNL no Amazon SageMaker – Abraçando o rosto e o paralelismo de modelos
Se você é novo no Hugging Face e NLP, o maior destaque que você precisa saber é que os aplicativos que usam processamento de linguagem natural (NLP) estão começando a alcançar desempenho de nível humano. Isso é em grande parte impulsionado por um mecanismo de aprendizado, chamado por WhatsApp., que deu origem a um modelo de aprendizado profundo, chamado de transformador, que é muito mais escalável do que os métodos sequenciais de aprendizado profundo anteriores. O agora famoso Modelo BERT foi desenvolvido para capitalizar o transformador e desenvolveu várias táticas úteis de PNL ao longo do caminho. Transformers e o conjunto de modelos, dentro e fora da PNL, todos inspirados no BERT, são o principal mecanismo por trás dos resultados de pesquisa do Google, na tua Resultados do Google Tradutor e uma série de novas startups.
SageMaker e Hugging Face fizeram uma parceria para tornar isso mais fácil para os clientes do que nunca. Lançamos os contêineres de aprendizado profundo (DLC's) do Hugging Face para você treinar e hospedar modelos pré-treinados diretamente do Hugging Face's repositório de mais de 26,000 modelos. Nós lançamos o compilador de treinamento SageMaker para você acelerar o tempo de execução de seus loops de treinamento Hugging Face em até 50%. Também integramos o SDK Transformers carro-chefe do Hugging Face de nossas bibliotecas de treinamento distribuídas para tornar o dimensionamento de seus modelos de PNL mais fácil do que nunca.
Para obter mais informações sobre modelos Hugging Face Transformer no Amazon SageMaker, consulte Suporte para modelos de transformadores de rosto abraçados.
Novos recursos para treinamento de modelos de PNL em larga escala com a biblioteca paralela de modelos SageMaker
No AWS re:Invent 2020, a SageMaker lançou bibliotecas distribuídas que oferecem o melhor desempenho na nuvem para treinamento de modelos de visão computacional como Máscara-RCNN e modelos de PNL como T5-3B. Isso é possível por meio de primitivas de comunicação aprimoradas que são 20 a 40% mais rápidas do que NCCL na AWS e técnicas de distribuição de modelos que permitem que modelos de linguagem extremamente grandes sejam dimensionados em dezenas a centenas a milhares de GPUs.
A biblioteca paralela de modelos (SMP) do SageMaker sempre deu a você a capacidade de pegar seu modelo NLP predefinido no PyTorch, seja por meio do Hugging Face ou em outro lugar, e particionar esse modelo em várias GPUs em seu cluster. Dito de outra forma, o SMP divide seu modelo em partes menores para que você não sofra erros de falta de memória (OOM). Temos o prazer de adicionar técnicas adicionais de economia de memória que são críticas para modelos de grande escala, a saber:
- Paralelismo tensor
- Fragmentação de estado do otimizador
- Ponto de verificação de ativação
- Descarregamento de ativação
Você pode combinar esses quatro recursos para utilizar a memória com mais eficiência e treinar a próxima geração de modelos de PNL de escala extrema.
Treinamento distribuído e paralelismo tensorial
Para entender o paralelismo de tensores, é útil saber que existem muitos tipos de treinamento distribuído, ou paralelismo. Você provavelmente já conhece o tipo mais comum, paralelismo de dados. O núcleo do paralelismo de dados funciona assim: você adiciona um nó extra ao seu cluster, como passar de uma para duas instâncias ml.EC2 em seu estimador SageMaker. Em seguida, você usa uma estrutura paralela de dados como Horovod, PyTorch Distributed Data Parallel ou SageMaker Distributed. Isso cria réplicas de seu modelo, uma por acelerador, e lida com a fragmentação dos dados para cada nó, além de reunir todos os resultados durante a etapa de retropropagação de sua rede neural. Pense em descida de gradiente distribuída. O paralelismo de dados também é popular em servidores; você está fragmentando dados em todas as GPUs e, ocasionalmente, CPUs em todos os seus nós. O diagrama a seguir ilustra o paralelismo de dados.
Paralelismo de modelo é ligeiramente diferente. Em vez de fazer cópias do mesmo modelo, dividimos seu modelo em pedaços. Em seguida, gerenciamos a execução, para que seus dados ainda fluam pela rede neural exatamente da mesma maneira matematicamente, mas diferentes partes do seu modelo estão em GPUs diferentes. Se você estiver usando um ml.p3.8xlarge, você tem quatro NVIDIA V100, então você provavelmente vai querer dividir seu modelo em 4 partes, uma por GPU. Se você pular para dois ml.p4d.24xlarge, isso é um total de 16 A100 em seu cluster, então você pode dividir seu modelo em 16 partes. Isso também é chamado às vezes paralelismo de dutos. Isso ocorre porque o conjunto de camadas na rede é particionado entre GPUs e executado em pipeline para maximizar a utilização da GPU. O diagrama a seguir ilustra o paralelismo do modelo.
Para fazer o paralelismo de modelo acontecer em escala, precisamos de um terceiro tipo de distribuição: paralelismo tensorial. O paralelismo tensor aplica os mesmos conceitos em um passo adiante - separamos as maiores camadas de sua rede neural e colocamos partes das próprias camadas em diferentes dispositivos. Isso é relevante quando você está trabalhando com 175 bilhões de parâmetros ou mais e tentando encaixar até mesmo alguns registros na RAM, junto com partes do seu modelo, para treinar esse transformador. O diagrama a seguir ilustra o paralelismo tensorial.
Para habilitar paralelismo de tensor, defina-o dentro das opções smp você passa para o seu estimador.
No código anterior, pipeline_parallel_degree
descreve em quantos segmentos seu modelo deve ser fragmentado, com base no paralelismo de pipeline que discutimos acima. Outra palavra para isso é pontuações.
Para habilitar o paralelismo de tensor, defina tensor_parallel_degree
ao seu nível desejado. Certifique-se de escolher um número igual ou menor que o número de GPUs por instância, portanto, não maior que 8 para as máquinas ml.p4d.24xlarge. Para alterações de script adicionais, consulte Executar um trabalho de treinamento paralelo de modelo distribuído do SageMaker com paralelismo tensor.
O parâmetro ddp refere-se a dados distribuídos em paralelo. Você normalmente habilita isso se estiver usando paralelismo de dados ou paralelismo de tensor, porque a biblioteca de paralelismo de modelo depende do DDP para esses recursos.
Fragmentação de estado do otimizador, descarregamento de ativação e pontos de verificação
Se você tiver um modelo extremamente grande, também precisará de um estado de otimizador extremamente grande. Preparar seu otimizador para SMP é simples: basta pegá-lo do disco em seu script e carregá-lo no smp.DistributedOptimizer()
objeto.
Certifique-se de habilitar isso no estimador definindo shard_optimizer_state
para Verdade no smp_options
você usa para configurar o SMP:
Semelhante ao paralelismo de tensor e pipeline, o SMP faz o perfil do seu modelo e do tamanho do seu mundo (o número total de GPUs em todos os seus nós de treinamento), para encontrar as melhores estratégias de posicionamento.
No aprendizado profundo, as saídas da camada intermediária também são chamadas de ativações, e elas precisam ser armazenadas durante a passagem direta. Isso ocorre porque eles precisam ser usados para cálculo de gradiente na passagem para trás. Em um modelo grande, armazenar todas essas ativações simultaneamente na memória pode criar gargalos de memória significativos. Para resolver esse gargalo, você pode usar checkpoint de ativação, o terceiro novo recurso da biblioteca de paralelismo de modelo SageMaker. Ponto de verificação de ativação, ou checkpoint de gradiente, é uma técnica para reduzir o uso de memória limpando ativações de certas camadas e recalculando-as durante uma passagem para trás. Isso efetivamente troca tempo de computação extra para uso reduzido de memória.
Por último, descarga de ativação usa diretamente o checkpoint de ativação. É uma estratégia manter apenas algumas ativações de tensor na RAM da GPU durante o treinamento do modelo. Especificamente, movemos as ativações com checkpoints para a memória da CPU durante a passagem para frente e as carregamos de volta para a GPU para a passagem para trás de um micro-lote específico.
Microlotes e estratégias de posicionamento
Outros tópicos que às vezes causam confusão aos clientes são micro-lotes e estratégias de posicionamento. Ambos são hiperparâmetros que você pode fornecer à biblioteca paralela do modelo SageMaker. Especificamente, os micro-lotes são relevantes ao implementar modelos que dependem do paralelismo de pipeline, como aqueles com pelo menos 30 bilhões de parâmetros de tamanho ou mais.
Microlotes são subconjuntos de minilotes. Quando seu modelo está em seu loop de treinamento, você define um certo número de registros para pegar e passar para frente e para trás pelas camadas – isso é chamado de minilote, ou às vezes apenas um fornada. Uma passagem completa pelo seu conjunto de dados é chamada de época. Para executar passagens para frente e para trás com paralelismo de pipeline, a biblioteca paralela de modelos do SageMaker fragmenta os lotes em subconjuntos menores chamados microlotes, que são executados um de cada vez para maximizar a utilização da GPU. O conjunto de exemplos por GPU resultante, muito menor, é chamado de micro-lote. Em nosso exemplo GPT-2, adicionamos um padrão de 1 microlote diretamente ao script de treinamento.
À medida que você amplia sua configuração de treinamento, é altamente recomendável alterar o tamanho do lote e o tamanho do microlote de acordo. Essa é a única maneira de garantir um bom desempenho: você deve considerar o tamanho do lote e os tamanhos dos microlotes em função do tamanho geral do seu mundo ao confiar no paralelismo de pipeline.
As estratégias de posicionamento são como informar fisicamente ao SageMaker onde colocar suas partições de modelo. Se você estiver usando paralelo de modelo e paralelo de dados, definir placement_strategy
para “cluster”
coloca réplicas de modelo em IDs de dispositivo (GPUs) fisicamente próximas umas das outras. No entanto, se você realmente quer ser mais prescritivo sobre sua estratégia de paralelismo, você pode dividi-la em uma única string com diferentes combinações de três letras: D para paralelismo de dados, P
indica paralelismo de pipeline, e T
para paralelismo tensorial. Geralmente, recomendamos manter o posicionamento padrão de "cluster"
, porque isso é mais apropriado para treinamento de modelos em grande escala. O posicionamento “cluster” corresponde a “DPT
".
Para obter mais informações sobre estratégias de posicionamento, consulte Estratégia de posicionamento com paralelismo tensor.
Caso de uso de exemplo
Vamos imaginar que você tenha um ml.p3.16xlarge em seu trabalho de treinamento. Isso te dá 8 NVIDIA V100 por nó. Lembre-se, toda vez que você adiciona uma instância extra, você experimenta uma sobrecarga de largura de banda adicional, então é sempre melhor ter mais GP'Us em um único nó. Nesse caso, é melhor usar um ml.p3.16xlarge do que, por exemplo, dois ml.p3.8xlarges. Mesmo que o número de GPUs seja o mesmo, a sobrecarga de largura de banda extra do nó extra diminui sua taxa de transferência.
O diagrama a seguir ilustra o paralelismo de modelo de quatro vias, combinado com o paralelismo de dados de duas vias. Isso significa que você realmente tem duas réplicas do seu modelo (pense em paralelo de dados), com cada uma delas particionada em quatro GPUs (paralelo de modelo).
Se qualquer uma dessas partições de modelo for muito grande para caber em uma única GPU, você pode adicionar um tipo extra de distribuição – paralelismo de tensor – para cuspi-la e utilizar os dois dispositivos.
Conclusão
Nesta postagem do blog, discutimos as bibliotecas de treinamento distribuídas do SageMaker, focando especialmente no paralelismo de modelo. Compartilhamos benchmarks de desempenho de nosso teste mais recente, alcançando 32 amostras por segundo em instâncias de 120 ml.p4d.24xlarge e 175B de parâmetros no Amazon SageMaker. Prevemos que, se aumentarmos isso para 240 instâncias p4, poderíamos treinar um modelo de parâmetro de 175B em 25 dias.
Também discutimos os recursos mais recentes que permitem treinamento em larga escala, ou seja, paralelismo de tensor, fragmentação de estado do otimizador, checkpoint de ativação e descarregamento de ativação. Compartilhamos algumas dicas e truques para habilitar isso por meio de treinamento no Amazon SageMaker.
Experimente você mesmo usando o mesmo notebook que gerou nossos números, que está disponível no GitHub aqui. Você também pode solicitar mais GPUs para sua conta da AWS por meio solicitando uma aprovação de limite de serviço aqui.
Sobre os autores
Emily Webber ingressou na AWS logo após o lançamento do SageMaker e vem tentando contar ao mundo sobre isso desde então! Além de criar novas experiências de ML para os clientes, Emily gosta de meditar e estudar o budismo tibetano.
Aditya Bindal é gerente de produto sênior da AWS Deep Learning. Ele trabalha em produtos que tornam mais fácil para os clientes treinar modelos de aprendizado profundo na AWS. Em seu tempo livre, ele gosta de passar o tempo com a filha, jogar tênis, ler ficção histórica e viajar.
Luis Quintela é o Software Developer Manager para a biblioteca paralela de modelos do AWS SageMaker. Em seu tempo livre, ele pode ser encontrado andando de Harley na área da baía de SF.
- Coinsmart. A melhor troca de Bitcoin e criptografia da Europa.
- Platoblockchain. Inteligência Metaverso Web3. Conhecimento Ampliado. ACESSO LIVRE.
- CryptoHawk. Radar Altcoin. Teste grátis.
- Fonte: https://aws.amazon.com/blogs/machine-learning/train-175-billion-parameter-nlp-models-with-model-parallel-additions-and-hugging-face-on-amazon-sagemaker/
- "
- 000
- 100
- 2020
- 39
- Sobre
- acelerador
- Conta
- alcançado
- em
- Adicional
- endereço
- avançado
- Todos os Produtos
- já
- Amazon
- Outro
- aplicações
- ÁREA
- disponível
- AWS
- Bay
- MELHOR
- O maior
- bilhão
- BLOG
- Prédio
- Causar
- alterar
- Na nuvem
- código
- combinações
- comum
- Comunicação
- Configuração
- confusão
- Containers
- núcleo
- poderia
- Clientes
- dados,
- desenvolvido
- Developer
- Desenvolvimento
- dispositivo
- Dispositivos/Instrumentos
- diferente
- distribuído
- distribuição
- down
- dirigido
- permitindo
- especialmente
- exemplo
- vasta experiência
- Experiências
- extremo
- Rosto
- mais rápido
- Característica
- Funcionalidades
- Ficção
- caber
- seguinte
- para a frente
- encontrado
- Quadro
- cheio
- função
- Geral
- gerar
- GitHub
- vai
- Bom estado, com sinais de uso
- Pesquisa do Google
- GPU
- Hardware
- útil
- Destaques
- histórico
- Como funciona o dobrador de carta de canal
- Como Negociar
- HTTPS
- Centenas
- aumentou
- INFORMAÇÕES
- inspirado
- integrado
- questões
- IT
- Trabalho
- ingressou
- saltar
- manutenção
- língua
- grande
- mais recente
- lançamento
- APRENDER
- aprendizagem
- Nível
- Biblioteca
- carregar
- máquina
- aprendizado de máquina
- máquinas
- Fazendo
- Gerente
- Memória
- ML
- modelo
- modelos
- modulares
- a maioria
- mover
- nomeadamente
- natural
- rede
- Novos Recursos
- nós
- caderno
- números
- Outros
- Papel
- parceria
- atuação
- peça
- plataforma
- Popular
- possível
- primário
- Produto
- Produtos
- Perfis
- fornecer
- RAM
- RE
- Leitura
- recomendar
- registros
- reduzir
- Resultados
- Execute
- corrida
- Dito
- escalável
- Escala
- dimensionamento
- Sdk
- Pesquisar
- serviço
- conjunto
- contexto
- raspando
- compartilhado
- periodo
- Tamanho
- So
- Software
- especificamente
- velocidade
- Passar
- divisão
- Estado
- estratégias
- Estratégia
- supply
- tática
- técnicas
- teste
- o mundo
- milhares
- Através da
- tempo
- dicas
- dicas e truques
- juntos
- Temas
- trades
- Training
- compreender
- usar
- utilizar
- visão
- dentro
- trabalhar
- trabalho
- mundo
- anos