Introdução ao vLLM: Alta Performance no Serving de LLMs - em 2026

Inferência rápida de LLMs com a API da OpenAI

Conteúdo da página

vLLM é um motor de inferência e serviço de alto rendimento e eficiência de memória para Modelos de Linguagem Grande (LLMs, na sigla em inglês), desenvolvido pelo Sky Computing Lab da UC Berkeley.

Com seu algoritmo revolucionário PagedAttention, o vLLM alcança um rendimento (throughput) 14-24 vezes maior do que os métodos tradicionais de serviço, tornando-se a escolha preferida para implantações de LLMs em produção. Para ver como o vLLM se encaixa entre Ollama, Docker Model Runner, LocalAI e provedores de nuvem — incluindo compensações de custo e infraestrutura — consulte Hospedagem de LLM: Infraestrutura Local, Auto-hospedada e em Nuvem Comparada.

logotipo do vllm

O que é o vLLM?

O vLLM (LLM virtual) é uma biblioteca de código aberto para inferência e serviço rápido de LLMs que rapidamente se tornou o padrão da indústria para implantações em produção. Lançado em 2023, ele introduziu o PagedAttention, uma técnica inovadora de gerenciamento de memória que melhora drasticamente a eficiência do serviço.

Principais Recursos

Alto Desempenho de Rendimento: O vLLM oferece um rendimento 14-24 vezes maior em comparação com o HuggingFace Transformers usando o mesmo hardware. Esse ganho massivo de desempenho vem do loteamento contínuo (continuous batching), kernels CUDA otimizados e o algoritmo PagedAttention que elimina a fragmentação de memória.

Compatibilidade com a API da OpenAI: O vLLM inclui um servidor de API integrado que é totalmente compatível com o formato da OpenAI. Isso permite uma migração transparente da 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 funcionará transparentemente.

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 de 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 em até 4x e permite tamanhos de lote muito maiores.

Loteamento Contínuo: Ao contrário do loteamento estático, onde você espera que todas as sequências sejam concluídas, o vLLM usa loteamento contínuo (rolante). 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 recebidas.

Suporte Multi-GPU: O vLLM suporta paralelismo tensorial e paralelismo de pipeline para distribuir modelos grandes entre várias GPUs. Ele pode servir eficientemente modelos que não cabem na memória de uma única GPU, suportando configurações de 2 a 8+ GPUs.

Amplo Suporte a Modelos: Compatível com arquiteturas de modelos populares, incluindo LLaMA, Mistral, Mixtral, Qwen, Phi, Gemma e muitos outros. Suporta modelos instrucionados e base do HuggingFace Hub.

Quando Usar o vLLM

O vLLM se destaca em cenários específicos onde suas forças brilham:

Serviços de API em Produção: Quando você precisa servir um LLM para muitos usuários simultâneos via API, o alto rendimento e o loteamento eficiente do vLLM tornam-no a melhor escolha. Empresas que executam 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 Concurrencia: Se sua aplicação tiver muitos usuários simultâneos fazendo solicitações, o loteamento contínuo e o PagedAttention do vLLM permitem servir mais usuários com o mesmo hardware em comparação com alternativas.

Otimização de Custos: Quando os custos de GPU são uma preocupação, o superior rendimento 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 4x 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 para contêineres do vLLM tornam-no ideal para clusters Kubernetes. Seu desempenho consistente sob carga e gerenciamento de recursos simples integram-se bem com infraestrutura nativa de nuvem.

Quando NÃO Usar o vLLM: Para desenvolvimento local, experimentação ou cenários de usuário único, ferramentas como Ollama ou llama.cpp oferecem 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 em produção.

Como Instalar o vLLM

Pré-requisitos

Antes de instalar o vLLM, certifique-se de que seu sistema atende aos seguintes requisitos:

  • GPU: GPU NVIDIA com capacidade de computação 7.0+ (V100, T4, A10, A100, H100, série RTX 20/30/40)
  • CUDA: Versão 11.8 ou superior
  • Python: 3.8 a 3.11
  • VRAM: Mínimo de 16GB para modelos de 7B, 24GB+ para 13B, 40GB+ para modelos maiores
  • Driver: Driver NVIDIA 450.80.02 ou mais recente

Instalação via pip

O método de instalação mais simples é usando o pip. Isso funciona em sistemas com CUDA 11.8 ou mais recente:

