Skip to content

Instantly share code, notes, and snippets.

@mateolafalce
Last active May 20, 2026 12:12
Show Gist options
  • Select an option

  • Save mateolafalce/33e508d95fc61401c04e58edddf24c0f to your computer and use it in GitHub Desktop.

Select an option

Save mateolafalce/33e508d95fc61401c04e58edddf24c0f to your computer and use it in GitHub Desktop.

Benchmark de arranque en frío

vLLM vs Ollama

Generado: 2026-05-18T16:27:24+00:00

Entorno

  • GPU: NVIDIA GeForce RTX 3070, 8192 MiB, 595.58.03
  • Repeticiones medidas por celda: 5
  • Motores: vllm, ollama
  • Prewarm (sin medir): sí
  • Timeout máx. por arranque: 1800 s

Metodología

Arranque en frío = tiempo desde que docker compose up -d retorna hasta el primer token generado correctamente ante una petición fija a la API OpenAI-compatible (/v1/chat/completions, max_tokens=1, mismo prompt, mismo cliente para ambos motores).

  • Captura la carga eager de vLLM (el modelo se carga al arrancar el proceso; /health recién responde con el modelo en VRAM) y la carga lazy de Ollama (el server responde rápido, pero el modelo se carga a VRAM en la primera petición de inferencia). El healthcheck NO se usa como criterio de "listo": sería injusto (el de Ollama da 200 sin modelo cargado).
  • Disco caliente, sin sudo: no se dropea el page cache. Un prewarm sin medir por (motor, modelo) baja los pesos (descarga HF / ollama pull) y calienta el page cache; las repeticiones medidas arrancan todas en el mismo estado de disco. No incluye el tiempo de descarga inicial.
  • Secuencial: una sola GPU y puertos compartidos (vLLM 8005, Ollama 11434). Se levanta un modelo, se mide, se baja (compose down sin -v, los pesos quedan en disco), se espera a que la VRAM se libere y recién sigue el siguiente.
  • Métrica reportada: mediana (robusta ante colas), con min/max y desvío. Promedio evitado a propósito.

Resultados

Par Comp. vLLM mediana (min/max) Ollama mediana (min/max) Ganador Ratio
deepseek-r1-distill-llama-8b 48.37 (min 48.36 / max 51.37, n=5) 49.1 (min 48.47 / max 51.67, n=5) vLLM 1.02× más rápido
gemma4-e2b 103.63 (min 100.64 / max 106.78, n=5) 57.74 (min 56.49 / max 59.72, n=5) Ollama 1.79× más rápido
granite-4.1-8b 48.3 (min 48.29 / max 48.3, n=5) 50.5 (min 48.77 / max 51.24, n=5) vLLM 1.05× más rápido
llama-3.1-8b 51.38 (min 51.37 / max 51.39, n=5) 53.76 (min 52.95 / max 56.17, n=5) vLLM 1.05× más rápido
mistral-7b-instruct-v0.3 45.39 (min 45.39 / max 48.39, n=5) 48.79 (min 48.45 / max 50.6, n=5) vLLM 1.07× más rápido
phi-4-mini-instruct 54.33 (min 51.33 / max 54.34, n=5) 57.72 (min 57.07 / max 59.6, n=5) vLLM 1.06× más rápido
qwen2.5-7b-instruct 48.31 (min 48.3 / max 51.31, n=5) 44.99 (min 43.09 / max 45.57, n=5) Ollama 1.07× más rápido
qwen3.5-9b 178.63 (min 172.58 / max 193.58, n=5) 46.99 (min 46.45 / max 48.88, n=5) Ollama 3.80× más rápido
qwen3-vl-8b 57.38 (min 57.38 / max 57.42, n=5) 67.85 (min 67.28 / max 69.51, n=5) vLLM 1.18× más rápido

Resumen

  • Sobre 7 pares comparables con datos válidos: vLLM gana el arranque en frío en 4, Ollama en 3.
  • Mediana de medianas: vLLM 48.37 s, Ollama 49.1 s.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment