localaiforum
Iniciar sesión
Guía › Ejecución y servicio

Motores de inferencia comparados

El motor es el programa que convierte pesos en tokens: carga el archivo,
corre la pasada hacia adelante del transformer y habitualmente habla HTTP
encima. La buena noticia es que casi todo motor corre el mismo modelo más
o menos a la misma velocidad en el mismo hardware — la elección de motor
va de flujo de trabajo, soporte de formatos y concurrencia, no de tok/s
en bruto. La mala noticia es la misma: comprar benchmarks entre ellos es
mayormente esfuerzo desperdiciado.

El panorama

Motor Qué es Formatos Alcance de hardware Hecho para
llama.cpp núcleo de inferencia en C/C++ con servidor integrado GGUF CPU, CUDA, ROCm, Metal, Vulkan — el mayor alcance El cimiento; corre casi en todas partes
Ollama llama.cpp envuelto con una librería de modelos, CLI y REST GGUF Lo que soporte llama.cpp Uso de escritorio sin fricción
LM Studio GUI pulida más un servidor compatible con OpenAI GGUF (y MLX en Mac) GUI Windows/macOS/Linux Gente que quiere botones, no flags
vLLM motor de servicio en Python: atención paginada, procesamiento por lotes continuo safetensors CUDA (más algo de ROCm/TPU) Servicio concurrente de calidad de centro de datos
SGLang motor de servicio con caché de prefijos RadixAttention safetensors CUDA Salida estructurada rápida; agentes que comparten prefijos
exllamav2 cargador solo GPU afinado para velocidad de decodificación EXL2, GPTQ Solo CUDA Máximos tok/s de un solo usuario en una GPU NVIDIA de consumo
MLX framework de arrays de Apple; mlx-lm corre modelos sobre él MLX Apple silicon La ruta práctica rápida en Macs recientes
transformers (HF) la implementación de referencia de la que todo se porta safetensors CPU, CUDA Comprobaciones de corrección, experimentos, fontanería de entrenamiento

Una nota de linaje: Ollama y LM Studio corren ambos llama.cpp por
debajo. Compararlos con llama.cpp es comparar empaquetados, no
inferencia.

También conviene saber: llama.cpp distribuye más que un servidor —
herramientas de cuantización y conversión, un arnés de benchmark y
bindings para una docena de lenguajes.

Detalles en profundidad

vLLM nació de la idea de la atención paginada (véase
concurrencia): trata la memoria de GPU como un
sistema operativo trata la RAM, y caben muchas más peticiones. Es la
respuesta por omisión a «tengo un servidor con GPU y tráfico real».

SGLang cachea prefijos entre peticiones (RadixAttention): si 40
agentes comparten el mismo prompt de sistema de dos páginas, el prompt se
procesa una vez, no 40. También es conocido por su decodificación
restringida rápida — véase salida estructurada.

exllamav2 es el filo cortante para exactamente un nicho: un solo
usuario en una sola GPU NVIDIA que quiere el máximo tok/s por bit de
cuantización. La historia de servidor y la amplitud de hardware son
finas; el nicho es real.

MLX es el framework de ML de Apple, construido para memoria
unificada. A fecha de redacción mlx-lm a menudo supera al camino Metal
de llama.cpp en modelos grandes — lo bastante cerca de que en una Mac
valga la pena probar ambos (más en Apple silicon).

transformers es la referencia lenta y fiel: cuando un motor
cuantizado hace algo raro, correr el mismo modelo a través de él responde
«¿es el motor o el modelo?». Es también la fontanería bajo las
herramientas de ajuste fino (véase ajuste fino).

Elige por necesidad

Tú eres... Empieza con
Chateando en tu propio escritorio Ollama o LM Studio
Scripteando desde la shell (tuberías, cron, herramientas pequeñas) La API REST de Ollama, o llama-server
Construyendo un backend de app con tráfico ligero llama-server — un proceso, cero ops
Sirviendo a muchos usuarios concurrentes vLLM o SGLang
Corriendo flotas de agentes que comparten prompts de sistema largos SGLang o vLLM; véase agentes
Un hogar todo-Mac Ollama/LM Studio primero; MLX si quieres más velocidad