# 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 do CUDA, instale a wheel 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:

# Baixe 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 flag --ipc=host é importante para configurações multi-GPU, pois permite comunicação inter-processos adequada.

Compilação a partir do Fonte

Para os recursos mais recentes ou modificações personalizadas, compile a partir do fonte:

git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .

Guia Rápido do vLLM

Executando Seu Primeiro Modelo

Inicie o vLLM com um modelo usando a interface de linha de comando:

# Baixe 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 baixará automaticamente o modelo do HuggingFace Hub (se não estiver em cache) e iniciará o servidor. Você verá uma 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 à API

Uma vez que o servidor estiver em execução, você pode fazer solicitações usando o cliente Python da 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 é vLLM em uma frase:",
        "max_tokens": 100,
        "temperature": 0.7
    }'

Usando o Cliente Python da OpenAI:

from openai import OpenAI

# Aponte para seu servidor vLLM
client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed"  # vLLM não requer autenticação por padrão
)

response = client.completions.create(
    model="mistralai/Mistral-7B-Instruct-v0.2",
    prompt="Explique o que é vLLM em uma frase:",
    max_tokens=100,
    temperature=0.7
)

print(response.choices[0].text)

API de Completões 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 inúmeros 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 tensorial
    --dtype float16 \                 # Use precisão FP16
    --max-num-seqs 256                # Tamanho máximo do lote

Parâmetros-Chave Explicados:

  • --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 pesos (float16, bfloat16 ou float32). FP16 é geralmente ideal.
  • --max-num-seqs: Número máximo de sequências para processar em um lote.

vLLM vs Ollama

O vLLM é projetado para serviço de produção de alto rendimento e multi-usuário com loteamento contínuo, PagedAttention e suporte multi-GPU. O Ollama otimiza para configuração local rápida, conveniência de usuário único e gerenciamento de modelos simples.

Para um guia de decisão detalhado cobrindo sinais de migração, etapas de planejamento, configuração Docker Compose e uma lista de verificação prática, consulte Ollama para vLLM: Quando Migrar Seu Servidor Local de LLM.

vLLM vs 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 que 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 LLMs com desempenho máximo. É uma ferramenta de nível inferior que você containeriza com o Docker, em vez de uma plataforma completa.

Configuração e Início

A instalação do Docker Model Runner é direta para usuários do Docker:

docker model pull llama3:8b
docker model run llama3:8b

Essa semelhança com o fluxo de trabalho de imagens do Docker torna-o instantaneamente familiar para desenvolvedores que já usam contêineres.

vLLM requer mais configuração inicial (Python, CUDA, dependências) ou o uso de imagens Docker pré-construídas:

docker pull vllm/vllm-openai:latest
docker run --runtime nvidia --gpus all vllm/vllm-openai:latest --model <nome-do-modelo>

Características de Desempenho

vLLM entrega rendimento superior para cenários multi-usuário devido ao PagedAttention e ao loteamento contínuo. Para serviços de API em produção que lidam com centenas de solicitações por segundo, as otimizações do vLLM fornecem um rendimento 2-5 vezes melhor do que abordagens genéricas de serviço.

Docker Model Runner foca na facilidade de uso em vez de desempenho máximo. É adequado para desenvolvimento local, testes e cargas de trabalho moderadas, mas não implementa as otimizações avançadas que fazem o vLLM brilhar em escala.

Suporte a Modelos

Docker Model Runner fornece uma biblioteca de modelos curada com acesso em um comando a modelos populares. 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 na inferência de LLMs com suporte profundo para modelos de linguagem baseados em transformers. 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 é 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 serviço de LLMs em produção.

Docker Model Runner é mais novo e se posiciona mais para cenários de desenvolvimento e testes locais. Embora possa servir tráfego de produção, falta-lhe o histórico comprovado e as otimizações de desempenho que as implantações em produção exigem.

Ecossistema de Integração

vLLM integra-se com ferramentas de infraestrutura de produção: operadores Kubernetes, métricas Prometheus, Ray para serviço distribuído e compatibilidade extensiva com a API 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 fornece uma experiência coesa, mas com menos recursos especializados de serviço de LLMs.

Quando Usar Cada Um

Use vLLM para:

  • Serviços de API de LLM em produção
  • Implantações de alto rendimento e multi-usuário
  • Implantações em nuvem sensíveis ao custo que precisam de máxima eficiência
  • Ambientes Kubernetes e nativos de nuvem
  • Quando você precisa de escalabilidade e desempenho comprovados

