Wednesday, 12 August 2026 | Updating Daily AI insight, written for builders

vLLM com Docker: Execute um servidor de inferência acelerado por GPU em minutos

  • Baixar vllm/vllm-openai:latest e execute-o com --runtime nvidia --gpus all --ipc=host para obter um servidor compatível com OpenAI acelerado por GPU.
  • Monte ~/.cache/huggingface no contêiner para que os pesos dos modelos sobrevivam a reinicializações do contêiner.
  • O servidor expõe uma API compatível com OpenAI na porta 8000; teste-a com curl http://localhost:8000/v1/models.
  • As três flags de ajuste mais importantes são --tensor-parallel-size, --max-model-len, e --gpu-memory-utilization.

O vLLM publica uma imagem oficial do Docker, vllm/vllm-openai, que inclui um servidor de inferência compatível com OpenAI pronto para uso. O caminho mais rápido: instale o NVIDIA Container Toolkit no host e execute a imagem com --gpus all e um ID de modelo do Hugging Face. Assim que o modelo for baixado, o servidor ficará ativo na porta 8000 e aceitará as mesmas solicitações da API OpenAI.

Pré-requisitos

  • Docker Engine 20.10 ou superior — O Docker Desktop no Windows e no macOS funciona por meio do backend WSL2.
  • GPU NVIDIA com um driver que suporte CUDA 12.x. Execute nvidia-smi para confirmar; a versão de CUDA exibida é a versão máxima suportada pelo seu driver.
  • NVIDIA Container Toolkit — a ponte que permite ao Docker acessar a GPU. Consulte a próxima seção.
  • Memória VRAM suficiente para o seu modelo-alvo. Use o Calculadora de VRAM para verificar antes de baixar o modelo.

Instalando o NVIDIA Container Toolkit

Pule esta seção se docker run --gpus all nvidia/cuda:12.0-base nvidia-smi já funcionar em sua máquina.

Linux (Ubuntu/Debian):

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | 
  sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | 
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | 
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

RHEL/CentOS: Substitua a URL do repositório deb pela equivalente rpm da documentação da NVIDIA e use dnf no lugar de apt-get.

Windows (WSL2): Instale o driver NVIDIA para Windows no host — nenhuma instalação adicional do toolkit de contêineres é necessária dentro do WSL2. O Docker Desktop gerencia automaticamente a passagem (passthrough) da GPU.

macOS: GPUs NVIDIA não são suportadas no macOS. O vLLM não executa em hardware Apple Silicon via Docker com aceleração por GPU. Para inferência local em dispositivos Apple, considere uma compilação somente para CPU ou outro ambiente de execução.

Comando mínimo de execução

docker run --runtime nvidia --gpus all 
  --ipc=host 
  -v ~/.cache/huggingface:/root/.cache/huggingface 
  -p 8000:8000 
  vllm/vllm-openai:latest 
  --model meta-llama/Meta-Llama-3-8B-Instruct
SinalizarPor que isso importa
--runtime nvidiaEncaminha as chamadas à GPU pelo runtime de contêineres NVIDIA.
--gpus allExpõe todas as GPUs do host. Use "device=0,1" para direcionar GPUs específicas.
--ipc=hostCompartilha o namespace IPC do host. Necessário para a memória compartilhada do PyTorch; omiti-lo causa um erro de barramento (Bus error) ou uma falha relacionada à memória compartilhada.
-v ~/.cache/huggingface:…Monta o cache do Hugging Face do host para que os pesos dos modelos persistam após reinicializações do contêiner.
-p 8000:8000Expõe o servidor compatível com OpenAI no host.
--modelQualquer ID de modelo do Hugging Face ou um caminho local montado no contêiner.

Para baixar um modelo protegido por acesso restrito (como Llama 3, Mistral etc.), também passe -e HUGGING_FACE_HUB_TOKEN=hf_seutoken. Armazene o token em um arquivo .env e passe-o com --env-file .env em vez de inseri-lo diretamente no histórico do seu shell.

Montando o cache do Hugging Face

O vLLM baixa os pesos dos modelos para /root/.cache/huggingface dentro do contêiner. Sem uma montagem de volume, cada comando docker run rebaixa integralmente o modelo — frequentemente entre 5 e 80 GB. A linha de montagem é:

-v ~/.cache/huggingface:/root/.cache/huggingface

Se seus modelos estiverem armazenados em um local não padrão, defina -e HF_HOME=/seucaminho e monte esse caminho em vez disso. Para ambientes isolados (air-gapped), baixe o modelo primeiro com huggingface-cli download e, em seguida, passe --model /path/in/container juntamente com uma montagem de volume do diretório de pesos.

Principais flags do servidor vLLM

Essas flags são passadas após o nome da imagem — são argumentos para o processo do servidor vLLM, não para o Docker.

SinalizarPadrãoQuando alterá-las
--tensor-parallel-size N1Defina como o número de GPUs para atendimento multi-GPU. Os cabeçalhos de atenção (attention heads) do modelo devem ser divisíveis por N. Combine com --gpus "device=0,1,..." listando exatamente N dispositivos.
--gpu-memory-utilization 0.X0.90Reduza para 0,75–0,80 se você encontrar erros de OOM (out-of-memory) ou compartilhar a GPU com outros processos.
--max-model-len NConfiguração do modeloLimita o tamanho do cache KV. Útil quando o contexto padrão de um modelo (por exemplo, 128 k) esgotaria a VRAM. Experimente --max-model-len 8192 como primeira redução.
--dtype autoautomáticoSubstitua por bfloat16 ou float16 se a detecção automática escolher uma precisão inesperada.
--quantization awq / gptqnoneAtive para variantes de modelos pré-quantizados. Reduz aproximadamente pela metade o uso de VRAM, com algum custo em qualidade.
--port8000Altere se a porta 8000 já estiver ocupada no host.

Não tem certeza se sua GPU possui VRAM suficiente para um determinado modelo? A Guia de requisitos de VRAM lista modelos comuns Calculadora de VRAM permite que você insira quantização e tamanho de lote. Para decisões de compra de hardware, consulte o guia de recomendações de GPU.

Expondo e testando o endpoint compatível com OpenAI

Assim que o contêiner exibir INFO: Application startup complete, a API estará ativa.

# Listar modelos carregados
curl http://localhost:8000/v1/models

# Conclusão de texto
curl http://localhost:8000/v1/completions 
  -H "Content-Type: application/json" 
  -d '{"model": "meta-llama/Meta-Llama-3-8B-Instruct", "prompt": "A capital da França é", "max_tokens": 20}'

# Conclusão de chat
curl http://localhost:8000/v1/chat/completions 
  -H "Content-Type: application/json" 
  -d '{"model": "meta-llama/Meta-Llama-3-8B-Instruct", "messages": [{"role": "user", "content": "Olá"}]}'

Qualquer cliente compatível com OpenAI — o SDK em Python, LangChain, LlamaIndex — funciona definindo-se openai base_url="http://localhost:8000/v1" e fornecendo qualquer string não vazia como a Para implantações persistentes, um arquivo Compose é mais fácil de gerenciar do que um comando longo api_key.

Exemplo com Docker Compose

docker run docker run completo:

services:
  vllm:
    image: vllm/vllm-openai:latest
    runtime: nvidia
    environment:
      - HUGGING_FACE_HUB_TOKEN=${HF_TOKEN}
    volumes:
      - ~/.cache/huggingface:/root/.cache/huggingface
    ports:
      - "8000:8000"
    ipc: host
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    command: >
      --model meta-llama/Meta-Llama-3-8B-Instruct
      --gpu-memory-utilization 0.90
      --max-model-len 8192

Comece com docker compose up -d. O bloco deploy.resources é o equivalente do Docker Compose v3 para --gpus all.

Falhas comuns e soluções

