Es un servidor inferencial optimizado (usa paged attention) que soporta modelos como Llama 3, Mistral, Gemma, Phi, Qwen, etc.

Ofrece una API OpenAI-compatible, perfecta para integrarse fácilmente.
Vamos a crear el docker compose que nos permitirá desplegarlo:
Archivo: docker-compose.yml
version: "3.9"
services:
vllm:
image: vllm/vllm-openai:latest
container_name: vllm
restart: unless-stopped
ports:
- "8000:8000" # Puerto de la API OpenAI
environment:
- MODEL_NAME=meta-llama/Meta-Llama-3-8B-Instruct
# Cambia por cualquier modelo disponible en Hugging Face, por ejemplo:
# - mistralai/Mistral-7B-Instruct-v0.3
# - meta-llama/Meta-Llama-3-8B
# - TheBloke/Llama-2-7B-Chat-GGUF (si usas variantes cuantizadas)
# - huggingface_token=tu_token (opcional si el modelo es privado)
volumes:
- ./models:/root/.cache/huggingface/hub # caché local de modelos
command: >
--model $(MODEL_NAME)
--port 8000
--host 0.0.0.0
--max-num-batched-tokens 4096
--tensor-parallel-size 1
--gpu-memory-utilization 0.90
Cómo usarlo
- Guarda el archivo como
docker-compose.yml. - Asegúrate de tener Docker y Docker Compose instalados.
- Ejecuta:
docker compose up -d - El contenedor descargará el modelo automáticamente desde Hugging Face (puede tardar la primera vez).
- Una vez levantado, tendrás una API en:
http://localhost:8000/v1Compatible con el formato OpenAI (puedes usarcurl, Postman, LangChain, n8n, OpenWebUI…).
Probar que funciona
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": "Hola, ¿quién eres?"}]
}'
Deberías recibir una respuesta tipo JSON del modelo.
- Si quieres usar un modelo distinto, cambia la línea
MODEL_NAME=. - Puedes guardar los modelos localmente (en
./models) para no volver a descargarlos. - Compatible con Nginx Proxy Manager o traefik si quieres servirlo en un dominio (
https://api.midominio.com).
Si queremos acceder a la GPU tendremos que usar el siguiente docker compose:
services:
vllm:
image: vllm/vllm-openai:latest
container_name: vllm
restart: unless-stopped
# IMPORTANTE: Configura el runtime de NVIDIA para acceso a la GPU
runtime: nvidia
ports:
- "8000:8000" # Puerto de la API OpenAI
environment:
- MODEL_NAME=meta-llama/Llama-3.2-3B
# Cambia por cualquier modelo disponible en Hugging Face, por ejemplo:
# - mistralai/Mistral-7B-Instruct-v0.3
# - meta-llama/Meta-Llama-3-8B
# - meta-llama/Meta-Llama-3-70B
# - meta-llama/Llama-3.2-3B
# - Qwen/Qwen3-0.6B
# - TheBloke/Llama-2-7B-Chat-GGUF (si usas variantes cuantizadas)
# - huggingface_token=tu_token (opcional si el modelo es privado)
# - OPENAI_API_KEY=${OPENAI_API_KEY}
- HUGGING_FACE_HUB_TOKEN=${HUGGING_FACE_HUB_TOKEN}
volumes:
- ./model:/root/.cache/huggingface
command: >
--model meta-llama/Llama-3.2-3B
--port 8000
--host 0.0.0.0
--max-num-batched-tokens 4096
--tensor-parallel-size 1
--gpu-memory-utilization 0.80
--dtype float16
--max-model-len 4096
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
ipc: host
networks:
- docker-network
networks:
docker-network:
driver: bridge
external: true

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.