Key Takeaways
- Un motor de inferencia es el software C/C++/Python que carga un archivo de modelo y genera tokens. Es independiente de la capa de UI o API.
- llama.cpp = ligero, eficiente en CPU, impulsa Ollama. Ideal para: portátiles de consumo, usuario único, sin dependencias.
- vLLM = nivel producción, máximo rendimiento de GPU, compatible con procesamiento por lotes e inferencia distribuida. Ideal para: servidores API, multiusuario, alto rendimiento.
- Text-Generation-WebUI = herramienta de experimentación rica en funciones con UI web integrada. Ideal para: ajuste fino, pruebas LoRA, ajuste de configuraciones avanzadas.
- A partir de abril de 2026, vLLM lidera el uso en producción, llama.cpp lidera el uso de consumo, y Text-Generation-WebUI lidera los flujos de trabajo de investigación y ajuste fino.
¿Qué es un motor de inferencia?
Un motor de inferencia es el componente de software que carga un archivo de modelo preentrenado y ejecuta las operaciones matemáticas necesarias para generar texto. Es diferente de una interfaz de chat (como Open WebUI o Enchanted UI) o una capa de API (como la API REST de Ollama).
Un despliegue típico de LLM local tiene tres capas:
1. Archivo de modelo (por ejemplo, llama-3.1-8b.gguf) -- los pesos de la red neuronal.
2. Motor de inferencia (por ejemplo, llama.cpp, vLLM) -- carga el modelo y genera tokens.
3. Interfaz o API (por ejemplo, API REST, chat web, extensión de VS Code) -- te permite interactuar con el motor.
Ollama en sí es principalmente un envoltorio alrededor de llama.cpp con una API compatible con OpenAI. vLLM es un motor de inferencia sin UI integrada. Text-Generation-WebUI es un motor de inferencia con UI web integrada.
Comparación de funciones: llama.cpp vs vLLM vs Text-Generation-WebUI
| Función | llama.cpp | vLLM | Text-Gen-WebUI |
|---|---|---|---|
| Tipo | Biblioteca C++ (ligera) | Framework Python (producción) | App Python (experimentación) |
| Soporte GPU | NVIDIA, AMD, Apple Metal | Solo NVIDIA (mejor soporte) | NVIDIA, AMD, CPU |
| Inferencia CPU | Excelente | Deficiente | Buena |
| Rendimiento (tokens/seg) | Medio (1-100) | Muy alto (100-1000+) | Medio (1-100) |
| Soporte de lotes | Limitado | Completo (lotes de 100+) | Limitado |
| UI web integrada | No | No | Sí |
| Ajuste fino LoRA | No directamente | Limitado | Integrado |
| Formatos de cuantización | GGUF, GGML | Precisión completa, 8-bit, 4-bit | GGUF, safetensors, fp16 |
| Dificultad de configuración | Vía Ollama (fácil) | pip install (medio) | Clonar GitHub (medio) |
| Precio | Gratis | Gratis | Gratis |
Entendiendo llama.cpp: La base
llama.cpp es una implementación en C++ de inferencia LLM, escrita originalmente para ejecutar el modelo Llama de Meta en hardware de consumo sin aceleración GPU. A partir de abril de 2026, sigue siendo el motor de inferencia más ligero y portable.
Por qué llama.cpp domina el uso de consumo:
- Sobrecarga de memoria mínima -- puede ejecutarse con solo 8 GB de RAM usando solo CPU.
- Admite múltiples backends de GPU (NVIDIA, AMD, Apple Metal, Intel).
- Formato GGUF: un formato de modelo cuantizado que comprime modelos de 70B a 20-40 GB.
- Impulsa Ollama internamente -- estás usando llama.cpp cada vez que ejecutas Ollama.
llama.cpp no es una aplicación completa; es una biblioteca. Interactúas con él a través de Ollama (la forma más común) o mediante otras herramientas que lo integran. Si quieres usar llama.cpp directamente para ajustes avanzados, necesitas compilarlo e interactuar con él mediante herramientas de línea de comandos o bindings de Python.
Entendiendo vLLM: El estándar de producción
vLLM es un framework de Python diseñado para inferencia de alto rendimiento en clústeres de GPU. Optimiza el servicio de modelos a través de API, con soporte para procesamiento por lotes, inferencia distribuida y programación avanzada.
Por qué vLLM domina la producción:
- Paged Attention: vLLM usa un diseño de memoria novedoso que mejora la utilización de la GPU del ~20% al ~70%, aumentando drásticamente el rendimiento.
- Procesamiento por lotes: Puede procesar 50-100 prompts simultáneamente, sirviendo a más usuarios por GPU.
- Inferencia distribuida: Divide automáticamente un modelo de 70B entre múltiples GPUs.
- Amplio soporte de modelos: Funciona con cualquier modelo de HuggingFace (Llama, Qwen, Mistral, Phi, etc.).
A partir de abril de 2026, la mayoría de los despliegues de LLM local en producción en empresas usan vLLM. La compensación es que vLLM requiere GPUs NVIDIA; tiene un rendimiento deficiente en CPU.
# Install vLLM
pip install vllm
# Run a model via API
vllm serve meta-llama/Llama-3.3-8B-Instruct \
--host 0.0.0.0 --port 8000 \
--gpu-memory-utilization 0.9
# Now accessible at http://localhost:8000/v1/completionsEntendiendo Text-Generation-WebUI: La herramienta del investigador
Text-Generation-WebUI (también llamado oobabooga) es una aplicación Python completa con una interfaz web para experimentar con modelos. Combina inferencia con herramientas integradas para ajuste fino, entrenamiento LoRA, generación de embeddings y pruebas avanzadas de prompts.
Por qué los investigadores usan Text-Generation-WebUI:
- Ajuste fino LoRA integrado: Entrena adaptadores LoRA personalizados sobre modelos base sin necesitar scripts de entrenamiento externos.
- Múltiples motores de inferencia: Puede alternar entre llama.cpp, GPTQ, exllama y otros backends.
- Roleplay de personajes: Sistema integrado para crear y probar personas de personajes.
- Exposición de API: Expone una interfaz FastAPI para uso programático.
- Ecosistema de extensiones: Extensiones construidas por la comunidad para flujos de trabajo personalizados.
Text-Generation-WebUI es más una herramienta de investigación y experimentación que un servidor de producción. La configuración es más compleja (requiere clonar GitHub y gestionar dependencias de Python), pero una vez en funcionamiento, es extremadamente potente para el desarrollo.
¿Qué tan rápido es cada motor? Comparación de rendimiento
El rendimiento (tokens por segundo) depende del tamaño del modelo, el hardware y la optimización del motor. A partir de abril de 2026, estos son los benchmarks del mundo real en hardware de consumo:
| Escenario | llama.cpp | vLLM | Text-Gen-WebUI |
|---|---|---|---|
| Llama 3.1 8B en RTX 4090 (GPU) | 150 tokens/seg | 300 tokens/seg (con procesamiento por lotes) | 150 tokens/seg |
| Llama 3.1 8B en CPU de 8 núcleos | 5 tokens/seg | 0,5 tokens/seg (inutilizable) | 4 tokens/seg |
| Llama 3.1 70B en 2× RTX 4090 | 20 tokens/seg (GPU única) | 100 tokens/seg (distribuido) | 20 tokens/seg |
| Phi-3 3.8B en M4 MacBook Pro | 30 tokens/seg | N/A (sin soporte Metal) | 25 tokens/seg |
¿Qué motor para despliegues de producción?
vLLM es el estándar de producción a partir de abril de 2026. La mayoría de las empresas que ejecutan APIs de LLM local en producción usan vLLM por su optimización de rendimiento y soporte de procesamiento por lotes. Una sola instancia de vLLM puede servir a 50+ usuarios concurrentes en una GPU, frente a 1-2 para llama.cpp.
Sin embargo, la elección de producción depende de tu restricción:
- Servir 100+ solicitudes/día con GPU limitada: Usa vLLM (mejor rendimiento).
- Servir solo con CPU o Apple Silicon: Usa llama.cpp a través de Ollama (mejor soporte CPU).
- Usar modelos Llama específicamente: Tanto llama.cpp como vLLM funcionan; vLLM es más rápido.
- Usar formatos de modelo diversos (GPTQ, GGUF, safetensors): Text-Generation-WebUI admite todos; vLLM requiere precisión completa o formatos de cuantización específicos.
¿Cuándo deberías elegir cada motor?
Usa este marco de decisión:
- llama.cpp (a través de Ollama): Eres un usuario de consumo, no desarrollador, o despliegas en CPU/Apple Silicon. La mejor facilidad de uso general.
- vLLM: Sirves una API con 50+ usuarios concurrentes, tienes GPUs NVIDIA y necesitas el máximo rendimiento. Estándar de producción.
- Text-Generation-WebUI: Estás ajustando modelos fino, probando adaptadores LoRA o experimentando con configuraciones de inferencia avanzadas. La mejor opción para investigación.
Elección del motor de inferencia por región
La elección del motor de inferencia tiene implicaciones directas para el cumplimiento normativo regional y los despliegues empresariales en distintas jurisdicciones regulatorias.
- UE / GDPR: Para despliegues empresariales en la UE, vLLM ejecutándose en las instalaciones mantiene toda la inferencia dentro de la infraestructura de la UE -- no salen tokens, prompts ni respuestas de tus servidores. Para el cumplimiento de BSI IT-Grundschutz alemán, vLLM es el motor de producción recomendado porque proporciona registro de auditoría estructurado a través de métricas Prometheus (endpoint /metrics), y todas las versiones de modelos son fijables mediante IDs de modelos de HuggingFace para la documentación de cumplimiento. Los modelos Mistral (Mistral AI, Francia, Apache 2.0) son la opción preferida de la UE para despliegues de producción con vLLM -- origen europeo, licencia limpia, buen rendimiento. Comando vLLM: `vllm serve mistralai/Mistral-7B-Instruct-v0.3`
- Japón (METI): La gobernanza de IA de METI requiere documentar la infraestructura de inferencia. Las métricas estructuradas de Prometheus de vLLM satisfacen mejor los requisitos de registro de auditoría que el logging por stdout de llama.cpp. Para despliegues empresariales en Japón, Qwen2.5 7B a través de vLLM es la pila recomendada -- tokenización nativa en japonés más rendimiento de producción. Comando vLLM: `vllm serve Qwen/Qwen2.5-7B-Instruct`
- China: Bajo la Ley de Seguridad de Datos de China (数据安全法), toda la inferencia debe permanecer en las instalaciones para datos sensibles. vLLM es compatible con instancias GPU A10 y A100 de Alibaba Cloud. Los modelos Qwen2.5 (Alibaba) están optimizados nativamente para vLLM y proporcionan el mejor rendimiento en lengua china. Para producción empresarial en China: vLLM + Qwen2.5 14B en Alibaba Cloud es la pila estándar a partir de abril de 2026.
Errores comunes con motores de inferencia
- Creer que tienes que elegir entre Ollama y estos motores. Ollama usa llama.cpp internamente. No estás eligiendo Ollama vs vLLM; vLLM es un *backend* alternativo a Ollama, no una app de chat. Ambos tienen su propósito.
- Asumir que vLLM es más rápido en CPU. vLLM tiene un rendimiento deficiente en CPU; llama.cpp es 10 veces más rápido en CPU. Comprueba la disponibilidad de tu GPU antes de elegir vLLM.
- Ejecutar vLLM en una GPU de portátil. vLLM está optimizado para GPUs de centro de datos (RTX 4090, A100). En GPUs de consumo, la sobrecarga del programador de lotes de vLLM puede en realidad ralentizar el rendimiento de una sola solicitud. Usa llama.cpp para portátiles.
- Olvidar que el rendimiento de inferencia no es lo mismo que la latencia de experiencia de usuario. vLLM puede procesar por lotes 100 solicitudes, pero cada solicitud sigue tardando tiempo en generar sus tokens. Alto rendimiento no significa baja latencia.
- Instalar las dependencias de Text-Generation-WebUI incorrectamente. Las instrucciones de GitHub asumen que tienes Git, Python 3.10+ y pip instalados. En Windows, esto suele fallar silenciosamente. Verifica siempre la versión de Python antes de clonar.
Preguntas frecuentes sobre motores de inferencia
¿Puedo cambiar de motor de inferencia sin cambiar mi modelo?
En su mayoría, sí. Los archivos de modelo en formato GGUF funcionan con llama.cpp (Ollama) y Text-Generation-WebUI. vLLM requiere precisión completa o formatos de cuantización específicos. Los modelos safetensors de HuggingFace funcionan con los tres.
¿Qué motor es mejor para Mac?
llama.cpp a través de Ollama. Tiene una excelente optimización para Apple Silicon (serie M). vLLM no admite Metal (GPU de Apple), por lo que el rendimiento en CPU es deficiente. Text-Generation-WebUI funciona en Mac pero es más lento que Ollama.
¿Es vLLM parte de Ollama?
No. Ollama usa llama.cpp internamente. vLLM es un motor de inferencia independiente de UC Berkeley. Sirven propósitos diferentes: Ollama es para simplicidad; vLLM es para rendimiento de producción.
¿Puedo usar vLLM sin GPU?
Técnicamente sí, pero es inutilizablemente lento. vLLM está diseñado para GPU. Para despliegues solo en CPU, usa llama.cpp (Ollama).
¿Escala Text-Generation-WebUI a producción?
No se recomienda. Text-Generation-WebUI es una herramienta de investigación, no un servidor de producción. Carece de funciones como balanceo de carga, monitoreo e inferencia distribuida que los servicios de producción necesitan. Usa vLLM para producción.
¿Qué es Paged Attention y por qué importa?
Paged Attention es el sistema de gestión de memoria de vLLM que toma prestados conceptos de memoria virtual de los sistemas operativos. En lugar de asignar un bloque contiguo fijo de memoria GPU por solicitud, asigna memoria en páginas que pueden compartirse y reutilizarse entre solicitudes. Esto mejora la utilización de la memoria GPU del ~20% al ~70%, permitiendo que vLLM sirva a 3-4 veces más usuarios concurrentes por GPU en comparación con implementaciones de atención ingenuas. Es la razón principal por la que vLLM supera a llama.cpp en escenarios multiusuario.
¿Qué motor debo usar si solo tengo 8 GB de RAM?
llama.cpp a través de Ollama. Con 8 GB de RAM total, un modelo de 7B en Q4_K_M usa ~4,7 GB. llama.cpp maneja esto bien a ~5 tok/seg en CPU o ~80 tok/seg en una GPU dedicada. vLLM requiere significativamente más sobrecarga y funciona mal con RAM de consumo. Text-Generation-WebUI también es viable pero añade más sobrecarga que Ollama.
¿Puedo ejecutar vLLM y Ollama en la misma máquina?
Sí, si la VRAM es suficiente. Ejecútalos en puertos diferentes (vLLM predeterminado: 8000, Ollama predeterminado: 11434). Una configuración típica: Ollama maneja solicitudes de chat rápidas de un solo usuario, vLLM maneja solicitudes de API por lotes. Sin embargo, ambos no pueden cargar el mismo modelo simultáneamente sin duplicar la VRAM. Gestiona qué servicio está activo según tu carga de trabajo.
Fuentes
- Gerganov, G. (2024). "llama.cpp GitHub." https://github.com/ggerganov/llama.cpp -- Código fuente del motor de inferencia en C++ y documentación de cuantización.
- vLLM Team. (2024). "vLLM GitHub." https://github.com/vllm-project/vllm -- Código fuente del motor de inferencia de producción y documentación del servidor API.
- Kwon et al. (2023). "Efficient Memory Management for Large Language Model Serving with PagedAttention." https://arxiv.org/abs/2309.06180 -- Artículo original sobre Paged Attention que explica el enfoque de gestión de memoria de vLLM.
- oobabooga. (2024). "Text-Generation-WebUI GitHub." https://github.com/oobabooga/text-generation-webui -- Código fuente y guía de instalación para Text-Generation-WebUI.