ErroCausaCorrigir
erro de barramento (Bus error) ou /dev/shm muito pequenoO valor padrão do Docker para /dev/shm é 64 MB — insuficiente para o PyTorch.Adicione --ipc=host --ipc=host --shm-size=8g se você não puder compartilhar o namespace IPC do host.
Erro CUDA: nenhuma imagem de kernel disponívelA versão do CUDA compilada na imagem vLLM excede a suportada pelo seu driver.Executar nvidia-smi para descobrir sua versão máxima suportada do CUDA e, em seguida, use uma tag de imagem versionada correspondente (por exemplo, vllm/vllm-openai:v0.5.5).
torch.cuda.OutOfMemoryErrorOs pesos do modelo mais o cache KV excedem a VRAM disponível.Tente --max-model-len 4096 primeiro. Em seguida, reduza --gpu-memory-utilization para 0,80. Se ainda ocorrer erro de memória insuficiente (OOM), use uma variante quantizada ou uma GPU maior.
permissão negada no diretório de cacheO contêiner é executado como root; o diretório no host pertence a outro usuário.Executar chmod -R a+rw ~/.cache/huggingface no host ou use um volume nomeado do Docker em vez de um bind mount.
O contêiner inicia, mas curl retorna 'connection refused'O modelo ainda está sendo carregado ou -p 8000:8000 está ausente.Aguarde a linha de log Application startup complete . Verifique se o mapeamento de porta está presente no seu comando de execução.

Perguntas frequentes

Qual tag da imagem Docker vLLM devo usar?

vllm/vllm-openai:latest a tag 'latest' acompanha a versão mais recente e é adequada para experimentação. Para produção, fixe uma tag de versão específica (por exemplo, v0.6.0) para garantir a reprodutibilidade das compilações. Cada tag de lançamento no Docker Hub indica a versão do CUDA contra a qual foi compilada, que deve ser menor ou igual à versão suportada pelo seu driver.

Posso executar o vLLM em Docker sem GPU?

A imagem padrão exige uma GPU NVIDIA. A inferência somente em CPU é possível compilando o vLLM a partir do código-fonte com VLLM_TARGET_DEVICE=cpu, mas o throughput é várias ordens de grandeza menor e não é viável para serviços. Para inferência local somente em CPU, alternativas mais adequadas são o llama.cpp ou o Ollama — consulte a Guia do Ollama para comparação.

Como executar um modelo restrito que exige um token do Hugging Face?

Passe o token como uma variável de ambiente: -e HUGGING_FACE_HUB_TOKEN=hf_seutoken. Armazene-o em um arquivo .env e faça referência a ele com --env-file .env para evitar vazamentos no histórico do shell. O servidor usa esse token durante o download inicial do modelo; ele não é necessário após os pesos serem armazenados em cache localmente.

O que faz a opção –tensor-parallel-size e quando devo usá-la?

A paralelização tensorial fragmenta as matrizes de pesos do modelo entre múltiplas GPUs, permitindo executar modelos maiores do que cabem em uma única placa. Defina-a como o número de GPUs que deseja utilizar (2 ou 4 são valores comuns). Esse número deve corresponder à quantidade de GPUs especificada na opção --gpus, e o número de cabeças de atenção do modelo deve ser divisível por esse valor.

Executar o vLLM em Docker é economicamente vantajoso comparado a uma API gerenciada?

Isso depende inteiramente do volume de solicitações. Hospedar você mesmo envolve custos fixos elevados (instância ou hardware com GPU), mas custo marginal quase nulo por solicitação. APIs gerenciadas não têm custo fixo, mas cobram por token. Use a calculadora de autohospedagem versus API para identificar seu ponto de equilíbrio antes de investir em infraestrutura.

Como servir vários modelos simultaneamente?

Execute um contêiner por modelo, cada um mapeado para uma porta diferente no host (por exemplo, 8000, 8001). Atualmente, o vLLM não suporta o atendimento simultâneo de múltiplos modelos a partir de um único processo. Posicione um proxy reverso, como nginx ou Caddy, na frente dos contêineres para rotear as solicitações conforme o nome do modelo para a porta correta.

Escrito por Mustafa Ihsan

Mustafa Ihsan é fundador e editor da Convly.ai. Ele criou e mantém o banco de dados em tempo real de modelos de IA do site, seu índice de desempenho por preço e suas calculadoras gratuitas para requisitos de VRAM, custos de API e economia de hospedagem local. Escreve sobre preços de modelos, resultados de benchmarks e o hardware necessário para executar modelos de IA localmente, preferindo sempre dados mensuráveis às declarações dos fabricantes.

Scroll to Top
Featured on There's An AI For That