vLLM Quickstart: Serviço de LLM de Alta Performance - em 2026
Inferência rápida de LLM com a API da OpenAI
vLLM é um motor de inferência e servidores de alta throughput e eficiência de memória para Modelos de Linguagem Grandes (LLMs) desenvolvido pelo Sky Computing Lab da UC Berkeley.
Com seu algoritmo revolucionário PagedAttention, o vLLM alcança um throughput 14-24 vezes maior do que métodos tradicionais de servidores, tornando-se a escolha ideal para implantações de LLM em produção.

O que é o vLLM?
O vLLM (virtual LLM) é uma biblioteca de código aberto para inferência e servidores rápidos de LLM que rapidamente se tornou o padrão da indústria para implantações em produção. Lançado em 2023, introduziu PagedAttention, uma técnica revolucionária de gerenciamento de memória que melhora significativamente a eficiência do servidor.
Recursos Principais
Alta Performance de Throughput: O vLLM fornece um throughput 14-24 vezes maior em comparação com o HuggingFace Transformers com o mesmo hardware. Este grande ganho de performance vem da batch processing contínuo, kernels CUDA otimizados e o algoritmo PagedAttention que elimina a fragmentação de memória.
Compatibilidade com API do OpenAI: O vLLM inclui um servidor de API embutido que é totalmente compatível com o formato do OpenAI. Isso permite uma migração sem problemas do OpenAI para infraestrutura auto-hospedada sem alterar o código da aplicação. Basta apontar seu cliente de API para o endpoint do vLLM e ele funciona de forma transparente.
Algoritmo PagedAttention: A inovação central por trás do desempenho do vLLM é o PagedAttention, que aplica o conceito de paginação de memória virtual aos mecanismos de atenção. Em vez de alocar blocos de memória contíguos para caches KV (o que leva à fragmentação), o PagedAttention divide a memória em blocos de tamanho fixo que podem ser alocados sob demanda. Isso reduz o desperdício de memória até 4 vezes e permite tamanhos de lote muito maiores.
Batching Contínuo: Ao contrário do batching estático, onde você espera que todas as sequências sejam concluídas, o vLLM usa batching contínuo (rolamento). Assim que uma sequência termina, uma nova pode ser adicionada ao lote. Isso maximiza a utilização da GPU e minimiza a latência para solicitações entrantes.
Suporte a Multi-GPU: O vLLM suporta paralelismo tensor e pipeline para distribuir modelos grandes em múltiplas GPUs. Ele pode servir modelos que não cabem na memória de uma única GPU, suportando configurações de 2 a 8+ GPUs.
Ampla Suporte a Modelos: Compatível com arquiteturas de modelos populares incluindo LLaMA, Mistral, Mixtral, Qwen, Phi, Gemma e muitos outros. Suporta modelos instrução-tunados e baseados no HuggingFace Hub.
Quando Usar o vLLM
O vLLM destaca-se em cenários específicos onde suas forças brilham:
Serviços de API de Produção: Quando você precisa servir um LLM para muitos usuários simultâneos via API, o alto throughput e o batching eficiente do vLLM tornam-no a melhor escolha. Empresas que operam chatbots, assistentes de código ou serviços de geração de conteúdo se beneficiam de sua capacidade de lidar com centenas de solicitações por segundo.
Cargas de Trabalho de Alta Concorrência: Se sua aplicação tiver muitos usuários simultâneos fazendo solicitações, o batching contínuo e o PagedAttention do vLLM permitem servir mais usuários com o mesmo hardware em comparação com alternativas.
Otimização de Custo: Quando os custos da GPU são uma preocupação, o throughput superior do vLLM significa que você pode servir o mesmo tráfego com menos GPUs, reduzindo diretamente os custos de infraestrutura. A eficiência de memória de 4 vezes do PagedAttention também permite o uso de instâncias de GPU menores e mais baratas.
Implantações no Kubernetes: O design sem estado e a arquitetura amigável de contêiner do vLLM tornam-no ideal para clusters do Kubernetes. Seu desempenho consistente sob carga e gerenciamento de recursos simples se integram bem com a infraestrutura nativa da nuvem.
Quando NÃO Usar o vLLM: Para desenvolvimento local, experimentação ou cenários de único usuário, ferramentas como Ollama oferecem uma melhor experiência do usuário com configuração mais simples. A complexidade do vLLM é justificada quando você precisa de suas vantagens de desempenho para cargas de trabalho de produção.
Como Instalar o vLLM
Pré-requisitos
Antes de instalar o vLLM, certifique-se de que seu sistema atenda a esses requisitos:
- GPU: NVIDIA GPU com capacidade de computação 7.0+ (V100, T4, A10, A100, H100, RTX 20/30/40 series)
- CUDA: Versão 11.8 ou superior
- Python: 3.8 a 3.11
- VRAM: Mínimo 16 GB para modelos de 7B, 24 GB+ para 13B, 40 GB+ para modelos maiores
- Driver: Driver da NVIDIA 450.80.02 ou mais recente
Instalação via pip
O método mais simples de instalação é usando o pip. Isso funciona em sistemas com CUDA 11.8 ou superior:
# Crie um ambiente virtual (recomendado)
python3 -m venv vllm-env
source vllm-env/bin/activate
# Instale o vLLM
pip install vllm
# Verifique a instalação
python -c "import vllm; print(vllm.__version__)"
Para sistemas com versões diferentes de CUDA, instale a roda apropriada:
# Para CUDA 12.1
pip install vllm==0.4.2+cu121 -f https://github.com/vllm-project/vllm/releases
# Para CUDA 11.8
pip install vllm==0.4.2+cu118 -f https://github.com/vllm-project/vllm/releases
Instalação com Docker
O Docker fornece o método de implantação mais confiável, especialmente para produção:
# Puxe a imagem oficial do vLLM
docker pull vllm/vllm-openai:latest
# Execute o vLLM com suporte a GPU
docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model mistralai/Mistral-7B-Instruct-v0.2
A bandeira --ipc=host é importante para configurações de multi-GPU, pois permite a comunicação inter-processo adequada.
Construção a partir da Fonte
Para os recursos mais recentes ou modificações personalizadas, construa a partir da fonte:
git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .
Guia de Início Rápido do vLLM
Executando seu Primeiro Modelo
Inicie o vLLM com um modelo usando a interface de linha de comando:
# Faça o download e sirva o Mistral-7B com API compatível com OpenAI
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mistral-7B-Instruct-v0.2 \
--port 8000
O vLLM automaticamente baixará o modelo do HuggingFace Hub (se não estiver em cache) e iniciará o servidor. Você verá saída indicando que o servidor está pronto:
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
Fazendo Solicitações de API
Uma vez que o servidor esteja em execução, você pode fazer solicitações usando o cliente Python OpenAI ou curl:
Usando curl:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.2",
"prompt": "Explique o que é o vLLM em uma frase:",
"max_tokens": 100,
"temperature": 0.7
}'
Usando o Cliente Python OpenAI:
from openai import OpenAI
# Aponte para seu servidor vLLM
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed" # O vLLM não requer autenticação por padrão
)
response = client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
prompt="Explique o que é o vLLM em uma frase:",
max_tokens=100,
temperature=0.7
)
print(response.choices[0].text)
API de Completions de Chat:
response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
messages=[
{"role": "system", "content": "Você é um assistente útil."},
{"role": "user", "content": "O que é PagedAttention?"}
],
max_tokens=200
)
print(response.choices[0].message.content)
Configuração Avançada
O vLLM oferece diversos parâmetros para otimizar o desempenho:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mistral-7B-Instruct-v0.2 \
--port 8000 \
--gpu-memory-utilization 0.95 \ # Use 95% da memória da GPU
--max-model-len 8192 \ # Comprimento máximo da sequência
--tensor-parallel-size 2 \ # Use 2 GPUs com paralelismo tensor
--dtype float16 \ # Use precisão FP16
--max-num-seqs 256 # Tamanho máximo do lote
Explicação dos Parâmetros Principais:
--gpu-memory-utilization: Quanto da memória da GPU usar (0.90 = 90%). Valores mais altos permitem lotes maiores, mas deixam menos margem para picos de memória.--max-model-len: Comprimento máximo do contexto. Reduzir isso economiza memória para lotes maiores.--tensor-parallel-size: Número de GPUs para dividir o modelo.--dtype: Tipo de dados para os pesos (float16, bfloat16 ou float32). FP16 geralmente é ótimo.--max-num-seqs: Número máximo de sequências para processar em um lote.
Comparação entre vLLM e Ollama
Ambos o vLLM e o Ollama são escolhas populares para hospedagem local de LLM, mas eles se destinam a casos de uso diferentes. Entender quando usar cada ferramenta pode ter um impacto significativo no sucesso do seu projeto.
Desempenho e Throughput
vLLM é projetado para o máximo throughput em cenários de múltiplos usuários. Seu PagedAttention e batching contínuo permitem servir centenas de solicitações simultâneas de forma eficiente. Benchmarks mostram que o vLLM atinge um throughput 14-24 vezes maior do que implementações padrão e 2-4 vezes maior do que o Ollama sob alta concorrência.
Ollama otimiza para uso interativo de único usuário com foco em baixa latência para solicitações individuais. Embora não corresponda ao throughput de múltiplos usuários do vLLM, ele fornece excelente desempenho para desenvolvimento e uso pessoal com tempos de início mais rápidos e consumo de recursos de espera mais baixo.
Facilidade de Uso
Ollama vence decisivamente em simplicidade. A instalação é um único comando (curl | sh), e executar modelos é tão simples quanto ollama run llama2. Ele inclui uma biblioteca de modelos com versões quantizadas otimizadas para diferentes perfis de hardware. A experiência do usuário se parece com o Docker – puxe, execute e vá.
vLLM requer mais configuração: gerenciamento de ambientes Python, instalação de CUDA, compreensão de parâmetros de serviço e especificação manual de modelos. A curva de aprendizado é mais íngreme, mas você ganha controle fino sobre a otimização do desempenho. Esta complexidade é justificada para implantações em produção onde você precisa extrair o máximo desempenho de seu hardware.
API e Integração
vLLM fornece APIs REST compatíveis com OpenAI prontas para uso, tornando-o uma substituição direta para a API do OpenAI em aplicações existentes. Isso é crucial para migrar serviços de produção de provedores de nuvem para infraestrutura auto-hospedada sem alterar o código.
Ollama oferece uma API REST mais simples e uma biblioteca dedicada para Python/JavaScript. Embora funcional, ela não é compatível com a API do OpenAI, exigindo alterações de código ao integrar com aplicações que esperam o formato do OpenAI. No entanto, projetos comunitários como adaptadores Ollama-OpenAI preenchem essa lacuna.
Gerenciamento de Memória
O algoritmo PagedAttention do vLLM fornece eficiência de memória superior para solicitações simultâneas. Ele pode servir 2-4 vezes mais usuários simultâneos com a mesma VRAM em comparação com implementações ingênuas. Isso se traduz diretamente em economia de custos em implantações de produção.
Ollama usa um gerenciamento de memória mais simples adequado para cenários de único usuário. Ele gerencia automaticamente o carregamento/desligamento de modelos com base na atividade, o que é conveniente para desenvolvimento, mas não ótimo para uso de alta concorrência em produção.
Suporte a Multi-GPU
vLLM se destaca com paralelismo tensor e pipeline nativo, distribuindo eficientemente modelos entre 2-8+ GPUs. Isso é essencial para servir modelos grandes como LLMs com 70B parâmetros que não cabem em uma única GPU.
Ollama atualmente tem suporte limitado a multi-GPU, funcionando melhor com uma única GPU. Isso o torna menos adequado para modelos muito grandes que exigem inferência distribuída.
Recomendações de Caso de Uso
Escolha o vLLM quando:
- Servir APIs de produção com muitos usuários simultâneos
- Otimizar custos por solicitação em implantações na nuvem
- Executar em clusters do Kubernetes ou plataformas de orquestração de contêineres
- Precisar de compatibilidade com API do OpenAI para aplicações existentes
- Servir modelos grandes que exigem suporte a multi-GPU
- O desempenho e o throughput são requisitos críticos
Escolha o Ollama quando:
- Desenvolvimento local e experimentação
- Uso interativo de único usuário (assistentes pessoais, chatbots)
- Prototipagem rápida e avaliação de modelos
- Aprendizado sobre LLMs sem complexidade de infraestrutura
- Executar em estações de trabalho ou laptops pessoais
- Simplicidade e facilidade de uso são prioridades
Muitas equipes usam ambos: Ollama para desenvolvimento e experimentação, e vLLM para implantação em produção. Esta combinação fornece produtividade para desenvolvedores enquanto mantém o desempenho em produção.
Comparação entre vLLM e Docker Model Runner
O Docker recentemente introduziu o Model Runner (anteriormente GenAI Stack) como sua solução oficial para implantação local de modelos de IA. Como ele se compara ao vLLM?
Filosofia de Arquitetura
Docker Model Runner visa ser o “Docker para IA” – uma maneira simples e padronizada de executar modelos de IA localmente com a mesma facilidade de executar contêineres. Ele abstrai a complexidade e fornece uma interface consistente entre diferentes modelos e frameworks.
vLLM é um motor de inferência especializado focado exclusivamente no serviço de LLM com máximo desempenho. É uma ferramenta de nível mais baixo que você containeriza com o Docker, em vez de uma plataforma completa.
Configuração e Começar
Instalação do Docker Model Runner é direta para usuários do Docker:
docker model pull llama3:8b
docker model run llama3:8b
Essa similaridade com o fluxo de trabalho de imagem do Docker torna-o imediatamente familiar para desenvolvedores já usando contêineres.
vLLM requer mais configuração inicial (Python, CUDA, dependências) ou usar imagens Docker pré-construídas:
docker pull vllm/vllm-openai:latest
docker run --runtime nvidia --gpus all vllm/vllm-openai:latest --model <model-name>
Características de Desempenho
vLLM entrega throughput superior em cenários de múltiplos usuários devido ao PagedAttention e ao batching contínuo. Para serviços de API de produção que lidam com centenas de solicitações por segundo, as otimizações do vLLM fornecem 2-5 vezes mais throughput do que abordagens gerais de serviço.
Docker Model Runner se concentra em facilidade de uso em vez de máximo desempenho. É adequado para desenvolvimento local, testes e cargas de trabalho moderadas, mas não implementa as otimizações avançadas que tornam o vLLM excelente em escala.
Suporte a Modelos
Docker Model Runner fornece uma biblioteca curada de modelos com acesso de um único comando a modelos populares. Ele suporta múltiplos frameworks (não apenas LLMs) incluindo Stable Diffusion, Whisper e outros modelos de IA, tornando-o mais versátil para diferentes cargas de trabalho de IA.
vLLM se especializa em inferência de LLM com suporte profundo para modelos de linguagem baseados em transformadores. Ele suporta qualquer LLM compatível com HuggingFace, mas não se estende a outros tipos de modelos de IA como geração de imagens ou reconhecimento de fala.
Implantação em Produção
vLLM foi testado em produção em empresas como Anthropic, Replicate e muitas outras que servem bilhões de tokens diariamente. Suas características de desempenho e estabilidade sob carga pesada tornam-no o padrão de fato para servir LLMs em produção.
Docker Model Runner é mais novo e posiciona-se mais para cenários de desenvolvimento e testes locais. Embora possa servir tráfego de produção, ele carece do histórico comprovado e otimizações de desempenho que implantações de produção exigem.
Ecossistema de Integração
vLLM integra-se com ferramentas de infraestrutura de produção: operadores do Kubernetes, métricas do Prometheus, Ray para servidores distribuídos e extensa compatibilidade com a API do OpenAI para aplicações existentes.
Docker Model Runner integra-se naturalmente com o ecossistema do Docker e o Docker Desktop. Para equipes já padronizadas no Docker, essa integração oferece uma experiência coesa, mas menos recursos especializados de serviço de LLM.
Quando Usar Cada Um
Use o vLLM para:
- Serviços de API de LLM em produção
- Implantações de alto throughput com múltiplos usuários
- Implantações na nuvem sensíveis a custos que precisam de máxima eficiência
- Ambientes de Kubernetes e infraestrutura nativa da nuvem
- Quando você precisa de escalabilidade e desempenho comprovados
Use o Docker Model Runner para:
- Desenvolvimento e testes locais
- Executar vários tipos de modelos de IA (não apenas LLMs)
- Equipes profundamente investidas no ecossistema do Docker
- Experimentação rápida sem configuração de infraestrutura
- Propósitos educacionais e de aprendizado
Abordagem Híbrida: Muitas equipes desenvolvem com o Docker Model Runner localmente para conveniência, depois implantam com o vLLM em produção para desempenho. As imagens do Docker Model Runner também podem ser usadas para executar contêineres do vLLM, combinando ambas as abordagens.
Boas Práticas para Implantação em Produção
Implantação com Docker
Crie uma configuração de Docker Compose pronta para produção:
version: '3.8'
services:
vllm:
image: vllm/vllm-openai:latest
runtime: nvidia
environment:
- CUDA_VISIBLE_DEVICES=0,1
volumes:
- ~/.cache/huggingface:/root/.cache/huggingface
- ./logs:/logs
ports:
- "8000:8000"
command: >
--model mistralai/Mistral-7B-Instruct-v0.2
--tensor-parallel-size 2
--gpu-memory-utilization 0.90
--max-num-seqs 256
--max-model-len 8192
restart: unless-stopped
shm_size: '16gb'
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 2
capabilities: [gpu]
Implantação no Kubernetes
Implante o vLLM no Kubernetes para escala de produção:
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-server
spec:
replicas: 2
selector:
matchLabels:
app: vllm
template:
metadata:
labels:
app: vllm
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- --model
- mistralai/Mistral-7B-Instruct-v0.2
- --tensor-parallel-size
- "2"
- --gpu-memory-utilization
- "0.90"
resources:
limits:
nvidia.com/gpu: 2
ports:
- containerPort: 8000
volumeMounts:
- name: cache
mountPath: /root/.cache/huggingface
volumes:
- name: cache
hostPath:
path: /mnt/huggingface-cache
---
apiVersion: v1
kind: Service
metadata:
name: vllm-service
spec:
selector:
app: vllm
ports:
- port: 80
targetPort: 8000
type: LoadBalancer
Monitoramento e Observabilidade
O vLLM expõe métricas do Prometheus para monitoramento:
import requests
# Obter métricas
metrics = requests.get("http://localhost:8000/metrics").text
print(metrics)
Métricas principais para monitorar:
vllm:num_requests_running- Solicitações ativasvllm:gpu_cache_usage_perc- Utilização do cache de KVvllm:time_to_first_token- Métrica de latênciavllm:time_per_output_token- Velocidade de geração
Otimização de Desempenho
Otimize a Utilização de Memória da GPU: Comece com --gpu-memory-utilization 0.90 e ajuste com base no comportamento observado. Valores mais altos permitem lotes maiores, mas correm o risco de erros de OOM durante picos de tráfego.
Ajuste o Comprimento Máximo da Sequência: Se seu caso de uso não precisar do comprimento total do contexto, reduza --max-model-len. Isso libera memória para lotes maiores. Por exemplo, se você precisar apenas de 4K de contexto, defina --max-model-len 4096 em vez de usar o máximo do modelo (geralmente 8K-32K).
Escolha a Quantização Apropriada: Para modelos que suportam, use versões quantizadas (8-bit, 4-bit) para reduzir a memória e aumentar o throughput:
--quantization awq # Para modelos quantizados AWQ
--quantization gptq # Para modelos quantizados GPTQ
Ative o Cache de Prefixo: Para aplicações com prompts repetidos (como chatbots com mensagens de sistema), ative o cache de prefixo:
--enable-prefix-caching
Isso armazena os valores KV para prefixos comuns, reduzindo o cálculo para solicitações que compartilham o mesmo prefixo de prompt.
Solução de Problemas de Problemas Comuns
Erros de Memória Insuficiente
Sintomas: O servidor crasha com erros de memória CUDA.
Soluções:
- Reduza
--gpu-memory-utilizationpara 0.85 ou 0.80 - Reduza
--max-model-lense seu caso de uso permitir - Reduza
--max-num-seqspara diminuir o tamanho do lote - Use uma versão quantizada do modelo
- Ative o paralelismo tensor para distribuir em mais GPUs
Baixo Throughput
Sintomas: O servidor lida com menos solicitações do que o esperado.
Soluções:
- Aumente
--max-num-seqspara permitir lotes maiores - Aumente
--gpu-memory-utilizationse houver margem - Verifique se o CPU está limitado com
htop– considere CPUs mais rápidas - Verifique a utilização da GPU com
nvidia-smi– deve ser 95%+ - Ative FP16 se estiver usando FP32:
--dtype float16
Tempo de Primeiro Token Lento
Sintomas: Alta latência antes do início da geração.
Soluções:
- Use modelos menores para aplicações críticas de latência
- Ative o cache de prefixo para prompts repetidos
- Reduza
--max-num-seqspara priorizar latência sobre throughput - Considere decodificação especulativa para modelos compatíveis
- Otimize a configuração de paralelismo tensor
Falhas no Carregamento do Modelo
Sintomas: O servidor falha em iniciar, não consegue carregar o modelo.
Soluções:
- Verifique se o nome do modelo corresponde exatamente ao formato do HuggingFace
- Verifique a conectividade de rede com o HuggingFace Hub
- Certifique-se de que haja espaço suficiente em
~/.cache/huggingface - Para modelos restritos, defina a variável de ambiente
HF_TOKEN - Tente baixar manualmente com
huggingface-cli download <model>
Recursos Avançados
Decodificação Especulativa
O vLLM suporta decodificação especulativa, onde um modelo menor propõe tokens que um modelo maior verifica. Isso pode acelerar a geração em 1,5-2 vezes:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-70b-chat-hf \
--speculative-model meta-llama/Llama-2-7b-chat-hf \
--num-speculative-tokens 5
Adaptações LoRA
Sirva múltiplas adaptações LoRA sobre um modelo base sem carregar múltiplos modelos completos:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-hf \
--enable-lora \
--lora-modules sql-lora=./path/to/sql-adapter \
code-lora=./path/to/code-adapter
Depois, especifique qual adaptador usar por solicitação:
response = client.completions.create(
model="sql-lora", # Use o adaptador SQL
prompt="Converta isso para SQL: Mostre-me todos os usuários criados este mês"
)
Serviço de Multi-LoRA
O serviço de multi-LoRA do vLLM permite hospedar dezenas de adaptações finas com mínima sobrecarga de memória. Isso é ideal para servir variantes de modelos específicas de clientes ou tarefas:
# Solicitação com adaptador LoRA específico
response = client.chat.completions.create(
model="meta-llama/Llama-2-7b-hf",
messages=[{"role": "user", "content": "Escreva uma consulta SQL"}],
extra_body={"lora_name": "sql-lora"}
)
Cache de Prefixo
Ative o cache de prefixo automaticamente para evitar recomputação do cache KV para prefixos de prompt repetidos:
--enable-prefix-caching
Isso é particularmente eficaz para:
- Chatbots com prompts de sistema fixos
- Aplicações RAG com modelos de contexto consistentes
- Prompts de few-shot repetidos em solicitações
O cache de prefixo pode reduzir o tempo até o primeiro token em 50-80% para solicitações que compartilham prefixos de prompt.
Exemplos de Integração
Integração com LangChain
from langchain.llms import VLLMOpenAI
llm = VLLMOpenAI(
openai_api_key="EMPTY",
openai_api_base="http://localhost:8000/v1",
model_name="mistralai/Mistral-7B-Instruct-v0.2",
max_tokens=512,
temperature=0.7,
)
response = llm("Explique PagedAttention em termos simples")
print(response)
Integração com LlamaIndex
from llama_index.llms import VLLMServer
llm = VLLMServer(
api_url="http://localhost:8000/v1",
model="mistralai/Mistral-7B-Instruct-v0.2",
temperature=0.7,
max_tokens=512
)
response = llm.complete("O que é o vLLM?")
print(response)
Aplicação FastAPI
from fastapi import FastAPI
from openai import AsyncOpenAI
app = FastAPI()
client = AsyncOpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed"
)
@app.post("/generate")
async def generate(prompt: str):
response = await client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
prompt=prompt,
max_tokens=200
)
return {"result": response.choices[0].text}
Benchmarks de Desempenho
Dados de desempenho reais ajudam a ilustrar as vantagens do vLLM:
Comparação de Throughput (Mistral-7B em GPU A100):
- vLLM: ~3.500 tokens/segundo com 64 usuários simultâneos
- HuggingFace Transformers: ~250 tokens/segundo com mesma concorrência
- Ollama: ~1.200 tokens/segundo com mesma concorrência
- Resultado: O vLLM fornece uma melhora de 14 vezes sobre implementações básicas
Eficiência de Memória (LLaMA-2-13B):
- Implementação padrão: 24 GB VRAM, 32 sequências simultâneas
- vLLM com PagedAttention: 24 GB VRAM, 128 sequências simultâneas
- Resultado: 4 vezes mais solicitações simultâneas com mesma memória
Latência sob Carga (Mixtral-8x7B em 2xA100):
- vLLM: Latência P50 180 ms, P99 420 ms em 100 req/s
- Serviço padrão: Latência P50 650 ms, P99 3.200 ms em 100 req/s
- Resultado: O vLLM mantém latência consistente sob alta carga
Esses benchmarks demonstram por que o vLLM tornou-se o padrão de fato para servir LLMs em produção onde o desempenho importa.
Análise de Custo
Entendendo as implicações de custo de escolher o vLLM:
Cenário: Servir 1 milhão de solicitações/dia
Com Serviço Padrão:
- Necessário: 8x A100 GPUs (80 GB)
- Custo da AWS: ~$32/hora × 24 × 30 = $23.040/mês
- Custo por 1 milhão de tokens: ~$0,75
Com vLLM:
- Necessário: 2x A100 GPUs (80 GB)
- Custo da AWS: ~$8/hora × 24 × 30 = $5.760/mês
- Custo por 1 milhão de tokens: ~$0,19
- Economia: $17.280/mês (75% de redução)
Essa vantagem de custo cresce com a escala. Organizações que servem bilhões de tokens mensais economizam centenas de milhares de dólares usando o vLLM otimizado em vez de implementações ingênuas.
Considerações de Segurança
Autenticação
O vLLM não inclui autenticação por padrão. Para produção, implemente autenticação no nível do proxy reverso:
# Configuração do Nginx
location /v1/ {
auth_request /auth;
proxy_pass http://vllm-backend:8000;
}
location /auth {
proxy_pass http://auth-service:8080/verify;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
Ou use gateways de API como Kong, Traefik ou AWS API Gateway para autenticação e limitação de taxa de nível empresarial.
Isolamento de Rede
Execute o vLLM em redes privadas, não expostas diretamente à internet:
# Exemplo de NetworkPolicy do Kubernetes
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: vllm-access
spec:
podSelector:
matchLabels:
app: vllm
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: api-gateway
ports:
- protocol: TCP
port: 8000
Limitação de Taxa
Implemente limitação de taxa para prevenir abusos:
# Exemplo usando Redis para limitação de taxa
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
import redis
from datetime import datetime, timedelta
app = FastAPI()
redis_client = redis.Redis(host='localhost', port=6379)
@app.middleware("http")
async def rate_limit_middleware(request, call_next):
client_ip = request.client.host
key = f"rate_limit:{client_ip}"
requests = redis_client.incr(key)
if requests == 1:
redis_client.expire(key, 60) # Janela de 60 segundos
if requests > 60: # 60 solicitações por minuto
raise HTTPException(status_code=429, detail="Limite de taxa excedido")
return await call_next(request)
Controle de Acesso ao Modelo
Para implantações multilocatário, controle quais usuários podem acessar quais modelos:
ALLOWED_MODELS = {
"user_tier_1": ["mistralai/Mistral-7B-Instruct-v0.2"],
"user_tier_2": ["mistralai/Mistral-7B-Instruct-v0.2", "meta-llama/Llama-2-13b-chat-hf"],
"admin": ["*"] # Todos os modelos
}
def verify_model_access(user_tier: str, model: str) -> bool:
allowed = ALLOWED_MODELS.get(user_tier, [])
return "*" in allowed or model in allowed
Guia de Migração
Do OpenAI para vLLM
Migrar do OpenAI para vLLM auto-hospedado é direto graças à compatibilidade da API:
Antes (OpenAI):
from openai import OpenAI
client = OpenAI(api_key="sk-...")
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "Olá"}]
)
Depois (vLLM):
from openai import OpenAI
client = OpenAI(
base_url="https://your-vllm-server.com/v1",
api_key="your-internal-key" # Se você adicionou autenticação
)
response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
messages=[{"role": "user", "content": "Olá"}]
)
Apenas duas mudanças necessárias: atualize base_url e model name. Todo o resto do código permanece idêntico.
Do Ollama para vLLM
O Ollama usa um formato de API diferente. Aqui está a conversão:
API do Ollama:
import requests
response = requests.post('http://localhost:11434/api/generate',
json={
'model': 'llama2',
'prompt': 'Por que o céu é azul?'
})
Equivalente do vLLM:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
response = client.completions.create(
model="meta-llama/Llama-2-7b-chat-hf",
prompt="Por que o céu é azul?"
)
Você precisará atualizar as chamadas de API em todo o seu código base, mas as bibliotecas de cliente OpenAI oferecem melhor tratamento de erros e recursos.
Da HuggingFace Transformers para vLLM
Migração de uso direto em Python:
HuggingFace:
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
inputs = tokenizer("Olá", return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=100)
result = tokenizer.decode(outputs[0])
vLLM:
from vllm import LLM, SamplingParams
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2")
sampling_params = SamplingParams(max_tokens=100)
outputs = llm.generate("Olá", sampling_params)
result = outputs[0].outputs[0].text
A API Python do vLLM é mais simples e muito mais rápida para inferência em lote.
Futuro do vLLM
O vLLM continua em desenvolvimento acelerado com recursos emocionantes no roadmap:
Serving Desagregado: Separar prefill (processamento de prompt) e decode (geração de token) em GPUs diferentes para otimizar a utilização de recursos. O prefill é limitado por computação enquanto o decode é limitado por memória, então executá-los em hardware especializado melhora a eficiência.
Inferência Multi-Nó: Distribuir modelos muito grandes (100B+ parâmetros) entre múltiplas máquinas, permitindo servir modelos que são muito grandes para configurações de único nó.
Quantização Aumentada: Suporte para novos formatos de quantização como GGUF (usado pelo llama.cpp) e melhorias na integração AWQ/GPTQ para melhor desempenho com modelos quantizados.
Melhorias na Decodificação Especulativa: Modelos de draft mais eficientes e estratégias adaptativas de especulação para obter maiores acelerações sem perda de precisão.
Otimizações de Attenção: FlashAttention 3, ring attention para contextos extremamente longos (100K+ tokens) e outros mecanismos de atenção de ponta.
Melhor Cobertura de Modelos: Expansão do suporte a modelos multimodais (modelos de linguagem e visão), modelos de áudio e arquiteturas especializadas conforme surgirem.
O projeto vLLM mantém desenvolvimento ativo com contribuições da UC Berkeley, Anyscale e a comunidade open-source mais ampla. À medida que a implantação de LLMs se torna mais crítica para sistemas de produção, o papel do vLLM como padrão de desempenho continua a crescer.
Links Úteis
Artigos Relacionados Neste Site
-
Local LLM Hosting: Guia Completo de 2026 - Ollama, vLLM, LocalAI, Jan, LM Studio & Mais - Comparação abrangente de 12+ ferramentas de hospedagem de LLM locais, incluindo análise detalhada de vLLM ao lado de Ollama, LocalAI, Jan, LM Studio e outros. Aborda a maturidade da API, suporte a chamada de ferramentas, compatibilidade com GGUF e benchmarks de desempenho para ajudar a escolher a solução certa.
-
Ollama Cheatsheet - Referência completa de comandos e cheatsheet de Ollama, abrangendo instalação, gerenciamento de modelos, uso da API e melhores práticas para implantação de LLM locais. Essencial para desenvolvedores que usam Ollama junto ou em vez de vLLM.
-
Docker Model Runner vs Ollama: Qual Escolher? - Comparação detalhada entre o Model Runner do Docker e o Ollama para implantação de LLM locais, analisando desempenho, suporte a GPU, compatibilidade com API e casos de uso. Ajuda a entender o cenário competitivo no qual o vLLM atua.
-
Cheatsheet do Docker Model Runner: Comandos & Exemplos - Cheatsheet prático do Docker Model Runner com comandos e exemplos para implantação de modelos de IA. Útil para equipes que estão comparando a abordagem do Docker com as capacidades especializadas de servir LLM do vLLM.
Recursos Externos e Documentação
-
Repositório do vLLM no GitHub - Repositório oficial do vLLM com código fonte, documentação abrangente, guias de instalação e discussões ativas da comunidade. Recurso essencial para ficar atualizado com as últimas funcionalidades e resolver problemas.
-
Documentação do vLLM - Documentação oficial que aborda todos os aspectos do vLLM, desde a configuração básica até a configuração avançada. Inclui referências de API, guias de otimização de desempenho e melhores práticas de implantação.
-
Papel da PagedAttention - Artigo acadêmico que introduz o algoritmo PagedAttention, que impulsiona a eficiência do vLLM. Leitura essencial para entender as inovações técnicas por trás das vantagens de desempenho do vLLM.
-
Blog do vLLM - Blog oficial do vLLM com anúncios de lançamentos, benchmarks de desempenho, análises técnicas profundas e estudos de caso da comunidade de implantações em produção.
-
HuggingFace Model Hub - Repositório abrangente de modelos de LLM de código aberto compatíveis com o vLLM. Pesquise por modelos com base no tamanho, tarefa, licença e características de desempenho para encontrar o modelo certo para seu caso de uso.
-
Documentação do Ray Serve - Documentação do framework Ray Serve para construir implantações escaláveis e distribuídas do vLLM. O Ray oferece funcionalidades avançadas como autoescalabilidade, servidores de múltiplos modelos e gerenciamento de recursos para sistemas de produção.
-
TensorRT-LLM da NVIDIA - TensorRT-LLM da NVIDIA para inferência altamente otimizada em GPUs da NVIDIA. Alternativa ao vLLM com estratégias diferentes de otimização, útil para comparação e compreensão do cenário de otimização de inferência.
-
Referência da API da OpenAI - Documentação oficial da API da OpenAI com a qual a API do vLLM é compatível. Use-a como referência ao construir aplicações que precisam funcionar com endpoints da OpenAI e vLLM auto-hospedados de forma intercambiável.