Use Docker Model Runner para:

  • Desenvolvimento e testes locais
  • Executar vários tipos de modelos de IA (não apenas LLMs)
  • Equipes fortemente investidas no ecossistema Docker
  • Experimentação rápida sem configuração de infraestrutura
  • Fins de aprendizado e educacionais

Abordagem Híbrida: Muitas equipes desenvolvem com Docker Model Runner localmente pela conveniência, e depois implantam com vLLM em produção pelo desempenho. As imagens do Docker Model Runner também podem ser usadas para executar contêineres vLLM, combinando ambas as abordagens.

Melhores Práticas para Implantação em Produção

Implantação Docker

Crie uma configuração 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 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)

Principais métricas a monitorar:

  • vllm:num_requests_running - Solicitações ativas
  • vllm:gpu_cache_usage_perc - Utilização do cache KV
  • vllm:time_to_first_token - Métrica de latência
  • vllm:time_per_output_token - Velocidade de geração

Ajuste 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 risco de erros de falta de memória (OOM) durante picos de tráfego.

Ajuste o Comprimento Máximo da Sequência: Se seu caso de uso não precisar do comprimento completo do contexto, reduza --max-model-len. Isso libera memória para lotes maiores. Por exemplo, se você precisar apenas de contexto 4K, defina --max-model-len 4096 em vez de usar o máximo do modelo (geralmente 8K-32K).

Escolha Quantização Apropriada: Para modelos que suportam, use versões quantizadas (8-bit, 4-bit) para reduzir memória e aumentar o rendimento:

--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 em cache os valores KV para prefixos comuns, reduzindo a computação para solicitações que compartilham o mesmo prefixo de prompt.

Solução de Problemas Comuns

Erros de Falta de Memória

Sintomas: O servidor trava com erros de falta de memória CUDA.

Soluções:

  • Reduza --gpu-memory-utilization para 0.85 ou 0.80
  • Diminua --max-model-len se seu caso de uso permitir
  • Reduza --max-num-seqs para diminuir o tamanho do lote
  • Use uma versão quantizada do modelo
  • Ative o paralelismo tensorial para distribuir entre mais GPUs

Baixo Rendimento

Sintomas: O servidor lida com menos solicitações do que o esperado.

Soluções:

  • Aumente --max-num-seqs para permitir lotes maiores
  • Aumente --gpu-memory-utilization se você tiver margem
  • Verifique se o CPU é o gargalo com htop – considere CPUs mais rápidos
  • Verifique a utilização da GPU com nvidia-smi – deve ser 95%+
  • Ative FP16 se estiver usando FP32: --dtype float16

Tempo Lento do Primeiro Token

Sintomas: Alta latência antes do início da geração.

Soluções:

  • Use modelos menores para aplicações críticas em latência
  • Ative o cache de prefixo para prompts repetidos
  • Reduza --max-num-seqs para priorizar latência em vez de rendimento
  • Considere a decodificação especulativa para modelos suportados
  • Otimize a configuração de paralelismo tensorial

Falhas no Carregamento do Modelo

Sintomas: O servidor falha ao 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 ao HuggingFace Hub
  • Certifique-se de que há espaço em disco suficiente em ~/.cache/huggingface
  • Para modelos restritos, defina a variável de ambiente HF_TOKEN
  • Tente baixar manualmente com huggingface-cli download <modelo>

Recursos Avançados

Decodificação Especulativa

O vLLM suporta decodificação especulativa, onde um modelo de rascunho menor propõe tokens que um modelo alvo maior verifica. Isso pode acelerar a geração em 1.5-2x. Para um guia completo sobre métodos de decodificação especulativa — modelos de rascunho, EAGLE-3, P-EAGLE e n-gram — consulte Decodificação Especulativa: Inferência Mais Rápida Sem Perda de Qualidade.

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

Adaptadores LoRA

Sirva múltiplos adaptadores LoRA sobre um modelo base sem carregar vários modelos completos:

python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-2-7b-hf \
    --enable-lora \
    --lora-modules sql-lora=./caminho/para/adapter-sql \
                   code-lora=./caminho/para/adapter-code

Em seguida, 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 Multi-LoRA

