laptop_mac macOS Sonoma
Intermediate
schedule 8 min read
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.
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.