Simple Science

Ciência de ponta explicada de forma simples

# Informática# Arquitetura de Hardware# Aprendizagem de máquinas

Avanços em Treinamento Rápido para Modelos de Linguagem

Novos métodos melhoram a velocidade e a eficiência do treino para grandes modelos de linguagem.

― 13 min ler


Treinamento AceleradoTreinamento Aceleradopara Modelos de Linguagemlinguagem.eficiência no treinamento de modelos deTécnicas inovadoras aumentam a
Índice

Nos últimos tempos, os grandes modelos de linguagem (LLMs) deram um baita salto na inteligência artificial. Esses modelos têm muitos parâmetros, o que significa que precisam de muita memória. Por causa disso, treinar esses modelos geralmente exige várias GPUs poderosas. Uma solução comum é usar um método chamado treinamento com armazenamento offloaded. Isso significa usar tanto a memória do computador quanto o armazenamento como memória extra pra ajudar no treinamento. Mas, isso pode criar problemas. Os dispositivos de armazenamento geralmente têm uma largura de banda muito mais lenta do que a memória das GPUs. Como resultado, usar esses dispositivos pode fazer o treinamento demorar mais.

Resolvendo o Problema da Largura de Banda do Armazenamento

Nossa abordagem busca resolver a lentidão da velocidade de armazenamento no treinamento com armazenamento offloaded. Usamos dispositivos especiais chamados dispositivos de processamento near-storage. A parte principal da nossa solução é um método que atualiza parâmetros usando aceleradores personalizados que são posicionados perto do armazenamento. Ao mover essas atualizações para o lado do armazenamento, conseguimos reduzir bastante a quantidade de dados que precisam ser enviados de um lado pro outro.

Além disso, criamos uma forma eficiente de gerenciar transferências de dados. Essa nova estrutura permite sobrepor transferências de dados enquanto usamos uma quantidade fixa de memória reciclando o buffer do dispositivo. Também desenhamos um método que ajuda a reduzir o tamanho dos dados que estão sendo enviados de um lado pro outro, o que melhora a capacidade do sistema de lidar com mais tarefas. Quando aumentamos o número de dispositivos de processamento near-storage, o tráfego de escrita pode se tornar um gargalo. Pra resolver isso, compactamos os dados na GPU e depois os descompactamos nos dispositivos especiais. Isso ajuda a acelerar as coisas, diminuindo a quantidade de tráfego.

No fim das contas, nossa solução traz melhorias significativas em velocidade em comparação com métodos tradicionais.

O Cenário Atual dos Modelos de Linguagem

Atualmente, os modelos baseados em transformer são a tecnologia líder em processamento de linguagem natural. Eles lidam de forma eficaz com problemas que modelos anteriores, como redes neurais recorrentes (RNNs), enfrentavam. Esses modelos transformer costumam ter muitos parâmetros, o que os torna menos propensos a se ajustar demais aos dados de treinamento. Nos últimos anos, a tendência tem sido aumentar o tamanho desses modelos, resultando em um grupo de grandes modelos de linguagem.

Conforme esses modelos ficam maiores, o principal desafio se torna a capacidade da memória da GPU. Em muitos casos, várias GPUs são necessárias pra segurar os dados de treinamento, mesmo quando esse poder não é necessário. Uma maneira promissora de lidar com esse problema é através do treinamento com armazenamento offloaded.

No treinamento de modelos de linguagem, os maiores usuários de memória são os Estados do Otimizador e os Gradientes. Esses são seguidos por parâmetros do modelo e ativações. No treinamento com armazenamento offloaded, estados do otimizador e gradientes são mantidos no armazenamento, enquanto ativações e parâmetros são mantidos na memória. Essa configuração ajuda a superar limitações baseadas em tamanhos de memória tradicionais, permitindo um treinamento de modelos maiores em uma única máquina.

No entanto, usar dispositivos de armazenamento grandes pode levar a problemas significativos de largura de banda, já que SSDs normalmente oferecem apenas alguns gigabytes por segundo. Pesquisas mostram que mais de 88% do tempo total de treinamento é gasto transferindo dados de e para o armazenamento.

A Necessidade de Soluções Aprimoradas

