Em 2023, muitos LLMs avançados de código aberto foram lançados, mas a implantação desses modelos de IA na produção ainda é um desafio técnico. Neste artigo, mostraremos como implantar alguns dos melhores LLMs no AWS EC2: LLaMA 3 70B, Mistral 7B e Mixtral 8x7B. Utilizaremos um motor de inferência avançado que suporta inferência em lote para maximizar o rendimento: vLLM.
A Meta criou e lançou a série LLaMA 3 de modelos de linguagem de grande dimensão (LLM), que inclui uma variedade de modelos de texto generativos que foram pré-treinados e afinados. Estes modelos variam em tamanho, com parâmetros que oscilam entre 7 mil milhões e 70 mil milhões.
A Mistral AI, uma empresa co-fundada por indivíduos com experiência na DeepMind e na Meta da Google, fez uma entrada significativa no mundo dos LLM com o Mistral 7B e depois com o Mixtral 8x7B.
O que torna o Mistral 7B particularmente impressionante é o seu desempenho. Em vários testes, ele superou o Llama2-13B e até excedeu o Llama1-34B em muitas métricas. Isso sugere que o Mistral 7B fornece recursos semelhantes ou melhores com uma sobrecarga computacional significativamente menor. Quando se trata de tarefas de codificação, o Mistral 7B compete com o CodeLlama 7B, e seu tamanho compacto de 13,4 GB permite que ele seja executado em máquinas padrão.
O Mixtral 8x7B é um modelo adaptável e rápido, adequado para várias aplicações. Funciona a uma velocidade que é seis vezes mais rápida e cumpre ou ultrapassa o desempenho do LLaMA 3 70B em todas as métricas de teste. Este modelo suporta várias linguagens e possui capacidades de codificação inerentes. Pode gerir sequências de até 32k tokens de comprimento.
Todos estes modelos são de código aberto e pode implementá-los no seu próprio servidor se conseguir ter acesso ao hardware correto. Vamos ver como implementá-los no AWS EC2 com vLLM.
O vLLM é uma biblioteca rápida e fácil de usar, adaptada para inferência e implantação eficientes de LLM. O desempenho do vLLM vem de várias técnicas avançadas, como atenção paginada para gerenciamento eficaz de chaves de atenção e valores de memória, processamento em lote de consultas recebidas em tempo real e kernels CUDA personalizados.
Além disso, o vLLM oferece uma boa flexibilidade através da inferência distribuída (através do paralelismo tensorial), do fluxo de saída e da adaptação às arquitecturas de GPU NVIDIA e AMD.
Em particular, o vLLM será muito útil para implantar LLaMA 3, Mistral e Mixtral, porque nos permitirá implantar nossos modelos em instâncias AWS EC2 incorporando várias GPUs menores (como a NVIDIA A10), em vez de uma única GPU grande (como a NVIDIA A100 ou H100). Além disso, o vLLM permitir-nos-á aumentar drasticamente o rendimento do nosso modelo graças à inferência em lote.
A implementação de LLMs é um desafio por muitas razões: Uso de VRAM (memória da GPU), velocidade de inferência, taxa de transferência, uso de espaço em disco... Aqui precisamos de ter a certeza de que iremos fornecer uma instância de GPU no AWS EC2 que tenha VRAM suficiente para executar os nossos modelos.
As instâncias G5 são uma boa escolha porque lhe dão acesso a GPUs NVIDIA A10 modernas e podem ser dimensionadas até 192 GB de VRAM (consulte a instância g5.48xlarge), mantendo-se bastante económicas.
O Mistral 7B é o modelo mais fácil de implementar, uma vez que requer cerca de 14 GB de VRAM. Segue-se o Mixtral 8x7B com 110GB e o LLaMA 3 70B com 140GB. Aqui consideramos apenas fp16, não fp32, e não estamos a aplicar qualquer tipo de quantização.
Consequentemente, o Mistral 7B pode ser executado na instância g5.xlarge, mas o Mixtral 8x7B e o LLaMA 3 70B exigem uma instância g5.48xlarge, portanto, vamos provisionar uma instância g5.48xlarge neste tutorial.
Para aprovisionar 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.48xlarge. Precisará de pelo menos 300 GB de espaço em disco.
A instalação do vLLM é bastante simples. Vamos abrir uma conexão SSH para nossa instância AWS recém-criada e instalar o vLLM com o pip:
pip install vllm
Como usaremos o vLLM para inferência distribuída em 8 x GPUs A10, precisamos instalar o Ray também:
pip install ray
Em caso de problemas de compatibilidade durante o processo de instalação, poderá ser mais fácil construir o vLLM a partir da fonte ou utilizar a sua imagem Docker: consulte a documentação de instalação para mais pormenores.
Pode agora criar o seu primeiro script de inferência. Crie um ficheiro Python que contenha o seguinte:
from vllm import LLM
# Replace the model name with the one you want to use:
# Mixtral simple: mistralai/Mixtral-8x7B-v0.1
# Mixtral instruct: mistralai/Mixtral-8x7B-Instruct-v0.1
# Mistral 7B simple: mistralai/Mistral-7B-v0.1
# Mistral 7B instruct: mistralai/Mistral-7B-Instruct-v0.1
# LLaMA 3 70B: meta-llama/Llama-2-70b-hf
llm = LLM("mistralai/Mixtral-8x7B-Instruct-v0.1", tensor_parallel_size=8)
print(llm.generate("What is batch inference?"))
Agora, execute o seu script com Python, que retorna algo como isto:
Batch inference is the process of applying machine learning models to a batch of data inputs all at once, rather than processing each input individually in real-time. In batch inference, a large set of inputs is collected and then processed together as a group, or "batch," by the machine learning model.
Batch inference is often used in scenarios where real-time predictions are not required, and where there is a large volume of data that needs to be processed. It can be more efficient and cost-effective than real-time inference, as it allows for the efficient use of computing resources and can reduce the latency associated with processing individual inputs.
Batch inference is commonly used in applications such as image recognition, natural language processing, and predictive analytics. For example, a company might use batch inference to analyze customer data and generate insights about purchasing patterns, or to analyze sensor data from industrial equipment to identify potential maintenance issues.
In summary, batch inference is the process of applying machine learning models to a batch of data inputs all at once, as an alternative to real-time inference. It is commonly used in scenarios where real-time predictions are not required and where there is a large volume of data that needs to be processed efficiently.
Como se pode ver, isto é canja. Tem de adaptar tensor_parallel_size dependendo do número de GPUs subjacentes que tem.
O cenário acima foi um caso isolado. Agora queremos iniciar um servidor de inferência adequado que possa lidar com vários pedidos e realizar inferência em lote em tempo real. Primeiro, inicie o servidor:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8
Após algum tempo, quando o modelo estiver corretamente carregado na VRAM, pode abrir uma segunda janela shell e fazer alguns pedidos:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"prompt": "What is batch inference?"
}'
O resultado será o mesmo que o anterior, mas desta vez pode efetuar vários pedidos ao mesmo tempo.
Aproveitar um servidor de inferência avançado como o vLLM é benéfico se quiser maximizar a utilização da sua GPU e implementar facilmente o seu modelo em várias GPUs em paralelo.
Como pode ver, é muito fácil implementar os modelos de IA de código aberto mais avançados, como LLaMA 3, Mistral e Mixtral, no seu próprio servidor, graças a esta técnica.
Neste tutorial, utilizámos o AWS EC2, mas poderíamos ter utilizado outros fornecedores, claro. O principal desafio será o custo das GPUs e também a sua disponibilidade.
Se não quiser implementar esses LLMs por si próprio, recomendamos que utilize a nossa API NLP Cloud. Poupar-lhe-á muito tempo e poderá até ser mais barato do que implementar os seus próprios LLMs. Se ainda não o fez, não hesite em experimentar!
Vincent
Advogado do programador na NLP Cloud