Key Takeaways
- Headless = sin UI de chat, solo API. Ollama, vLLM y LM Studio pueden ejecutarse en modo headless.
- Ollama headless: `ollama serve` inicia la API en localhost:11434. Sin UI.
- vLLM headless: `vllm serve` inicia la API en el puerto 8000. Mayor rendimiento que Ollama.
- Producción: usa vLLM para alto rendimiento, Ollama para simplicidad, nginx para balanceo de carga y seguridad.
- A partir de abril de 2026, vLLM es el estándar de producción para servicios de alto rendimiento.
¿Qué significa headless?
Headless significa que el software se ejecuta como servicio sin interfaz gráfica de usuario. Interactúas mediante llamadas a la API (REST, gRPC) en lugar de hacer clic en botones.
Ventajas: menor uso de recursos (sin sobrecarga de UI), más fácil de automatizar, adecuado para servidores, más sencillo de escalar.
Desventajas: sin retroalimentación visual, requiere conocimientos de API, más difícil de depurar sin logs.
¿Cómo ejecutar Ollama en modo headless?
Ollama puede ejecutarse como servicio de API puro:
# Run Ollama headless
ollama serve
# This starts the API at http://localhost:11434/v1
# No chat UI, just a background service
# Use the API from Python
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
response = client.chat.completions.create(
model="llama3.2:3b",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
# Or from curl
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{{"model": "llama3.2:3b", "messages": [{{"role": "user", "content": "Hello"}}]}}'¿Cómo ejecutar vLLM en modo headless?
vLLM está optimizado para despliegues headless de alto rendimiento:
# Install vLLM
pip install vllm
# Run headless with API
vllm serve llama-3.1-8b-instruct \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization 0.9
# Access at http://localhost:8000/v1
# Supports 50+ concurrent requests
# Use from Python (same as Ollama)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="anything")
response = client.chat.completions.create(
model="meta-llama/Llama-2-7b-chat-hf",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)¿Cómo desplegar en producción?
1. Usa vLLM para alto rendimiento (50+ usuarios simultáneos).
2. Usa Ollama para simplicidad (usuario único o equipos pequeños).
3. Agrega un proxy inverso nginx para balanceo de carga y autenticación.
4. Monitorea la memoria GPU -- los modelos no deben superar el 80% de VRAM.
5. Configura el logging -- registra errores y métricas de rendimiento.
6. Usa systemd o Docker para gestión del servicio (reinicio automático ante fallos).
# Example: Deploy vLLM on a server via Docker
docker run --gpus all -p 8000:8000 \
--env VLLM_API_KEY="your-secret-key" \
vllm/vllm-openai:latest \
--model meta-llama/Llama-2-13b-chat-hf \
--tensor-parallel-size 2 # Use 2 GPUs
# Nginx reverse proxy config (optional)
# server {
# listen 80;
# location / {
# proxy_pass http://localhost:8000;
# proxy_set_header Authorization "Bearer $http_authorization";
# }
# }¿Cómo monitorear despliegues headless?
Monitorea la memoria GPU, la latencia de solicitudes y las tasas de error:
# Monitor GPU usage (nvidia-smi)
watch nvidia-smi # Updates every 2 seconds
# Monitor request latency
# Add logging to your client code
import time
start = time.time()
response = client.chat.completions.create(...)
latency = time.time() - start
print(f"Request took {latency:.2f} seconds")
# Monitor vLLM logs
docker logs -f <container_id>
# Check error rates
# Parse logs for errors or use a monitoring tool (Prometheus + Grafana)Errores comunes en despliegues headless
- No monitorear la VRAM. Los modelos pueden quedarse sin memoria sin previo aviso. Monitorea la GPU antes de desplegar en producción.
- Exponer la API sin autenticación. Los servicios headless frecuentemente quedan expuestos en redes. Siempre agrega autenticación (clave API, firewall).
- No establecer límites de recursos. Un modelo puede consumir el 100% de la GPU y bloquear otras tareas. Usa `--gpu-memory-utilization` en vLLM.
- Esperar que Ollama escale a 100+ usuarios. Usa vLLM para alta concurrencia. Ollama puede manejar pocos usuarios simultáneos.
- No probar el failover. Si tu servidor de modelos falla, las solicitudes quedan colgadas. Usa un balanceador de carga y health checks.
Preguntas frecuentes sobre despliegues headless
¿Pueden Ollama y vLLM ejecutarse en la misma GPU?
No de forma simultánea. Competirán por la VRAM. Ejecuta uno u otro, o usa varias GPUs.
¿Es seguro exponer la API a internet?
No, sin autenticación no es seguro. Siempre coloca una clave API, firewall o proxy inverso por delante. Nunca expongas localhost:11434 directamente.
¿Cuántos usuarios simultáneos puede manejar Ollama?
Típicamente 1-3 sin cola de solicitudes. Para más usuarios, usa vLLM o agrega un sistema de colas.
¿Cuál es la diferencia de rendimiento entre Ollama y vLLM?
Solicitud individual: velocidad similar. Múltiples solicitudes simultáneas: vLLM es 5-10× mejor porque agrupa las solicitudes en lotes.
Fuentes
- Ollama GitHub -- github.com/ollama/ollama
- vLLM GitHub -- github.com/vllm-project/vllm
- vLLM Deployment Guide -- docs.vllm.ai/en/serving/deploying_with_docker.html
- Ollama API Docs -- github.com/ollama/ollama/blob/main/docs/api.md