Muita gente pode pensar que combinar vários dispositivos de armazenamento ajudaria a aliviar problemas de largura de banda. Infelizmente, essa abordagem tem suas próprias limitações devido ao número finito de trilhas PCIe disponíveis no processador host. Essas trilhas são cruciais e precisam ser compartilhadas com GPUs, FPGAs e outros componentes.

Pra lidar com esses problemas, focamos em usar dispositivos de armazenamento computacional (CSDs). Esses dispositivos estão disponíveis comercialmente há um tempo e têm como objetivo reduzir a carga de trabalho no host, realizando tarefas computacionais perto de onde os dados estão armazenados. Aumentar o número desses dispositivos pode aumentar linearmente a largura de banda disponível.

Usando CSDs, propomos um sistema de treinamento rápido para modelos de linguagem. O recurso chave da nossa solução é transferir as tarefas de atualização pros aceleradores near-storage. Descobrimos que os estados do otimizador são necessários apenas durante a fase de atualização, que consome uma grande quantidade de largura de banda de armazenamento. Ao mover esse processo para aceleradores especiais dentro dos CSDs, conseguimos reduzir significativamente as necessidades de Transferência de Dados.

Desafios e Soluções

A implementação real da nossa solução vem com vários desafios. Um problema é a transferência de dados interna dentro dos CSDs, que pode afetar negativamente o desempenho. Nós enfrentamos isso com uma nova otimização que permite máxima transferência de dados através de uma melhor gestão dos buffers de memória.

Além disso, à medida que escalamos o sistema com múltiplos CSDs, o canal compartilhado para escrever dados pode se tornar um gargalo. Pra resolver isso, usamos uma técnica pra comprimir gradientes na GPU e descompactá-los nos aceleradores CSD. Isso corta a quantidade de tráfego necessária pra treinamento, mantendo a precisão do modelo.

O fato de que nosso sistema integra suavemente com o PyTorch e funciona em tempo real torna ele uma solução pronta pra uso pra profissionais.

O Papel dos Modelos Transformer

Hoje, os modelos baseados em transformer estão liderando o campo do processamento de linguagem natural. Eles lidam eficientemente com o problema de desaparecimento de gradiente que afetava outros tipos de redes neurais. Esses modelos costumam precisar de um grande número de parâmetros de treinamento, mas não apresentam frequentemente problemas de ajuste excessivo.

Conforme esses modelos transformer ficam maiores, a capacidade da memória da GPU se torna um desafio chave. A situação muitas vezes requer o uso de múltiplas GPUs pra acomodar o modelo, mesmo em tarefas como ajuste fino. Uma maneira popular de abordar esse problema em ambientes com memória de GPU limitada é através do treinamento com armazenamento offloaded.

Durante o treinamento, o modelo geralmente consome mais espaço de memória pra estados do otimizador e gradientes, seguido por parâmetros e ativações. A forma mais comum de implementar o treinamento com armazenamento offloaded é salvar os estados do otimizador e gradientes no armazenamento, enquanto mantém ativações e dados de parâmetros na memória do host.

Dado que as capacidades geralmente diferem amplamente - por exemplo, a memória típica da GPU pode ser em torno de 80GB, enquanto a memória do host pode ser 2TB ou até 100TB para dispositivos de armazenamento - eles efetivamente aumentam as capacidades da memória da GPU. No entanto, o uso dessas opções maiores de armazenamento introduz sérios desafios de largura de banda, já que SSDs fornecem apenas alguns GB/s de largura de banda.

Nossa pesquisa indica que transferir dados de e para o armazenamento pode ocupar mais de 88% do tempo total de treinamento.

Visão Geral do Sistema Proposto

Pra enfrentar esses desafios, usamos dispositivos de armazenamento computacional. CSDs incluem motores computacionais embutidos que ajudam a descarregar o processamento do host, aproveitando a largura de banda interna de armazenamento. Quando adicionamos mais CSDs, a largura de banda interna disponível aumenta de forma linear.

Nosso sistema proposto, que se baseia nesses CSDs, foca em eliminar o gargalo causado pelo acesso a armazenamento convencional. A estratégia principal é deslocar a tarefa de atualizações pros aceleradores near-storage. Descobrimos que os estados do otimizador são utilizados principalmente durante a fase de atualização, que consome cerca de 75% da largura de banda total de armazenamento.

