O pré-treinamento do modelo moderno geralmente exige uma implantação de cluster maior para reduzir o tempo e o custo. No nível do servidor, essas cargas de trabalho de treinamento exigem computação mais rápida e maior alocação de memória. À medida que os modelos crescem para centenas de bilhões de parâmetros, eles exigem um mecanismo de treinamento distribuído que abrange vários nós (instâncias).
Em outubro de 2022, lançamos Instâncias Amazon EC2 Trn1, distribuído por Treinamento AWS, que é o acelerador de aprendizado de máquina de segunda geração projetado pela AWS. As instâncias Trn1 são criadas especificamente para treinamento de modelo de aprendizado profundo de alto desempenho, oferecendo até 50% de economia de custo para treinar em relação a instâncias baseadas em GPU comparáveis. Para reduzir o tempo de treinamento de semanas para dias, ou dias para horas, e distribuir o trabalho de treinamento de um modelo grande, podemos usar um EC2 Trn1 UltraCluster, que consiste em racks densamente compactados e co-localizados de instâncias de computação Trn1, todas interconectadas por rede sem bloqueio em escala de petabytes. É o nosso maior UltraCluster até hoje, oferecendo 6 exaflops de potência de computação sob demanda com até 30,000 chips Trainium.
Nesta postagem, usamos uma carga de trabalho de pré-treinamento do modelo Hugging Face BERT-Large como um exemplo simples para explicar como usar Trn1 UltraClusters.
UltraClusters Trn1
Um UltraCluster Trn1 é um grupo de posicionamento de instâncias Trn1 em um datacenter. Como parte de uma única execução de cluster, você pode criar um cluster de instâncias Trn1 com aceleradores Trainium. O diagrama a seguir mostra um exemplo.
UltraClusters de instâncias Trn1 são colocados em um data center e interconectados usando Adaptador de tecido elástico (EFA), que é uma interface de rede sem bloqueio e escala de petabytes, com até 800 Gbps de largura de banda de rede, que é o dobro da largura de banda suportada pelas instâncias AWS P4d (1.6 Tbps, quatro vezes maior com as próximas instâncias Trn1n). Essas interfaces EFA ajudam a executar cargas de trabalho de treinamento de modelo que usam Bibliotecas de Comunicação Coletiva Neuron em escala. Os Trn1 UltraClusters também incluem serviços de armazenamento anexado à rede co-localizada, como Amazon FSx para Lustre para permitir acesso de alto rendimento a grandes conjuntos de dados, garantindo que os clusters operem com eficiência. Os Trn1 UltraClusters podem hospedar até 30,000 dispositivos Trainium e fornecer até 6 exaflops de computação em um único cluster. EC2 Trn1 UltraClusters fornecem até 6 exaflops de computação, literalmente um supercomputador sob demanda, com um modelo de uso pré-pago. Nesta postagem, usamos algumas ferramentas HPC como Slurm para aumentar um UltraCluster e gerenciar cargas de trabalho.
Visão geral da solução
A AWS oferece uma ampla variedade de serviços para treinamento de modelo distribuído ou inferência de cargas de trabalho em escala, incluindo Lote da AWS, Serviço Amazon Elastic Kubernetes (Amazon EKS) e UltraClusters. Esta postagem se concentra no treinamento de modelo em um UltraCluster. Nossa solução usa o AWS ParallelCluster ferramenta de gerenciamento para criar a infraestrutura e o ambiente necessários para ativar um Trn1 UltraCluster. A infraestrutura consiste em um nó principal e vários nós de computação Trn1 em uma nuvem privada virtual (VPC). Usamos o Slurm como o sistema de gerenciamento de cluster e agendamento de tarefas. O diagrama a seguir ilustra nossa arquitetura de solução.
Para obter mais detalhes e como implantar esta solução, consulte Treine um modelo no AWS Trn1 ParallelCluster.
Vejamos algumas etapas importantes desta solução:
- Crie uma VPC e sub-redes.
- Configure a frota de computação.
- Crie o cluster.
- Inspecione o cluster.
- Inicie seu trabalho de treinamento.
Pré-requisitos
Para acompanhar esta postagem, uma ampla familiaridade com os principais serviços da AWS, como Amazon Elastic Compute Nuvem (Amazon EC2) está implícito, e a familiaridade básica com aprendizado profundo e PyTorch seria útil.
Criar VPC e sub-redes
Uma maneira fácil de criar a VPC e as sub-redes é por meio do Nuvem virtual privada da Amazon (Amazon VPC). Instruções completas podem ser encontradas em GitHub. Após a instalação do VPC e das sub-redes, você precisa configurar as instâncias na frota de computação. Resumidamente, isso é possível por um script de instalação especificado por CustomActions no arquivo YAML usado para criar o ParallelCluster (consulte Criar ParallelCluster). Um ParallelCluster requer uma VPC que tenha duas sub-redes e um gateway Network Address Translation (NAT), conforme mostrado no diagrama de arquitetura anterior. Essa VPC deve residir nas zonas de disponibilidade onde as instâncias Trn1 estão disponíveis. Além disso, nesta VPC, você precisa ter uma sub-rede pública e uma sub-rede privada para manter o nó principal e os nós de computação Trn1, respectivamente. Você também precisa de um acesso à Internet do gateway NAT, de modo que os nós de computação Trn1 possam fazer o download Neurônio AWS pacotes. Em geral, os nós de computação receberão atualizações para os pacotes do sistema operacional, driver Neuron e tempo de execução e driver EFA para treinamento de várias instâncias.
Quanto ao nó principal, além dos componentes mencionados para os nós de computação, ele também recebe o compilador PyTorch-NeuronX e NeuronX, que permite o processo de compilação do modelo em dispositivos XLA, como o Trainium.
Configurar a frota de computação
No arquivo YAML para criar o Trn1 UltraCluster, InstanceType
é especificado como trn1.32xlarge. MaxCount
e MinCount
são usados para indicar o intervalo de tamanho da frota de computação. Você pode usar MinCount
para manter algumas ou todas as instâncias Trn1 disponíveis o tempo todo. MinCount
pode ser definido como zero para que, se não houver trabalho em execução, as instâncias Trn1 sejam liberadas desse cluster.
O Trn1 também pode ser implantado em um UltraCluster com várias filas. No exemplo a seguir, há apenas uma fila sendo configurada para envio de trabalhos Slurm:
Se precisar de mais de uma fila, você pode especificar vários InstanceType
, cada um com seu MaxCount
, MinCount
e Name
:
Aqui, duas filas são configuradas, para que o usuário tenha a flexibilidade de escolher os recursos para o seu trabalho Slurm.
Criar o cluster
Para iniciar um Trn1 UltraCluster, use o seguinte pcluster
comando de onde seu Ferramenta ParallelCluster está instalado:
Usamos as seguintes opções neste comando:
--cluster-configuration
– Esta opção espera um arquivo YAML que descreva a configuração do cluster-n
(ou--cluster-name
) – O nome deste cluster
Este comando cria um cluster Trn1 em sua conta da AWS. Você pode verificar o progresso da criação do cluster no Formação da Nuvem AWS console. Para mais informações, consulte Usando o console do AWS CloudFormation.
Como alternativa, você pode usar o seguinte comando para ver o status da sua solicitação:
e o comando indicará o status, por exemplo:
A seguir estão os parâmetros de interesse da saída:
- id da instância – Este é o ID da instância do nó principal, que será listado no console do Amazon EC2
- computaFleetStatus – Este atributo indica a prontidão dos nós de computação
- Tags – Este atributo indica a versão do
pcluster
ferramenta usada para criar este cluster
Inspecione o cluster
Você pode usar o mencionado pcluster describe-cluster
comando para verificar o cluster. Depois que o cluster for criado, você observará o seguinte na saída:
Neste ponto, você pode usar o SSH no nó principal (identificado pelo ID da instância no console do Amazon EC2). Veja a seguir um diagrama lógico do cluster.
Depois de fazer o SSH no nó principal, você pode verificar a frota de computação e seu status com um comando Slurm, como sinfo
para visualizar as informações do nó para o sistema. Veja a seguir um exemplo de saída:
Isso indica que há uma fila conforme mostrado por uma única partição. Existem 16 nós disponíveis e os recursos são alocados. A partir do nó principal, você pode fazer SSH em qualquer nó de computação:
Use exit
para voltar ao nó principal.
Da mesma forma, você pode usar SSH em um nó de computação a partir de outro nó de computação. Cada nó de computação possui ferramentas Neuron instaladas, como neuron-top
. Você pode invocar neuron-top
durante a execução do script de treinamento para inspecionar a utilização do NeuronCore em cada nó.
Inicie seu trabalho de treinamento
Usamos o Tutorial de pré-treinamento BERT-Large para abraçar o rosto como um exemplo para executar neste cluster. Após o download dos dados e scripts de treinamento para o cluster, usamos o controlador Slurm para gerenciar e orquestrar nossa carga de trabalho. Enviamos o trabalho de treinamento com o sbatch
comando. O shell script chama o script Python por meio do neuron_parallel_compile
API para compilar o modelo em gráficos sem uma execução de treinamento completa. Veja o seguinte código:
Usamos as seguintes opções neste comando:
--exclusive
– Esta tarefa usará todos os nós e não compartilhará os nós com outras tarefas durante a execução da tarefa atual.--nodes
– O número de nós para este trabalho.--wrap
– Isso define uma string de comando que é executada pelo controlador Slurm. Nesse caso, ele simplesmente compila o modelo em paralelo usando todos os nós.
Depois que o modelo for compilado com sucesso, você poderá iniciar o trabalho de treinamento completo com o seguinte comando:
Este comando iniciará o trabalho de treinamento para o modelo Hugging Face BERT-Large. Com 16 nós Trn1.32xlarge, você pode esperar que ele seja concluído em menos de 8 horas.
Neste ponto, você pode usar um comando Slurm como squeue
para inspecionar o trabalho enviado. Um exemplo de saída é o seguinte:
Esta saída mostra que o trabalho está em execução (R
) em 16 nós de computação.
À medida que o trabalho está em execução, as saídas são capturadas e anexadas em um arquivo de log Slurm. A partir do terminal do nó principal, você pode inspecioná-lo em tempo real.
Além disso, no mesmo diretório que o arquivo de log Slurm, há um diretório correspondente para este trabalho. Este diretório inclui o seguinte (por exemplo):
Esse diretório é acessível a todos os nós de computação. results.json
captura os metadados dessa execução de tarefa específica, como a configuração do modelo, tamanho do lote, etapas totais, etapas de acumulação de gradiente e nome do conjunto de dados de treinamento. O ponto de verificação do modelo e o log de saída para cada nó de computação também são capturados neste diretório.
Considere a escalabilidade do cluster
Em um UltraCluster Trn1, várias instâncias Trn1 interconectadas executam uma grande carga de trabalho de treinamento de modelo em paralelo e reduzem o tempo total de computação ou o tempo de convergência. Existem duas medidas de escalabilidade de um cluster: escala forte e escala fraca. Normalmente, para o treinamento do modelo, a necessidade é acelerar a execução do treinamento, porque o custo de uso é determinado pela taxa de transferência de amostra para rodadas de atualizações de gradiente. O dimensionamento forte refere-se ao cenário em que o tamanho total do problema permanece igual à medida que o número de processadores aumenta, o dimensionamento forte é uma medida importante de escalabilidade para o treinamento do modelo. Ao avaliar o dimensionamento forte (ou seja, o impacto da paralelização), queremos manter o tamanho do lote global igual e ver quanto tempo leva para a convergência. Nesse cenário, precisamos ajustar o micro-passo de acumulação de gradiente de acordo com o número de nós de computação. Isso é obtido com o seguinte no script de shell de treinamento run_dp_bert_large_hf_pretrain_bf16_s128.sh
:
Por outro lado, se você quiser avaliar quantas cargas de trabalho podem ser executadas em um horário fixo adicionando mais nós, use escalonamento fraco para medir a escalabilidade. No escalonamento fraco, o tamanho do problema aumenta na mesma proporção que o número de NeuronCoress, mantendo assim a mesma quantidade de trabalho por NeuronCores. Para avaliar o escalonamento fraco ou o efeito de adicionar mais nós na carga de trabalho aumentada, simplesmente remova a linha acima do script de treinamento e mantenha o número de etapas para acumulação de gradiente constante com um valor padrão (32) fornecido no script de treinamento.
Avalie seus resultados
Fornecemos alguns resultados de referência no página de desempenho do neurônio para demonstrar o efeito da escala. Os dados demonstram o benefício de usar várias instâncias para paralelizar o trabalho de treinamento para muitos modelos grandes diferentes para treinar em escala.
Limpe sua infraestrutura
Para deletar toda a infraestrutura deste UltraCluster, utilize o pcluster
comando para excluir o cluster e seus recursos:
Conclusão
Nesta postagem, discutimos como dimensionar seu trabalho de treinamento em um Trn1-UltraCluster, que é alimentado por aceleradores Trainium na AWS, reduz o tempo para treinar um modelo. Também fornecemos um link para o Repositório de amostras de neurônios, que contém instruções sobre como implantar um trabalho de treinamento distribuído para um modelo BERT-Large. O Trn1-UltraCluster executa cargas de trabalho de treinamento distribuídas para treinar modelos de aprendizado profundo ultragrandes em escala. Uma configuração de treinamento distribuído resulta em uma convergência de modelo muito mais rápida em comparação com o treinamento em uma única instância Trn1.
Para saber mais sobre como começar a usar as instâncias Trn1 com tecnologia Trainium, visite o documentação do neurônio.
Sobre os autores
KC Tung é Arquiteto de Soluções Sênior no AWS Annapurna Labs. Ele é especialista em treinamento e implantação de grandes modelos de deep learning em escala na nuvem. Ele tem um Ph.D. em biofísica molecular pela University of Texas Southwestern Medical Center, em Dallas. Ele falou em AWS Summits e AWS Reinvent. Hoje ele ajuda os clientes a treinar e implantar grandes modelos PyTorch e TensorFlow na nuvem AWS. É autor de dois livros: Conheça o TensorFlow Enterprise e Referência de bolso do TensorFlow 2.
Jeffrey Huynh é engenheiro principal no AWS Annapurna Labs. Ele é apaixonado por ajudar os clientes a executar suas cargas de trabalho de treinamento e inferência em dispositivos aceleradores Trainium e Inferentia usando SDK do AWS Neuron. Ele é um ex-aluno da Caltech/Stanford com graduação em Física e EE. Ele gosta de correr, jogar tênis, cozinhar e ler sobre ciência e tecnologia.
Shruti Koparkar é gerente sênior de marketing de produtos da AWS. Ela ajuda os clientes a explorar, avaliar e adotar a infraestrutura de computação acelerada do EC2 para suas necessidades de aprendizado de máquina.
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- Platoblockchain. Inteligência Metaverso Web3. Conhecimento Ampliado. Acesse aqui.
- Fonte: https://aws.amazon.com/blogs/machine-learning/scaling-large-language-model-llm-training-with-amazon-ec2-trn1-ultraclusters/
- 000
- 1
- 10
- 100
- 2022
- 7
- 9
- a
- Sobre
- acima
- acelerado
- acelerador
- aceleradores
- Acesso
- acessível
- Segundo
- Conta
- acumulação
- alcançado
- em
- Adição
- endereço
- adotar
- Depois de
- Todos os Produtos
- alocado
- alocação
- Amazon
- Amazon EC2
- quantidade
- e
- Outro
- api
- arquitetura
- autor
- disponibilidade
- disponível
- AWS
- Formação da Nuvem AWS
- em caminho duplo
- Largura de Banda
- basic
- Porque
- ser
- referência
- beneficiar
- bilhões
- Biofísica
- Livros
- brevemente
- trazer
- amplo
- construído
- chamadas
- capturas
- casas
- Centralização de
- verificar
- Chips
- Escolha
- Na nuvem
- Agrupar
- código
- Collective
- Comunicação
- comparável
- comparado
- completar
- componentes
- computação
- Computar
- computação
- Configuração
- cônsul
- constante
- contém
- controlador
- Convergência
- núcleo
- Correspondente
- Custo
- crio
- criado
- cria
- Criar
- criação
- Atual
- Clientes
- Dallas
- dados,
- Data Center
- conjuntos de dados
- Data
- dias
- profundo
- deep learning
- Padrão
- Define
- entregar
- Demanda
- demonstrar
- demonstra
- implantar
- implantado
- desenvolvimento
- projetado
- detalhes
- determinado
- Dispositivos/Instrumentos
- diferente
- discutido
- distribuir
- distribuído
- treinamento distribuído
- down
- download
- motorista
- durante
- cada
- efeito
- eficientemente
- permitir
- permite
- engenheiro
- assegurando
- Meio Ambiente
- avaliar
- avaliação
- exemplo
- esperar
- espera
- Explicação
- explorar
- tecidos
- Rosto
- Familiaridade
- mais rápido
- Envie o
- fixado
- ANIMARIS
- Flexibilidade
- concentra-se
- seguir
- seguinte
- segue
- encontrado
- da
- cheio
- porta de entrada
- Geral
- geração
- ter
- Git
- dado
- Global
- gráficos
- maior
- Grupo
- Cresça:
- mão
- cabeça
- ajudar
- útil
- ajuda
- ajuda
- Alta
- alta performance
- segurar
- hospedeiro
- HORÁRIO
- Como funciona o dobrador de carta de canal
- Como Negociar
- hpc
- HTML
- HTTPS
- Centenas
- ID
- identificado
- Impacto
- implícita
- importante
- in
- incluir
- inclui
- Incluindo
- aumentou
- Aumenta
- indicam
- indicam
- Infinita
- INFORMAÇÕES
- Infraestrutura
- instalado
- instância
- instruções
- interconectado
- interesse
- Interface
- interfaces de
- Internet
- Acesso à internet
- invoca
- IT
- Jan
- Trabalho
- Empregos
- json
- Guarda
- manutenção
- Chave
- Laboratório
- língua
- grande
- Maior
- maior
- lançamento
- lançado
- APRENDER
- aprendizagem
- Nível
- bibliotecas
- Line
- LINK
- Listado
- LLM
- lógico
- olhar
- máquina
- aprendizado de máquina
- moldadas
- gerencia
- de grupos
- Gerente
- muitos
- Marketing
- a medida
- medidas
- mecanismo
- médico
- Memória
- metadados
- modelo
- modelos
- molecular
- mais
- múltiplo
- nome
- necessário
- você merece...
- Cria
- rede
- networking
- nó
- nós
- número
- observar
- Outubro
- oferecendo treinamento para distância
- Oferece
- ONE
- operar
- Opção
- Opções
- ordem
- OS
- Outros
- próprio
- pacotes
- embalado
- Paralelo
- parâmetros
- parte
- particular
- apaixonado
- atuação
- Física
- platão
- Inteligência de Dados Platão
- PlatãoData
- ponto
- possível
- Publique
- poder
- alimentado
- Diretor
- privado
- Problema
- processo
- processadores
- Produto
- Progresso
- fornecer
- fornecido
- público
- propósito
- Python
- pytorch
- Rampa
- alcance
- Taxa
- Prontidão
- Leitura
- reais
- em tempo real
- razão
- receber
- recebe
- reduzir
- reduz
- refere-se
- região
- liberado
- remover
- solicitar
- requerer
- exige
- Recursos
- Resultados
- rodadas
- Execute
- corrida
- mesmo
- Poupança
- AMPLIAR
- Escala
- dimensionamento
- cenário
- Ciência
- Ciência e Tecnologia
- Scripts
- Segundo
- Segunda geração
- senior
- Serviços
- conjunto
- instalação
- Partilhar
- concha
- mostrando
- Shows
- simples
- simplesmente
- solteiro
- Tamanho
- So
- solução
- alguns
- vãos
- especializada
- especificada
- velocidade
- Spin
- começo
- começado
- Estado
- Status
- Passos
- armazenamento
- mais forte,
- submissão
- enviar
- apresentado
- sub-rede
- sub-redes
- entraram com sucesso
- tal
- Cúpulas
- supercomputador
- Suportado
- .
- toma
- Tecnologia
- fluxo tensor
- terminal
- texas
- A
- deles
- assim
- Através da
- Taxa de transferência
- tempo
- vezes
- para
- hoje
- ferramenta
- ferramentas
- Total
- Trem
- Training
- Tradução
- tipicamente
- Ubuntu
- universidade
- os próximos
- Atualizações
- URL
- Uso
- usar
- Utilizador
- valor
- variedade
- verificar
- versão
- via
- Ver
- Virtual
- semanas
- qual
- enquanto
- Largo
- precisarão
- dentro
- sem
- Atividades:
- seria
- embrulho
- yaml
- Vocês
- investimentos
- zefirnet
- zero
- zonas