O modelo de IA generativa LLaMA 3 foi lançado pela Meta há alguns dias e já mostra capacidades impressionantes.
Saiba como instalar e implantar o LLaMA 3 na produção com este guia passo a passo. Desde os requisitos de hardware até à implementação e dimensionamento, cobrimos tudo o que precisa de saber para uma implementação sem problemas.
A Meta apresentou as primeiras versões do seu modelo de IA de código aberto Llama 3, que pode ser utilizado para a criação de texto, programação ou chatbots. Além disso, a Meta anunciou os seus planos para incorporar o LLaMA 3 nas suas principais aplicações de redes sociais. Este movimento tem como objetivo competir com outros assistentes de IA, como o ChatGPT da OpenAI, o Copilot da Microsoft e o Gemini da Google.
À semelhança do Llama 2, o Llama 3 destaca-se como um modelo de linguagem de grande dimensão de acesso livre com pesos abertos, oferecido por uma empresa líder em IA (embora não se qualifique como "fonte aberta" no sentido convencional).
Atualmente, o Llama 3 pode ser descarregado gratuitamente do sítio Web da Meta em dois tamanhos de parâmetros diferentes: 8 mil milhões (8B) e 70 mil milhões (70B). Os utilizadores podem inscrever-se para aceder a estas versões. O Llama 3 é oferecido em duas variantes: pré-treinado, que é um modelo básico para a previsão do próximo token, e ajustado por instruções, que é ajustado para aderir aos comandos do utilizador. Ambas as versões têm um limite de contexto de 8.192 tokens.
Em uma entrevista com Dwarkesh Patel, Mark Zuckerberg, o CEO da Meta, mencionou que eles treinaram dois modelos personalizados usando um cluster de 24.000 GPUs. O modelo 70B foi treinado com aproximadamente 15 triliões de tokens de dados e nunca atingiu um ponto de saturação ou um limite para as suas capacidades. Posteriormente, a Meta decidiu concentrar-se na formação de outros modelos. A empresa também revelou que está atualmente a trabalhar numa versão de 400B parâmetros do Llama 3, que especialistas como Jim Fan da Nvidia acreditam que poderá ter um desempenho semelhante ao GPT-4 Turbo, Claude 3 Opus e Gemini Ultra em benchmarks como MMLU, GPQA, HumanEval e MATH.
De acordo com a Meta, a Llama 3 foi avaliada utilizando vários testes de referência, incluindo o MMLU (conhecimentos ao nível da licenciatura), o GSM-8K (matemática do ensino básico), o HumanEval (codificação), o GPQA (perguntas ao nível da licenciatura) e o MATH (problemas de matemática). Estes testes de referência demonstram que o modelo 8B supera os modelos de pesos abertos, como o Gemma 7B e o Mistral 7B Instruct da Google, e o modelo 70B é competitivo em relação ao Gemini Pro 1.5 e ao Claude 3 Sonnet.
O Meta informa que o modelo Llama 3 foi melhorado com a capacidade de compreender a codificação, à semelhança do Llama 2, e, pela primeira vez, foi treinado utilizando imagens e texto. No entanto, a sua produção atual está limitada ao texto.
Benchmarks LLaMA 3
Como muitas organizações usam o AWS para suas cargas de trabalho de produção, vamos ver como implantar o LLaMA 3 no AWS EC2.
Existem vários obstáculos quando se trata de implementar LLMs, tais como o consumo de VRAM (memória GPU), a velocidade de inferência, o rendimento e a utilização do espaço em disco. Neste cenário, temos de garantir a atribuição de uma instância de GPU no AWS EC2 com capacidade VRAM suficiente para suportar a execução dos nossos modelos.
O LLaMA 3 8B requer cerca de 16 GB de espaço em disco e 20 GB de VRAM (memória GPU) em FP16. É claro que poderia implementar o LLaMA 3 numa CPU, mas a latência seria demasiado elevada para um caso de utilização em produção real. Quanto ao LLaMA 3 70B, requer cerca de 140 GB de espaço em disco e 160 GB de VRAM no FP16.
Conseguir 20 GB de VRAM para o LLaMA 3 8B é bastante fácil. Recomendo que provisione uma GPU NVIDIA A10: esta GPU vem com 24 GB de VRAM e é uma GPU rápida baseada na plataforma Ampere. No AWS EC2, deve selecionar uma instância G5 para aprovisionar um GPU A10. Uma instância g5.xlarge será suficiente.
No entanto, a implementação do modelo LLaMA 3 70B é muito mais difícil. Nenhuma GPU tem VRAM suficiente para este modelo, pelo que terá de fornecer uma instância multi-GPU. Se provisionar uma instância g5.48xlarge no AWS, obterá 192 GB de VRAM (8 x GPUs A10), o que será suficiente para o LLaMA 3 70B.
Numa tal configuração, pode esperar as seguintes latências (tempos de resposta): 50 tokens gerados em 1 segundo para o LLaMA 3 8B, e 50 tokens gerados em 5 segundos para o LLaMA 3 70B.
Para diminuir o custo de funcionamento destes modelos e aumentar a latência, pode investigar técnicas de quantização, mas tenha em atenção que tais optimizações podem prejudicar a precisão do seu modelo. A quantização está fora do escopo deste artigo.
Para provisionar essas instâncias, inicie sessão na sua consola AWS EC2 e inicie uma nova instância: seleccione a AMI de aprendizagem profunda NVIDIA, numa instância g5.xlarge ou g5.48xlarge. Não se esqueça de provisionar espaço em disco suficiente também.
vLLM é uma biblioteca projetada para inferência e implantação LLM rápida e fácil. A sua eficiência é atribuída a vários métodos sofisticados, incluindo atenção paginada para uma gestão óptima da chave de atenção e da memória de valores, processamento em tempo real de consultas recebidas em lotes e kernels CUDA personalizados.
Além disso, o vLLM oferece um alto grau de adaptabilidade, empregando computação distribuída (usando paralelismo tensorial), streaming em tempo real e compatibilidade com placas gráficas NVIDIA e AMD.
Especificamente, o vLLM ajudará muito na implantação do LLaMA 3, permitindo-nos utilizar instâncias do AWS EC2 equipadas com várias GPUs NVIDIA A10 compactas. Isso é vantajoso em relação ao uso de uma única GPU grande, como a NVIDIA A100 ou H100. Além disso, o vLLM melhorará significativamente a eficiência do nosso modelo através da inferência contínua em lote.
A configuração do vLLM é bastante simples. Vamos estabelecer uma conexão SSH com nossa instância AWS criada recentemente e instalar o vLLM usando o pip:
pip install vllm
Uma vez que planeamos efetuar inferência distribuída utilizando vLLM em 8 x GPUs A10, a instalação do Ray também é necessária:
pip install ray
Caso encontre problemas de compatibilidade durante a instalação, pode ser mais simples compilar o vLLM a partir da fonte ou utilizar a sua imagem Docker: consulte as instruções de instalação do vLLM.
Agora vamos criar o nosso script de inferência Python:
from vllm import LLM
# Use LLaMA 3 8B on 1 GPU
llm = LLM("meta-llama/Meta-Llama-3-8B-Instruct")
# Use LLaMA 3 70B on 8 GPUs
# llm = LLM("meta-llama/Meta-Llama-3-70B-Instruct", tensor_parallel_size=8)
print(llm.generate("What are the most popular quantization techniques for LLMs?"))
Pode executar o script acima. Se for a primeira vez que executa este script, terá de esperar que o modelo seja descarregado e carregado na GPU e, em seguida, receberá algo como isto:
The most popular quantization techniques for Large Language Models (LLMs) are:
1. Integer Quantization
2. Floating-Point Quantization
3. Mixed-Precision Training
4. Knowledge Distillation
É bastante simples de entender. Só precisa de ajustar o tensor_parallel_size de acordo com o número de GPUs que possui.
Agora, estamos a tentar iniciar um servidor de inferência adequado, capaz de gerir vários pedidos e executar inferências simultâneas. Para começar, iniciamos o servidor:
Para LLaMA 3 8B:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct
Para LLaMA 3 70B:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-70B-Instruct
--tensor-parallel-size 8
Deve demorar até 1 minuto para que o modelo seja carregado na GPU. Em seguida, pode iniciar um segundo terminal e começar a fazer alguns pedidos:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Meta-Llama-3-8B-Instruct",
"prompt": "What are the most popular quantization techniques for LLMs?"
}'
Agora você tem um servidor de inferência pronto para produção adequada que pode lidar com muitas solicitações paralelas graças ao agrupamento contínuo. Em algum momento, se o número de solicitações for muito alto, a GPU ficará sobrecarregada. Nesse caso, será necessário replicar o modelo em várias instâncias de GPU e balancear a carga das solicitações (mas isso está fora do escopo deste artigo).
Como pode ver, a implementação do LLaMA 3 na produção não requer nenhum código complexo graças a servidores de inferência como o vLLM.
No entanto, a disponibilização do hardware correto é um desafio. Em primeiro lugar, porque estas GPUs são muito dispendiosas, mas também devido à atual escassez global de GPUs. Se esta é a primeira vez que tenta aprovisionar um servidor GPU no AWS, poderá não ter permissão para criar um servidor GPU. Nesse caso, terá de contactar o suporte e explicar o seu caso de utilização. Neste artigo, utilizámos o AWS EC2, mas existem outros fornecedores disponíveis (Azure, GCP, OVH, Scaleway...).
Se não estiver interessado em implementar o LLaMA 3 por si próprio, sugerimos que utilize a nossa API NLP Cloud. Esta opção pode ser mais eficiente e potencialmente muito mais económica do que gerir a sua própria infraestrutura do LLaMA 3. Experimente o LLaMA 3 no NLP Cloud agora!
Se tiver dúvidas sobre o LLaMA 3 e a implementação da IA em geral, não hesite em perguntar-nos, é sempre um prazer ajudar!
Julien
CTO na NLP Cloud