Ao mover essa tarefa de atualização pros aceleradores personalizados dentro dos CSDs, a necessidade geral de transferência de dados pode ser reduzida em até 75%.

No entanto, implementar isso em um sistema real apresenta alguns problemas. Por um lado, a transferência de dados interna dentro dos CSD pode afetar o desempenho geral. Pra superar isso, otimizamos a transferência de dados através da pré-alocação de buffers e técnicas de sobreposição de troca.

Esse esforço nos permite maximizar a transferência enquanto lidamos com as limitações de memória. Também incluímos a compressão de gradientes assistida por CSD, que aborda o desafio de escrever dados em canais compartilhados ao escalar o sistema. Ao comprimir gradientes nas GPUs e descompactá-los nos aceleradores, conseguimos reduzir significativamente a transferência de dados necessária sem comprometer a precisão final do modelo.

Manutenção Eficiente de Dados

Nosso sistema utiliza uma estrutura de manipulador de transferência de dados eficiente, que é crucial para otimizar o uso da largura de banda de armazenamento. Ao empregar esse manipulador, conseguimos ocultar a latência dos CSDs, melhorando assim o desempenho.

À medida que os modelos escalam, precisamos gerenciar as cargas de trabalho de forma eficiente entre vários CSDs. Ao achatar os parâmetros do modelo, conseguimos distribuir a carga de trabalho de maneira uniforme entre os CSDs disponíveis. Cada CSD então atualiza seus parâmetros designados. Essa abordagem torna nosso sistema flexível e fácil de implementar, independentemente da arquitetura do modelo.

Design do Acelerador

O design do nosso acelerador emprega uma arquitetura que suporta tanto o atualizador para parâmetros do modelo quanto o descompactador para compressão de gradientes. O framework geral é flexível o suficiente pra acomodar vários algoritmos de otimizador, focando principalmente em opções populares como o otimizador Adam.

Para o atualizador, utilizamos uma variedade de elementos de processamento que trabalham em paralelo pra lidar com múltiplos parâmetros ao mesmo tempo. Isso nos permite executar os cálculos necessários sem atrasos.

O descompactador usa o método de compressão baseado em magnitude, conhecido como Top-K. Essa técnica seleciona os gradientes mais influentes enquanto substitui os menos importantes por zeros, permitindo um manuseio eficiente dos dados.

Uma vez que os gradientes são processados, eles podem ser passados pro atualizador pra uma atualização eficiente dos parâmetros. Esse sistema integrado garante que mantenhamos um alto desempenho durante todo o processo de treinamento.

Integração Amigável ao Usuário

A implementação desse sistema é projetada pra se integrar facilmente com frameworks existentes, como o DeepSpeed. Ao torná-lo chamável, os usuários podem se beneficiar de um desempenho melhorado sem precisar reescrever seu código. Essa integração suave permite que os usuários aproveitem as capacidades avançadas enquanto focam em suas necessidades específicas.

Fornecemos templates pra que os usuários personalizem sua lógica, além de ferramentas pra análise de desempenho e verificação da correção de suas implementações. No geral, o sistema é flexível e amigável, permitindo uma ampla aplicabilidade em vários modelos e tarefas.

Avaliação de Desempenho

Na nossa avaliação, examinamos o desempenho da nossa configuração em comparação com métodos tradicionais de treinamento com armazenamento offloaded. Usamos vários modelos de linguagem diferentes e realizamos uma série de testes pra medir as melhorias nos tempos de treinamento.

Os resultados mostraram que nossa solução conseguiu um ganho de velocidade significativo, tornando-se uma opção atraente pra quem trabalha com grandes modelos de linguagem. À medida que o número de dispositivos de armazenamento computacional aumentava, os benefícios de desempenho se tornavam ainda mais pronunciados.

Por exemplo, ao testar com um tamanho específico de modelo, nosso sistema conseguiu um aumento de velocidade variando de 1,22 a 2,11 vezes em relação à linha de base, dependendo do número de SSDs em uso.

Escalabilidade e Flexibilidade