Dos notas sobre la tabla:

  • «Empieza con» no es «te conformas con» — todo motor de escritorio lee
    el mismo GGUF, así que probar un segundo cuesta cinco minutos, no una
    migración.
  • Cuando compares, mantén todo constante: mismo modelo, misma
    cuantización, mismo prompt, modelo ya en caliente.

La división de formatos refleja la división escritorio/servidor

GGUF contra safetensors (véase formatos de modelo)
no es solo una preferencia de contenedor — decide tu motor. GGUF es el
formato de archivo único, pre-cuantizado, corre-donde-sea, y todo el
ecosistema de escritorio (llama.cpp, Ollama, LM Studio) está construido
sobre él. safetensors es el formato de tensores fragmentados del
ecosistema Hugging Face; los motores de servidor de alto rendimiento
(vLLM, SGLang, transformers) lo consumen, normalmente cuantizado al vuelo
(variantes AWQ/GPTQ) en vez de preempaquetado.

Así que el árbol de decisión real es corto: escritorio y un solo usuario
→ motores GGUF; servidor y concurrencia → motores safetensors. Todo lo
demás es detalle.

Cuando algo «no puede correr», comprueba primero el formato — la mitad de
«el motor X no puede correr el modelo Y» es un desajuste
GGUF/safetensors, no una brecha de capacidad.

La sobrecarga no es la historia

En hardware idéntico con cuantización idéntica, los motores quedan dentro
de un 10–20% entre sí en decodificación de flujo único — a menudo porque
comparten backend. Lo que de verdad mueve tu velocidad experimentada por
múltiplos, no por porcentajes:

  • Si el modelo ya está cargado — una carga en frío cuesta de segundos a
    un minuto.
  • Si toda la conversación se reenvía cada turno — coste de contexto,
    véase tokens.
  • Si las peticiones se encolan unas detrás de otras — véase
    concurrencia.
  • Si las capas están en la GPU — véase controles del motor.
Misma GPU, mismo 8B Q4_K_M, flujo único (ilustrativo, no especificaciones):
llama.cpp / Ollama / LM Studio    ~130–145 tok/s   (el mismo motor por debajo)
exllamav2 EXL2 ~4bpw              ~160–180 tok/s   (cargador afinado para decodificar)

Misma GPU, 8 flujos de chat concurrentes:
llama-server cola serial          cada flujo espera; rendimiento total plano
vLLM                              todos los flujos cerca de la velocidad de flujo único

Elige el motor que encaje con tu flujo de trabajo, y gasta tu energía en
patrones de E/S en vez de benchmarks de motores.

Un archivo, muchos motores

Un GGUF que descargaste para Ollama también corre en llama.cpp
directamente y en LM Studio — los motores no convierten ni re-descargan;
los apuntas al mismo archivo (Ollama puede importar una ruta local con
un Modelfile de una línea). Lo mismo vale del lado servidor con los
safetensors entre vLLM y SGLang. Consecuencia práctica: no hay
encasillamiento a nivel de archivo, y equivocarte de motor te cuesta
minutos.

Por eso esta página insiste en el flujo de trabajo sobre los benchmarks:
cuando tus necesidades cambian, los modelos que ya descargaste se mueven
contigo.

Cuándo migrar de Ollama

Los valores por omisión de Ollama son excelentes hasta que dejan de
serlo. Pasa a un motor de servicio cuando:

  • Necesitas concurrencia sostenida más allá de un puñado de flujos
    (véase concurrencia).
  • Quieres caché de prefijos entre muchos agentes que comparten un prompt
    de sistema (SGLang).
  • Debes servir cuantizaciones safetensors AWQ/GPTQ directamente del
    ecosistema HF.
  • Estás haciendo pruebas de carga de una funcionalidad de producto antes
    de enviarla.
  • Necesitas paralelismo de tensores multi-GPU para repartir un modelo
    grande entre tarjetas.

Hasta que una de esas sea cierta, la comodidad vale más que el
rendimiento.

Relacionados: Formatos de modelo · Controles del motor · Servir un endpoint · Elegir un modelo