O serviço multi-LoRA do vLLM permite hospedar dezenas de adaptadores ajustados finamente com mínimo sobrecarga de memória. Isso é ideal para servir variantes de modelos específicas de cliente ou tarefa:

# Solicitação com adaptador LoRA específico
response = client.chat.completions.create(
    model="meta-llama/Llama-2-7b-hf",
    messages=[{"role": "user", "content": "Escreva consulta SQL"}],
    extra_body={"lora_name": "sql-lora"}
)

Cache de Prefixo

Ative o cache automático de prefixo para evitar recomputar o cache KV para prefixos de prompt repetidos:

--enable-prefix-caching

Isso é particularmente eficaz para:

  • Chatbots com prompts de sistema fixos
  • Aplicações RAG com templates de contexto consistentes
  • Prompts de aprendizado few-shot repetidos entre 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 é 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 do mundo real ajudam a ilustrar as vantagens do vLLM:

Comparação de Rendimento (Mistral-7B em GPU A100):

  • vLLM: ~3.500 tokens/segundo com 64 usuários concorrentes
  • HuggingFace Transformers: ~250 tokens/segundo com mesma concorrentência
  • Ollama: ~1.200 tokens/segundo com mesma concorrentência
  • Resultado: vLLM fornece melhoria de 14x em relação a implementações básicas

Eficiência de Memória (LLaMA-2-13B):

  • Implementação padrão: 24GB VRAM, 32 sequências concorrentes
  • vLLM com PagedAttention: 24GB VRAM, 128 sequências concorrentes
  • Resultado: 4x mais solicitações concorrentes com a mesma memória

Latência Sob Carga (Mixtral-8x7B em 2xA100):

  • vLLM: Latência P50 180ms, Latência P99 420ms a 100 req/s
  • Serviço padrão: Latência P50 650ms, Latência P99 3.200ms a 100 req/s
  • Resultado: vLLM mantém latência consistente sob carga alta

Esses benchmarks demonstram por que o vLLM se tornou o padrão de fato para serviço de LLMs em produção onde o desempenho importa.

Análise de Custos

Entender as implicações de custo de escolher o vLLM:

Cenário: Servindo 1M de solicitações/dia

Com Serviço Padrão:

  • Necessário: 8x GPUs A100 (80GB)
  • Custo AWS: ~$32/hora × 24 × 30 = $23.040/mês
  • Custo por 1M de tokens: ~$0.75

Com vLLM:

  • Necessário: 2x GPUs A100 (80GB)
  • Custo AWS: ~$8/hora × 24 × 30 = $5.760/mês
  • Custo por 1M de tokens: ~$0.19
  • Economia: $17.280/mês (redução de 75%)

Essa vantagem de custo cresce com a escala. Organizações que servem bilhões de tokens mensalmente economizam centenas de milhares de dólares usando o serviço otimizado do vLLM 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 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 exposto diretamente à internet:

# Exemplo de NetworkPolicy 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 abuso:

# 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 multi-tenant, 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

Da OpenAI para o vLLM

Migrar da OpenAI para o vLLM auto-hospedado é simples graças à compatibilidade de 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://seu-servidor-vllm.com/v1",
    api_key="sua-chave-interna"  # 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: atualizar base_url e o nome do model. Todo o resto do código permanece idêntico.

Do Ollama para o vLLM

O Ollama usa um formato de API diferente. A mudança básica no lado do cliente é alternar do endpoint REST do Ollama para a API compatível com OpenAI do vLLM:

API Ollama:

import requests

response = requests.post('http://localhost:11434/api/generate',
    json={'model': 'llama2', 'prompt': 'Por que o céu é azul?'})

Equivalente 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?"
)

Para um guia de migração completo cobrindo seleção de modelo, templates de chat, migração em estágios e uma lista de verificação prática, consulte Ollama para vLLM: Quando Migrar Seu Servidor Local de LLM.

Do HuggingFace Transformers para o 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 rápido com recursos emocionantes no roteiro:

Serviço Desagregado: Separando pré-preenchimento (processamento de prompt) e decodificação (geração de tokens) em GPUs diferentes para otimizar a utilização de recursos. O pré-preenchimento é limitado por computação, enquanto a decodificação é limitada por memória, portanto, executá-los em hardware especializado melhora a eficiência.

Inferência Multi-Nó: Distribuir modelos muito grandes (100B+ parâmetros) entre várias máquinas, permitindo o serviço de modelos muito grandes para configurações de nó único.

