Está a ter dificuldades com a IA ou com o desenvolvimento full-stack? Os nossos especialistas estão aqui para o orientar: aconselhamento personalizado, integração técnica e muito mais. Entre em contacto com [email protected].

Implementar GPT-NeoX 20B em produção e um foco em velocidade profunda

Implementar o GPT-NeoX 20B na produção é um desafio e aprendemo-lo da maneira mais difícil na NLP Cloud... Neste artigo estamos a contar-lhe mais sobre vários truques relacionados com a utilização do GPT-NeoX 20B, e especialmente como lidar com o DeepSpeed em produção.

GPT-NeoX

GPT-NeoX 20B

GPT-NeoX 20B é o maior modelo de processamento de linguagem natural de código aberto a partir desta escrita.

Foi lançado pela EleutherAI há 2 semanas. Recebeu formação sobre 20 mil milhões de parâmetros, após um ano de trabalho árduo e cheio de desafios. Uma das suas principais dificuldades parecia ser a capacidade de criar uma arquitectura paralela adequada para que o modelo pudesse ser eficientemente treinado em múltiplas GPUs.

O seu modelo anterior, GPT-J, foi treinado em TPUs Google e foi concebido para ser utilizado em TPUs. A arquitectura interior do GPT-NeoX 20B é radicalmente diferente e foi concebida para ser utilizada em GPUs. A ideia é que deveria ser o primeiro de uma série de modelos ainda maiores (o objectivo aqui é apanhar o GPT-3).

GPT-NeoX 20 é um modelo de geração de texto, o que significa que pode escrever texto para si e, na verdade, conseguir quase todos os casos de utilização de Processamento de Linguagem Natural com uma grande precisão: geração de post de blogue, chatbots, classificação de texto, análise de sentimentos, extracção de palavras-chave, geração de código, extracção de entidades, classificação de intenções, resposta a perguntas, e muito mais...

Sem dúvida que muitos investigadores e empresas irão alavancar este novo modelo e obter grandes resultados. Mas há um desafio: como implementar o GPT-NeoX 20B?

Requisitos de Hardware

O primeiro desafio que se enfrenta quando se tenta implantar o GPT-NeoX 20B na produção, é o hardware avançado que requer.

Ainda era possível utilizar o GPT-J em hardware de consumo, mesmo que fosse muito caro. Por exemplo, era possível implementá-lo num CPU muito bom (mesmo que o resultado fosse dolorosamente lento) ou numa GPU de jogo avançada como a NVIDIA RTX 3090. Mas o GPT-NeoX 20B é tão grande que já não é possível.

Basicamente o GPT-NeoX requer pelo menos 42 GB de VRAM e 40 GB de espaço em disco (e sim estamos a falar da versão fp16 magra aqui). Poucos GPUs correspondem a estes requisitos. As principais são as NVIDIA A100, A40, e RTX A6000.

Não só estes GPUs são muito caros, como também é difícil de conseguir um deles hoje em dia, devido à escassez global de semicondutores.

A melhor solução aqui é optar por uma arquitectura multi-GPU.

Multi-GPU com Deepspeed

Se não conseguir encaixar o seu modelo num único GPU, pode tentar dividi-lo em vários GPUs.

É uma opção interessante por 2 razões. Primeiro, a escalada horizontal de uma infra-estrutura é muitas vezes mais barata do que a escalada vertical. É verdade para os servidores e é verdade para as GPUs também. Em segundo lugar, é mais fácil de pôr a mão em várias GPUs pequenas como a NVIDIA Tesla T4 do que GPUs maiores como a NVIDIA A40.

Infelizmente, a divisão de um modelo de aprendizagem de máquinas em várias GPUs é um desafio técnico. Hugging Face fez um grande artigo sobre o paralelismo de modelos e as escolhas que tem. Lê-o aqui. Mas felizmente, a EleutherAI concebeu o GPT-NeoX 20B para que seja facilmente paralelizado em várias GPUs, quer seja para treino ou para inferência.

A arquitectura GPT-NeoX é baseada na Deepspeed. Deepspeed é uma estrutura da Microsoft que foi originalmente concebida para paralelizar treinamentos entre várias GPUs, e é cada vez mais utilizada para inferência também. EleutherAI fez todo o trabalho árduo, por isso a paralelização GPT-NeoX é tão simples como a alteração de um número num ficheiro de configuração.

Paralelismo GPT-NeoX
Extract from the GPT-NeoX docs about parallelism

No entanto, a utilização da Deepspeed em produção para inferência online através de um API é difícil... A Deepspeed não foi concebida para ser facilmente integrada em servidores web. Na NLP Cloud, aprendemos da forma mais difícil mas depois de algum trabalho árduo conseguimos finalmente arranjar uma forma eficiente de conseguir que o Deepspeed e o GPT-NeoX trabalhassem por detrás da nossa API.

Truques de utilização

Portanto, vamos supor que conseguiu fornecer o hardware adequado e implementar correctamente o GPT-NeoX 20B com a Deepspeed. Há agora um par de advertências que deve estar ciente.

Primeiro, em comparação com o GPT-J, os parâmetros (top k, top p, e temperatura) não têm os mesmos efeitos sobre o modelo. Portanto, se conseguiu encontrar uma boa configuração para GPT-J, não a tome como certa: terá de fazer novos testes com GPT-NeoX.

Por último, mesmo que o tamanho de entrada possa ir até 2048 fichas, exigirá mais memória do que os 42GB de base acima mencionados...

Inferência por Lote?

Os modelos GPT são bastante lentos, e o GPT-NeoX 20B não é excepção. Assim, a fim de melhorar o rendimento da sua aplicação, poderá querer trabalhar numa solução de inferência de lote.

De momento ainda não encontrámos uma boa solução para isso na NLP Cloud.

O código GPT-NeoX é feito para que se possa fazer várias inferências ao mesmo tempo dentro de um único pedido. Mas, nos nossos testes, o tempo de resposta cresceu linearmente com o número de inferências, o que derrota o propósito da inferência por lotes...

Conclusão

O GPT-NeoX 20B é definitivamente difícil de implantar na produção. A qualidade da geração de texto é espantosa, mas poucos terão a capacidade de realmente instalar este modelo.

Mais do que nunca, parece que a solução será recorrer a um serviço Cloud como o NLP Cloud para utilizar este modelo.

Se tiver feedbacks sobre este artigo, não hesite em contactar-nos, será óptimo ouvir a sua opinião sobre isto!

Julien Salinas
CTO em NLP Cloud