Uma das características marcantes do nosso sistema é sua escalabilidade. À medida que os tamanhos dos modelos aumentam, conseguimos manter melhorias de velocidade consistentes em comparação com métodos tradicionais. Isso torna nossa abordagem ideal pra organizações que buscam ultrapassar os limites dos tamanhos de seus modelos enquanto mantêm os tempos de treinamento gerenciáveis.

Além disso, nosso framework não é limitado a um único tipo de modelo. Ele pode trabalhar efetivamente com várias arquiteturas, como demonstrado em testes com modelos como BLOOM e ViT. Isso demonstra a versatilidade da nossa solução.

Direções Futuras

Olhando pra frente, há muito potencial pra mais melhorias. Podemos explorar técnicas de otimização adicionais ou até mesmo nos aprofundar em outras aplicações que poderiam beneficiar nosso sistema, como métodos de compressão de modelos, como quantização ou poda.

Essas abordagens são conhecidas por requerer um ajuste fino, tornando-as uma ótima opção pra nosso framework. No entanto, elas também introduzem novas complexidades que precisam ser abordadas pra aproveitar totalmente os benefícios.

À medida que a tecnologia continua a progredir, nosso sistema está pronto pra se adaptar a novos desafios e oportunidades no campo de aprendizado de máquina, oferecendo soluções eficazes para treinar grandes modelos de linguagem e muito mais.

Ao melhorar a eficiência de armazenamento e processamento, ajudamos a abrir caminho pra futuros avanços em inteligência artificial.

Conclusão

O cenário dos grandes modelos de linguagem está avançando rapidamente, mas esse crescimento vem com desafios relacionados ao armazenamento e memória. Nosso sistema proposto, que aproveita dispositivos de armazenamento computacional e técnicas de manuseio de dados eficientes, aborda esses problemas diretamente.

Ao mover processos críticos mais perto do armazenamento e otimizar métodos de transferência de dados, não apenas melhoramos as velocidades de treinamento, mas também mantemos alta precisão nos modelos. Essa solução pronta pra uso é um passo significativo pra quem opera neste espaço, oferecendo uma abordagem flexível e escalável pra gerenciar o treinamento de grandes modelos de linguagem.

No geral, nosso trabalho representa um desenvolvimento crucial no reino da inteligência artificial, destacando a importância da inovação em tecnologias de armazenamento e processamento à medida que a demanda por modelos cada vez maiores continua a crescer.

Fonte original

Título: Smart-Infinity: Fast Large Language Model Training using Near-Storage Processing on a Real System

Resumo: The recent huge advance of Large Language Models (LLMs) is mainly driven by the increase in the number of parameters. This has led to substantial memory capacity requirements, necessitating the use of dozens of GPUs just to meet the capacity. One popular solution to this is storage-offloaded training, which uses host memory and storage as an extended memory hierarchy. However, this obviously comes at the cost of storage bandwidth bottleneck because storage devices have orders of magnitude lower bandwidth compared to that of GPU device memories. Our work, Smart-Infinity, addresses the storage bandwidth bottleneck of storage-offloaded LLM training using near-storage processing devices on a real system. The main component of Smart-Infinity is SmartUpdate, which performs parameter updates on custom near-storage accelerators. We identify that moving parameter updates to the storage side removes most of the storage traffic. In addition, we propose an efficient data transfer handler structure to address the system integration issues for Smart-Infinity. The handler allows overlapping data transfers with fixed memory consumption by reusing the device buffer. Lastly, we propose accelerator-assisted gradient compression/decompression to enhance the scalability of Smart-Infinity. When scaling to multiple near-storage processing devices, the write traffic on the shared channel becomes the bottleneck. To alleviate this, we compress the gradients on the GPU and decompress them on the accelerators. It provides further acceleration from reduced traffic. As a result, Smart-Infinity achieves a significant speedup compared to the baseline. Notably, Smart-Infinity is a ready-to-use approach that is fully integrated into PyTorch on a real system. We will open-source Smart-Infinity to facilitate its use.

Autores: Hongsun Jang, Jaeyong Song, Jaewon Jung, Jaeyoung Park, Youngsok Kim, Jinho Lee

Última atualização: 2024-03-11 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2403.06664

Fonte PDF: https://arxiv.org/pdf/2403.06664

Licença: https://creativecommons.org/licenses/by-nc-sa/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Mais de autores

Artigos semelhantes