Quantização Aprimorada: Suporte para novos formatos de quantização como GGUF (usado por llama.cpp) e integração aprimorada AWQ/GPTQ para melhor desempenho com modelos quantizados.

Melhorias na Decodificação Especulativa: Modelos de rascunho mais eficientes e estratégias de especulação adaptativa para alcançar acelerações maiores sem perda de precisão.

Otimizações de Atenção: FlashAttention 3, atenção em anel para contextos extremamente longos (100K+ tokens) e outros mecanismos de atenção de ponta.

Melhor Cobertura de Modelos: Expansão do suporte para modelos multimodais (modelos de visão-linguagem), modelos de áudio e arquiteturas especializadas à medida que surgem.

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. Para uma comparação mais ampla do vLLM com outras infraestruturas de LLM locais e em nuvem, confira nosso Hospedagem de LLM: Infraestrutura Local, Auto-hospedada e em Nuvem Comparada.

Artigos Relacionados Neste Site

  • Hospedagem Local de LLM: Guia Completo 2026 - Ollama, vLLM, LocalAI, Jan, LM Studio & Mais - Comparação abrangente de 12+ ferramentas de hospedagem local de LLM, incluindo análise detalhada do vLLM ao lado de Ollama, LocalAI, Jan, LM Studio e outros. Cobre maturidade de API, suporte a chamada de ferramentas, compatibilidade GGUF e benchmarks de desempenho para ajudar a escolher a solução certa.

  • Guia de Comandos Ollama - Referência completa de comandos e guia de atalhos do Ollama cobrindo instalação, gerenciamento de modelos, uso de API e melhores práticas para implantação local de LLM. Essencial para desenvolvedores usando Ollama junto ou em vez de vLLM.

  • Início Rápido llama.cpp com CLI e Servidor - Inferência leve em C/C++ para modelos GGUF com llama-cli e llama-server compatível com OpenAI. Ideal quando você precisa de controle fino, implantação offline ou uma stack mínima sem Python.

  • Docker Model Runner vs Ollama: Qual Escolher? - Comparação aprofundada do Model Runner do Docker e Ollama para implantação local de LLM, analisando desempenho, suporte a GPU, compatibilidade de API e casos de uso. Ajuda a entender o cenário competitivo em que o vLLM opera.

  • Guia de Comandos Docker Model Runner: Comandos & Exemplos - Guia de atalhos prático do Docker Model Runner com comandos e exemplos para implantação de modelos de IA. Útil para equipes comparando a abordagem do Docker com as capacidades especializadas de serviço de LLM do vLLM.

Recursos Externos e Documentação

  • Repositório GitHub do vLLM - Repositório oficial do vLLM com código-fonte, documentação abrangente, guias de instalação e discussões da comunidade ativas. Recurso essencial para se manter atualizado com os últimos recursos e solucionar problemas.

  • Documentação do vLLM - Documentação oficial cobrindo todos os aspectos do vLLM, desde a configuração básica até a configuração avançada. Inclui referências de API, guias de ajuste de desempenho e melhores práticas de implantação.

  • Papel Acadêmico PagedAttention - Papel acadêmico introduzindo 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çamento, benchmarks de desempenho, mergulhos técnicos e estudos de caso da comunidade de implantações em produção.

  • Hub de Modelos HuggingFace - Repositório abrangente de LLMs de código aberto que funcionam com o vLLM. Pesquise modelos por tamanho, tarefa, licença e características de desempenho para encontrar o modelo certo para seu caso de uso.

  • Documentação Ray Serve - Documentação do framework Ray Serve para construir implantações escaláveis e distribuídas do vLLM. O Ray fornece recursos avançados como autoescalonamento, serviço multi-modelo e gerenciamento de recursos para sistemas de produção.

  • NVIDIA TensorRT-LLM - TensorRT-LLM da NVIDIA para inferência altamente otimizada em GPUs NVIDIA. Alternativa ao vLLM com estratégias de otimização diferentes, útil para comparação e compreensão do cenário de otimização de inferência.

  • Referência da API OpenAI - Documentação oficial da API OpenAI com a qual a API do vLLM é compatível. Consulte esta referência ao construir aplicações que precisam funcionar tanto com endpoints da OpenAI quanto com vLLM auto-hospedado de forma intercambiável.

Assinar

Receba novos artigos sobre sistemas, infraestrutura e engenharia de IA.