Serviço de Alta Vazão com vLLM no Ubuntu

laptop_mac macOS Sonoma Intermediate schedule 8 min read
Author by Alex Rivera • May 14, 2024

Se você está construindo uma aplicação com múltiplos usuários simultâneos, Ollama e LM Studio não serão suficientes. Você precisa de um motor de inferência de nível empresarial. Você precisa do vLLM.

Step 1 Introdução

vLLM é um motor de execução de LLM com alto throughput e eficiência de memória. Ele utiliza uma técnica chamada PagedAttention para gerenciar efetivamente as chaves e valores de atenção, proporcionando um throughput 2 a 4 vezes maior do que o HuggingFace Transformers padrão.

Este guia assume que você está executando um servidor Linux com pelo menos uma GPU NVIDIA de alto desempenho (por exemplo, RTX 3090, 4090 ou A100).

Step 2 Pré-requisitos

vLLM requer Python e CUDA. Recomendamos fortemente o uso de um ambiente virtual como conda ou o venv padrão.

Terminal
sudo apt update
sudo apt install python3-pip python3-venv

# Create and activate environment
python3 -m venv vllm-env
source vllm-env/bin/activate

Step 3 Instalando o vLLM

Instale o vLLM diretamente do PyPI. Isso irá automaticamente baixar o PyTorch e as dependências CUDA necessárias.

Terminal
pip install vllm

Step 4 Executando um Servidor Compatível com OpenAI

O vLLM suporta nativamente o protocolo da API OpenAI. Você pode servir um modelo diretamente pela linha de comando. Usaremos o Llama 3 8B como exemplo.

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-8B-Instruct   --dtype auto   --api-key your-secret-key   --port 8000

Parâmetros Principais Explicados: - --model: O ID do repositório no HuggingFace. O vLLM irá baixá-lo automaticamente. - --dtype auto: Utiliza automaticamente bfloat16 ou float16 para desempenho máximo. - --api-key: Protege seu endpoint para que usuários aleatórios da internet não possam sobrecarregar sua GPU.

Step 5 Conectando à API

Agora você pode acessar este servidor usando o SDK Python padrão da OpenAI, apenas substituindo a base_url.

Terminal
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="your-secret-key"
)

response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    messages=[
        {"role": "user", "content": "Explain PagedAttention."}
    ],
)

print(response.choices[0].message.content)

Step 6 Otimizando para Produção

Se você possui múltiplas GPUs (por exemplo, duas RTX 3090), pode dividir um modelo grande de 70B entre elas usando paralelismo tensorial. Basta adicionar a flag --tensor-parallel-size:

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-70B-Instruct   --tensor-parallel-size 2

Com o vLLM em execução, seu servidor Linux agora é capaz de lidar com dezenas de requisições simultâneas ao mesmo tempo, sem qualquer degradação de latência.