Ollama vs vLLM: Benchmarks y Kubernetes Ready
Tabla de contenidos
Ollama vs vLLM: Benchmarks y Preparación para Kubernetes
Parte 2 de 4. La Parte 1 cubrió arquitectura y diseño. La Parte 3 cubre el marco de decisión.
Rendimiento y escalabilidad
Ejecuté benchmarks en NVIDIA A100 80GB PCIe con Llama 3 8B Instruct en ambas herramientas.
Entorno: NVIDIA A100 80GB | Ubuntu 22.04 | CUDA 12.4 | Ollama 0.3.0 | vLLM 0.5.1. Para más configuraciones de hardware, consulta mis benchmarks de inferencia LLM.
Prueba de rendimiento (tokens/segundo)
| Métrica | Ollama | vLLM | Delta |
|---|---|---|---|
| Solicitud única (batch=1) | 85 t/s | 92 t/s | +8% vLLM |
| 4 solicitudes concurrentes | 110 t/s agregado | 340 t/s agregado | +209% vLLM |
| 16 solicitudes concurrentes | 125 t/s agregado | 1,180 t/s agregado | +844% vLLM |
| 32 solicitudes concurrentes | 130 t/s agregado | 2,050 t/s agregado | +1,477% vLLM |
Prueba de latencia (tiempo al primer token, TTFT)
| Métrica | Ollama | vLLM | Delta |
|---|---|---|---|
| Solicitud única | 45 ms | 38 ms | -16% vLLM |
| 4 solicitudes concurrentes | 180 ms | 42 ms | -77% vLLM |
| 16 solicitudes concurrentes | 720 ms | 48 ms | -93% vLLM |
Uso de recursos (16 solicitudes concurrentes)
| Métrica | Ollama | vLLM | Delta |
|---|---|---|---|
| GPU VRAM (GB) | ~18 GB | ~14 GB | -22% vLLM |
| Utilización GPU | 65% | 98% | +51% vLLM |
| CPU (cores) | 2.1 | 3.8 | +81% vLLM |
Para un usuario único, las diferencias apenas se notan. Al escalar, PagedAttention y continuous batching de vLLM superan a Ollama. vLLM también consume menos VRAM por su gestión de memoria caché KV.
Facilidad de uso y experiencia del desarrollador
Ollama es más simple. Su CLI es intuitiva:
ollama pull llama3.1ollama run llama3.1La API REST es minimalista:
curl http://localhost:11434/api/generate -d '{ "model": "llama3.1", "prompt": "Why is the sky blue?"}'La gestión de modelos opera en piloto automático: descarga, actualiza y ofrece Modelfiles.
vLLM requiere más configuración. El comando mínimo es directo:
python -m vllm.entrypoints.openai.api_server \ --model meta-llama/Meta-Llama-3-8B-Instruct \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.9Ajustarlo para producción requiere entender tamaños de lote, longitudes máximas, cuantización de caché KV y políticas de programación.
Soporte de modelos y cuantización
Ollama usa GGUF con cuantizaciones: Q4_0, Q4_K_M, Q5_K_M, Q8_0 y FP16. Su biblioteca aloja cientos de modelos.
vLLM requiere formato HuggingFace Transformers (safetensors) y soporta AWQ, GPTQ y FP8, no GGUF. No puedes usar la biblioteca de Ollama, necesitas descargar de HuggingFace.
Para modelos de vanguardia, vLLM agrega soporte más rápido por su integración con Transformers. Para modelos cuantizados por la comunidad, el ecosistema GGUF de Ollama es el estándar.
Compatibilidad API e integraciones
Ollama expone una API REST con compatibilidad parcial con OpenAI. El endpoint /v1/chat/completions existe, pero carece de paridad completa, streaming funciona, funciones y herramientas son limitadas.
vLLM expone API totalmente compatible con OpenAI, streaming, funciones, herramientas y embeddings. Si migras, vLLM es la opción más directa.
Preparación para Kubernetes
Ambas herramientas se ejecutan bien en Kubernetes, aunque sus modelos operativos difieren.
Ollama en Kubernetes es directo: Deployment, Service, PVC para caché. Cubro la configuración en Despliega Ollama en Kubernetes. El escalamiento es principalmente vertical ya que Ollama no distribuye inferencia entre GPUs. Cada réplica opera independientemente.
vLLM en Kubernetes soporta paralelismo tensor y de pipeline, un modelo abarca múltiples GPUs o nodos. Consulta mi guía sobre desplegar vLLM en producción. Incluye Helm charts oficiales e integración con KubeRay.
| Aspecto | Ollama | vLLM |
|---|---|---|
| Multi-GPU modelo único | No | Sí (paralelo tensor/pipeline) |
| Escalamiento horizontal | Réplicas con persistencia de sesión | Réplicas + balanceo de carga |
| Caché de modelos | PVC local | PVC local o sistema de archivos compartido |
| Helm chart oficial | Comunidad | Oficial |
| Amigable para HPA | Moderado | Alto (workers sin estado) |
La Parte 3 presenta el marco de decisión y ruta de migración. La Parte 4 cubre costos, comunidad y veredicto.
Preguntas frecuentes
¿Por qué vLLM rinde mejor bajo concurrencia? vLLM usa continuous batching, agrupa solicitudes en lotes en la GPU. Combinado con PagedAttention, satura la GPU mejor que Ollama.
¿Puedo usar los modelos de Ollama con vLLM? No directamente. Ollama usa GGUF, mientras que vLLM requiere HuggingFace safetensors. Necesitas descargar el modelo desde HuggingFace.
¿Funciona vLLM en Kubernetes sin GPU? No. vLLM requiere GPUs NVIDIA. Para inferencia solo CPU, Ollama vía llama.cpp es la opción adecuada.
¿Soporta Ollama paralelismo tensor? No. Ollama no distribuye inferencia entre GPUs. Para modelos mayores de 70B, necesitas vLLM con paralelismo tensor.
¿Qué cuantización debo usar en producción? Para Ollama, Q4_K_M ofrece el mejor equilibrio entre calidad y velocidad para modelos 7B-13B. Para vLLM, AWQ-4bit es excelente, y FP8 en H100 ideal para despliegues grandes.