Desenvolvimentos recentes em aprendizado profundo levaram a modelos cada vez maiores, como GPT-3, BLOOM e OPT, alguns dos quais já ultrapassam 100 bilhões de parâmetros. Embora modelos maiores tendam a ser mais poderosos, treinar tais modelos requer recursos computacionais significativos. Mesmo com o uso de bibliotecas avançadas de treinamento distribuído, como FSDP e DeepSpeed, é comum que os trabalhos de treinamento exijam centenas de dispositivos aceleradores por várias semanas ou meses.
No final de 2022, a AWS anunciou a disponibilidade geral de Instâncias Amazon EC2 Trn1 alimentado por Treinamento AWS— um acelerador de aprendizado de máquina (ML) desenvolvido especificamente para fornecer uma plataforma altamente escalável, econômica e de alto desempenho para treinar modelos de aprendizado profundo na nuvem. As instâncias Trn1 estão disponíveis em vários tamanhos (consulte a tabela a seguir), com até 16 aceleradores Trainium por instância.
Tamanho da instância | Aceleradores de trem | Memória do Acelerador (GB) | vCPUs | Memória de instância (GiB) | Largura de banda de rede (Gbps) |
trn1.2xgrande | 1 | 32 | 8 | 32 | Até 12.5 |
trn1.32xgrande | 16 | 512 | 128 | 512 | 800 |
trn1n.32xlarge (em breve) | 16 | 512 | 128 | 512 | 1600 |
As instâncias Trn1 podem ser implantadas como instâncias independentes para trabalhos de treinamento menores ou em ultraclusters altamente escaláveis que suportam treinamento distribuído em dezenas de milhares de aceleradores Trainium. Todas as instâncias Trn1 suportam a configuração autônoma, enquanto os ultraclusters Trn1 requerem instâncias trn1.32xlarge ou trn1n.32xlarge. Em um ultracluster, várias instâncias Trn1 são co-localizadas em uma determinada zona de disponibilidade da AWS e conectadas com rede Elastic Fabric Adapter (EFA) de alta velocidade e baixa latência que fornece 800 Gbps de largura de banda de rede sem bloqueio por instância para operações de computação coletivas . O tipo de instância trn1n.32xlarge, lançado no início de 2023, aumentará essa largura de banda para 1600 Gbps por instância.
Muitos clientes corporativos optam por implantar suas cargas de trabalho de aprendizado profundo usando o Kubernetes, o padrão de fato para orquestração de contêineres na nuvem. Os clientes da AWS costumam implantar essas cargas de trabalho usando Serviço Amazon Elastic Kubernetes (Amazon EKS). O Amazon EKS é um serviço Kubernetes gerenciado que simplifica a criação, configuração, ciclo de vida e monitoramento de clusters Kubernetes enquanto ainda oferece a flexibilidade total do Kubernetes upstream.
Hoje, temos o prazer de anunciar o suporte oficial para trabalhos de treinamento distribuídos usando instâncias Amazon EKS e EC2 Trn1. Com este anúncio, agora você pode facilmente executar trabalhos de treinamento conteinerizados em grande escala no Amazon EKS, aproveitando ao máximo a relação preço/desempenho, escalabilidade e facilidade de uso oferecidas pelas instâncias Trn1.
Juntamente com este anúncio, também estamos publicando um tutorial detalhado que orienta você nas etapas necessárias para executar um trabalho de treinamento distribuído de várias instâncias (pré-treinamento da fase 1 do BERT) usando instâncias Amazon EKS e Trn1. Nesta postagem, você aprenderá sobre a arquitetura da solução e revisará várias etapas importantes do tutorial. Consulte o repositório oficial de tutoriais para o fluxo de trabalho completo de ponta a ponta.
Para acompanhar, uma ampla familiaridade com os principais serviços da AWS, como Amazon Elastic Compute Nuvem (Amazon EC2) e Amazon EKS estão implícitos, e a familiaridade básica com aprendizado profundo e PyTorch seria útil.
Arquitetura da solução
O diagrama a seguir ilustra a arquitetura da solução.
A solução consiste nos seguintes componentes principais:
- Um cluster EKS
- Um grupo de nós EKS que consiste em instâncias trn1.32xlarge
- A Neurônio AWS SDK
- Plugins EKS para Neuron e EFA
- An Registro do Amazon Elastic Container (Amazon ECR) Rrepositório
- Uma imagem de contêiner de treinamento
- An Amazon FSx para Lustre sistema de arquivos
- Um agendador de lote Volcano e servidor etcd
- O iniciador de tarefas universal TorchX
- O módulo TorchX DDP para Trainium
No centro da solução está um cluster EKS que fornece a você a funcionalidade principal de gerenciamento do Kubernetes por meio de um terminal de serviço EKS. Um dos benefícios do Amazon EKS é que o serviço monitora e dimensiona ativamente o plano de controle com base na carga, o que garante alto desempenho para grandes cargas de trabalho, como treinamento distribuído. Dentro do cluster EKS há um grupo de nós que consiste em duas ou mais instâncias trn1.32xlarge baseadas em Trainium que residem na mesma zona de disponibilidade.
O Neuron SDK é a pilha de software que fornece driver, compilador, tempo de execução, integração de estrutura (por exemplo, PyTorch Neuron) e ferramentas de usuário que permitem acessar os benefícios dos aceleradores Trainium. O driver do dispositivo Neuron é executado diretamente nos nós EKS (instâncias Trn1) e fornece acesso aos chips Trainium de dentro dos contêineres de treinamento que são iniciados nos nós. Os plug-ins Neuron e EFA são instalados no cluster EKS para fornecer acesso aos chips Trainium e aos dispositivos de rede EFA necessários para o treinamento distribuído.
Um repositório ECR é usado para armazenar as imagens do contêiner de treinamento. Essas imagens contêm o Neuron SDK (excluindo o driver Neuron, que é executado diretamente nas instâncias Trn1), o script de treinamento PyTorch e as dependências necessárias. Quando um trabalho de treinamento é iniciado no cluster EKS, as imagens de contêiner são primeiro extraídas do Amazon ECR para os nós EKS, e os contêineres de trabalho PyTorch são instanciados a partir das imagens.
O armazenamento compartilhado é fornecido usando um sistema de arquivos FSx for Lustre de alto desempenho que existe na mesma zona de disponibilidade das instâncias trn1.32xlarge. A criação e anexação do sistema de arquivos FSx for Lustre ao cluster EKS é mediada pelo Driver Amazon FSx para Lustre CSI. Nesta solução, o armazenamento compartilhado é usado para armazenar o conjunto de dados de treinamento e quaisquer logs ou artefatos criados durante o processo de treinamento.
A solução usa o Lançador de tarefas universal TorchX para iniciar trabalhos de treinamento distribuídos no Amazon EKS. TorchX tem duas dependências importantes: o agendador de lote Volcano e o servidor etcd. O Volcano lida com o agendamento e o enfileiramento de trabalhos de treinamento, enquanto o servidor etcd é um armazenamento de valor-chave usado pelo TorchElastic para sincronização e descoberta de pares durante a inicialização do trabalho.
Quando um trabalho de treinamento é iniciado usando TorchX, o comando de inicialização usa o módulo DDP distribuído TorchX fornecido para Trainium para configurar o trabalho de treinamento geral e, em seguida, executar os comandos apropriados do archun em cada um dos pods de trabalho PyTorch. Quando um trabalho está em execução, ele pode ser monitorado usando ferramentas padrão do Kubernetes (como kubectl) ou por meio de conjuntos de ferramentas padrão de ML, como TensorBoard.
Visão geral da solução
Vejamos os passos importantes desta solução. Ao longo desta visão geral, nos referimos ao Inicie um trabalho de treinamento de neurônios PyTorch de vários nós no Trainium usando TorchX e EKS tutoriais no GitHub.
Criar um cluster EKS
Para começar com trabalhos de treinamento distribuído no Amazon EKS com instâncias Trn1, primeiro crie um cluster EKS conforme descrito no tutorial no GitHub. A criação de cluster pode ser obtida usando ferramentas padrão, como eksctl
e Formação da Nuvem AWS.
Criar um grupo de nós EKS
Em seguida, precisamos criar um grupo de nós EKS contendo duas ou mais instâncias trn1.32xlarge em uma região com suporte. No tutorial, O AWS CloudFormation é usado para criar um modelo de lançamento do EC2 específico do Trainium, que garante que as instâncias Trn1 sejam executadas com uma Amazon Machine Image (AMI) apropriada e a configuração de rede EFA correta necessária para dar suporte ao treinamento distribuído. A AMI também inclui o driver de dispositivo Neuron que fornece suporte para os chips aceleradores Trainium. Com o eksctl
ferramenta de gerenciamento Amazon EKS, você pode facilmente criar um grupo de nós Trainium usando um manifesto YAML básico que faz referência ao modelo de execução recém-criado. Por exemplo:
No manifesto anterior, vários atributos são configurados para permitir o uso de instâncias Trn1 no cluster EKS. Primeiro, metadata.region
é definido como uma das regiões que suporta instâncias Trn1 (atualmente us-east-1
e us-west-2
). Em seguida, para as zonas de disponibilidade, o Amazon EKS exige que duas zonas de disponibilidade sejam especificadas. Uma dessas Zonas de Disponibilidade deve suportar o uso de instâncias Trn1, enquanto a outra pode ser escolhida aleatoriamente. O tutorial mostra como determine quais zonas de disponibilidade permitirão instâncias Trn1 em sua conta da AWS. A mesma zona de disponibilidade compatível com Trn1 também deve ser especificada usando o availabiltyZones
atributo associado ao grupo de nós EKS. efaEnabled
está definido para true
para configurar os nós com a configuração de rede EFA apropriada necessária para o treinamento distribuído. Por último, o launchTemplate.id
O atributo associado ao grupo de nós aponta para o modelo de execução do EC2 criado por meio do AWS CloudFormation em uma etapa anterior.
Supondo que você já tenha aplicado o modelo CloudFormation e instalado o eksctl
ferramenta de gerenciamento, você pode criar um grupo de nós EKS compatível com Trainium executando o seguinte código:
Instalar plug-ins do Kubernetes para dispositivos Trainium e EFA
Com o grupo de nós instalado, a próxima etapa é instalar os plug-ins do Kubernetes que fornecem suporte para os aceleradores Trainium (por meio do plug-in Neuron) e os dispositivos EFA (por meio do plug-in EFA). Esses plug-ins podem ser facilmente instalados no cluster usando o padrão kubectl
ferramenta de gerenciamento conforme mostrado no tutorial.
Para usar o iniciador PyTorch universal do TorchX para iniciar trabalhos de treinamento distribuídos, são necessários dois pré-requisitos: o agendador de lote Volcano e o servidor etcd. Assim como os plug-ins Neuron e EFA, podemos usar o kubectl
ferramenta para instalar o Volcano e o servidor etcd no cluster EKS.
Anexe o armazenamento compartilhado ao cluster EKS
No tutorial, o FSx for Lustre é usado para fornecer um sistema de arquivos compartilhados de alto desempenho que pode ser acessado por vários pods de trabalho EKS. Esse armazenamento compartilhado é usado para hospedar o conjunto de dados de treinamento, bem como quaisquer artefatos e logs criados durante o processo de treinamento. O tutorial descreve como criar e anexar o armazenamento compartilhado ao cluster usando o Driver Amazon FSx para Lustre CSI.
Criar uma imagem de contêiner de treinamento
Em seguida, precisamos criar uma imagem de contêiner de treinamento que inclua o script de treinamento PyTorch junto com quaisquer dependências. Um Dockerfile de exemplo está incluído no tutorial, que incorpora o script de pré-treinamento BERT junto com suas dependências de software. O Dockerfile é usado para criar a imagem do contêiner de treinamento e a imagem é então enviada para um repositório ECR do qual os trabalhadores PyTorch podem extrair a imagem quando um trabalho de treinamento é iniciado no cluster.
Configure os dados de treinamento
Antes de iniciar um trabalho de treinamento, os dados de treinamento são primeiro copiados para o volume de armazenamento compartilhado no FSx for Lustre. O tutorial descreve como criar um pod temporário do Kubernetes que tenha acesso ao volume de armazenamento compartilhado e mostra como fazer login no pod para baixar e extrair o conjunto de dados de treinamento usando comandos shell padrão do Linux.
Com os vários pré-requisitos de infraestrutura e software em vigor, agora podemos nos concentrar nos aspectos Trainium da solução.
Pré-compile seu modelo
O Neuron SDK oferece suporte ao PyTorch por meio de uma camada de integração chamada Neurônio PyTorch. Por padrão, o PyTorch Neuron opera com compilação just-in-time, em que os vários gráficos de computação de rede neural em um trabalho de treinamento são compilados à medida que são encontrados durante o processo de treinamento. Para modelos maiores, pode ser mais conveniente usar o fornecido neuron_parallel_compile
ferramenta para pré-compilar e armazenar em cache os vários gráficos de computação com antecedência, a fim de evitar a compilação do gráfico no momento do treinamento. Antes de iniciar o trabalho de treinamento no cluster EKS, o tutorial mostra como iniciar um trabalho de pré-compilação via TorchX usando o neuron_parallel_compile
ferramenta. Após a conclusão do trabalho de pré-compilação, o compilador Neuron terá identificado e compilado todos os gráficos de computação da rede neural e os armazenado em cache no volume de armazenamento compartilhado para uso posterior durante o trabalho real de pré-treinamento do BERT.
Iniciar o trabalho de treinamento distribuído
Com a pré-compilação concluída, o TorchX é usado para iniciar um trabalho de treinamento distribuído de 64 trabalhadores em duas instâncias trn1.32xlarge, com 32 trabalhadores por instância. Usamos 32 trabalhadores por instância porque cada instância trn1.32xlarge contém 16 aceleradores Trainium, com cada acelerador fornecendo 2 NeuronCores. Cada NeuronCore pode ser acessado como um único Dispositivo PyTorch XLA no roteiro de treinamento. Um exemplo de comando de inicialização do TorchX do tutorial se parece com o seguinte código:
Os vários argumentos de linha de comando no comando TorchX anterior são descritos em detalhes no tutorial. No entanto, os seguintes argumentos são mais importantes na configuração do trabalho de treinamento:
- -cfg fila=teste – Especifica a fila Volcano a ser usada para o trabalho de treinamento
- -cfg imagem_repo – Especifica o repositório ECR a ser usado para as imagens do contêiner TorchX
- –script_args – Especifica quaisquer argumentos que devem ser passados para o script de treinamento PyTorch
- –nnodes e –nproc_per_node – O número de instâncias e trabalhadores por instância a serem usados para o trabalho de treinamento
- -roteiro – O nome do script de treinamento PyTorch a ser iniciado no contêiner de treinamento
- -Imagem – O caminho para a imagem do contêiner de treinamento no Amazon ECR
- –bf16 – Habilitar ou não o tipo de dados BF16
Monitore o trabalho de treinamento
Após o lançamento do trabalho de treinamento, há várias maneiras pelas quais o trabalho pode ser monitorado. O tutorial mostra como monitorar métricas básicas de script de treinamento na linha de comando usando kubectl
, como monitorar visualmente o progresso do script de treinamento no TensorBoard (veja a captura de tela a seguir) e como monitorar a utilização do acelerador Trainium usando o neuron-top
ferramenta do Neuron SDK.
Limpe ou reutilize o ambiente
Quando o trabalho de treinamento estiver concluído, o cluster poderá ser reutilizado ou reconfigurado para trabalhos de treinamento adicionais. Por exemplo, o grupo de nós EKS pode ser ampliado rapidamente usando o eksctl
para dar suporte a trabalhos de treinamento que requerem instâncias Trn1 adicionais. Da mesma forma, os comandos de inicialização Dockerfile e TorchX fornecidos podem ser facilmente modificados para oferecer suporte a modelos adicionais de aprendizado profundo e distribuição de topologias de treinamento.
Se o cluster não for mais necessário, o tutorial também inclui todas as etapas necessárias para remover a infraestrutura EKS e os recursos relacionados.
Conclusão
Nesta postagem, exploramos como as instâncias Trn1 e o Amazon EKS fornecem uma plataforma gerenciada para treinamento distribuído de alto desempenho, econômico e massivamente escalável de modelos de aprendizado profundo. Também compartilhamos um tutorial abrangente mostrando como executar um trabalho de treinamento distribuído de várias instâncias do mundo real no Amazon EKS usando instâncias Trn1 e destacamos várias das principais etapas e componentes da solução. O conteúdo deste tutorial pode ser facilmente adaptado para outros modelos e cargas de trabalho e fornece uma solução básica para treinamento distribuído de modelos de aprendizado profundo na AWS.
Para saber mais sobre como começar a usar instâncias Trn1 com tecnologia Trainium, consulte o documentação do neurônio.
Sobre os autores
Scott Perry é arquiteto de soluções da equipe do acelerador Annapurna ML na AWS. Com sede no Canadá, ele ajuda os clientes a implantar e otimizar cargas de trabalho de treinamento e inferência de aprendizagem profunda usando o AWS Inferentia e o AWS Trainium. Seus interesses incluem grandes modelos de linguagem, aprendizado de reforço profundo, IoT e genômica.
Lorea Arrizabalaga é uma arquiteta de soluções alinhada ao setor público do Reino Unido, onde ajuda os clientes a projetar soluções de ML com o Amazon SageMaker. Ela também faz parte da comunidade de campo técnico dedicada à aceleração de hardware e ajuda com testes e comparações de cargas de trabalho AWS Inferentia e AWS Trainium.
- 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-distributed-training-with-aws-trainium-and-amazon-eks/
- 1
- 100
- 11
- 2022
- 2023
- 7
- a
- Capaz
- Sobre
- acelerador
- aceleradores
- Acesso
- acessadas
- alcançado
- em
- ativamente
- Adicional
- avançar
- avançado
- Vantagem
- alinhado
- Todos os Produtos
- já
- Apesar
- Amazon
- Amazon EC2
- Amazon Sage Maker
- e
- Anunciar
- anunciou
- Anúncio
- aplicado
- apropriado
- arquitetura
- argumentos
- aspectos
- associado
- anexar
- atributos
- disponibilidade
- disponível
- AWS
- Formação da Nuvem AWS
- Inferência da AWS
- Largura de Banda
- baseado
- basic
- Porque
- antes
- aferimento
- Benefícios
- bilhão
- Florescer
- amplo
- construir
- Esconderijo
- chamado
- Localização: Canadá
- Chips
- Escolha
- escolhido
- Na nuvem
- Agrupar
- código
- Collective
- vinda
- Em Breve
- comum
- comunidade
- completar
- realização
- componentes
- compreensivo
- Computar
- Configuração
- conectado
- Consistindo
- Recipiente
- Containers
- contém
- conteúdo
- ao controle
- Conveniente
- núcleo
- relação custo-benefício
- crio
- criado
- Criar
- criação
- CSI
- Atualmente
- Clientes
- dados,
- DDP
- dedicado
- profundo
- deep learning
- Padrão
- implantar
- implantado
- descrito
- Design
- detalhe
- detalhado
- desenvolvimentos
- dispositivo
- Dispositivos/Instrumentos
- diretamente
- descoberta
- distribuído
- treinamento distribuído
- distribuindo
- download
- motorista
- durante
- cada
- Mais cedo
- Cedo
- facilidade de utilização
- facilmente
- ou
- permitir
- end-to-end
- Ponto final
- garante
- Empreendimento
- Mesmo
- exemplo
- animado
- excluindo
- existe
- Explorado
- extrato
- tecidos
- Familiaridade
- campo
- Envie o
- Primeiro nome
- Flexibilidade
- Foco
- seguir
- seguinte
- Quadro
- da
- cheio
- funcionalidade
- Geral
- genómica
- ter
- GitHub
- dado
- gráfico
- gráficos
- Grupo
- Guias
- Alças
- Hardware
- Coração
- útil
- ajuda
- Alta
- alta performance
- Destaque
- altamente
- hospedeiro
- Como funciona o dobrador de carta de canal
- Como Negociar
- Contudo
- HTML
- HTTPS
- Centenas
- ID
- identificado
- imagem
- imagens
- implícita
- importante
- in
- incluir
- incluído
- inclui
- Crescimento
- cada vez mais
- Infraestrutura
- instalar
- instalado
- instância
- integração
- interesses
- iot
- IT
- Trabalho
- Empregos
- Chave
- Tipo
- língua
- grande
- em grande escala
- Maior
- Atrasado
- lançamento
- lançado
- de lançamento
- camada
- APRENDER
- aprendizagem
- levou
- bibliotecas
- Line
- linux
- carregar
- mais
- olhar
- OLHARES
- máquina
- aprendizado de máquina
- a Principal
- gerenciados
- de grupos
- massivamente
- Memória
- metadados
- Métrica
- ML
- modelos
- modificada
- Módulo
- Monitore
- monitorados
- monitoração
- monitores
- mês
- mais
- a maioria
- múltiplo
- nome
- você merece...
- rede
- networking
- rede neural
- Próximo
- nó
- nós
- número
- oferecido
- oferecendo treinamento para distância
- oficial
- ONE
- opera
- Operações
- Otimize
- otimizado
- orquestração
- ordem
- Outros
- delineado
- contornos
- global
- Visão geral
- parâmetros
- parte
- passou
- caminho
- perscrutar
- atuação
- fase
- Lugar
- plataforma
- platão
- Inteligência de Dados Platão
- PlatãoData
- plug-in
- plugins
- pontos
- Publique
- alimentado
- poderoso
- pré-requisitos
- processo
- Progresso
- fornecer
- fornecido
- fornece
- fornecendo
- público
- Publishing
- empurrado
- pytorch
- rapidamente
- acaso
- mundo real
- referências
- região
- regiões
- relacionado
- remover
- repositório
- requerer
- requeridos
- exige
- Recursos
- rever
- Execute
- corrida
- sábio
- mesmo
- AMPLIAR
- escalável
- Escalas
- dimensionamento
- Sdk
- setor
- serviço
- Serviços
- conjunto
- vários
- compartilhado
- concha
- rede de apoio social
- mostrando
- Shows
- periodo
- Similarmente
- tamanhos
- menor
- So
- Software
- solução
- Soluções
- alguns
- especificada
- pilha
- autônoma
- padrão
- começado
- inicialização
- Passo
- Passos
- Ainda
- armazenamento
- loja
- tal
- ajuda
- Suportado
- suportes
- Sincronização
- .
- mesa
- tomar
- Profissionais
- Dados Técnicos:
- modelo
- temporário
- ensaio
- A
- do Reino Unido
- deles
- milhares
- Através da
- todo
- tempo
- para
- ferramenta
- ferramentas
- Training
- verdadeiro
- tutorial
- Uk
- único
- Universal
- usar
- Utilizador
- vário
- versão
- via
- volume
- maneiras
- semanas
- se
- qual
- enquanto
- precisarão
- dentro
- trabalhador
- trabalhadores
- seria
- yaml
- Vocês
- investimentos
- zefirnet
- zonas