llama.cpp: ¿qué es y hay que abandonar Ollama? ?
llama.cpp es el motor de inferencia en C/C++ que ejecuta los modelos en formato GGUF en CPU y en GPU NVIDIA, AMD, Intel y Apple Silicon; Ollama, LM Studio y KoboldCpp se basan en él. Usarlo directamente, a través de llama-server, no hace que un modelo sea más rápido en el mismo hardware: te da el control sobre ajustes que las aplicaciones basadas en él eligen por ti, como la distribución GPU/CPU, el tamaño del contexto y la cuantización de la caché KV.
llama.cpp es el motor de inferencia escrito en C y C++ que ejecuta modelos en formato GGUF en CPU, en GPU NVIDIA, AMD e Intel, y en Mac. A fecha del 20 de septiembre de 2026, la mayoría de las aplicaciones de LLM locales se basan en él o en su biblioteca ggml: Ollama, LM Studio, KoboldCpp, Jan. Usarlo directamente no hace que tu modelo sea más rápido. Te da control sobre ajustes que las capas de software que lo utilizan deciden por ti.
#llama.cpp en resumen
Georgi Gerganov lanzó el proyecto en marzo de 2023 con un objetivo sencillo: ejecutar el modelo LLaMA de Meta en un MacBook, sin Python ni dependencias pesadas. Está publicado bajo licencia MIT. Tres años después, el repositorio (ahora bajo la organización ggml-org) admite cientos de arquitecturas, y el formato de archivo que definió en agosto de 2023, GGUF, se ha convertido en el estándar de facto para distribuir un modelo cuantizado.
Dos decisiones técnicas explican este éxito. La primera es la cuantización: llama.cpp puede ejecutar pesos comprimidos de 2 a 8 bits, lo que permite que un modelo de 8 mil millones de parámetros quepa en 5 GB en lugar de 16. La segunda es el reparto entre procesador y tarjeta gráfica: cuando un modelo no cabe completamente en la VRAM, parte de las capas permanece en la RAM y el resto se carga en la GPU. Es más lento que cargar todo el modelo en la GPU, pero funciona, y pocos motores lo ofrecen.
#Lo que hay en la caja
Tu ChatGPT privado y gratuito en tu máquina en 1 hora — LM Studio, Ollama, Open WebUI, tus documentos, sin nube.
- Espacio en línea de por vida
- PDF + archivos
- Reembolsado 30 j
- llama-cli
- El chat de línea de comandos. Útil para probar un modelo o un ajuste en pocos segundos.
- llama-server
- Un servidor HTTP con una API compatible con OpenAI y una interfaz web integrada, en el puerto 8080. Es el componente que la mayoría de los usuarios avanzados ejecutan continuamente.
- llama-bench
- La herramienta de medición. Da por separado la velocidad de lectura del prompt y la velocidad de generación, lo que permite comparar dos ajustes sin autoengañarse.
- llama-quantize
- Convierte un GGUF de precisión completa a una cuantización más ligera (Q4_K_M, Q5_K_M, Q8_0).
- llama-server: montar una API OpenAI local, paso a paso
- GGUF y safetensors: entender los formatos de modelos
- Documentación oficial del formato GGUF — Hugging Face
#Lo que las capas adicionales aportan y ocultan
Ollama, LM Studio y KoboldCpp ofrecen lo que llama.cpp no hace: un catálogo de modelos, descarga en un solo comando, una interfaz, carga y descarga automáticas. A cambio, establecen valores por defecto. La tabla a continuación no compara rendimientos, indica quién decide sobre qué.
| Ajuste | llama.cpp sin capas adicionales | Ollama | LM Studio | KoboldCpp |
|---|---|---|---|---|
| Tamaño del contexto | Opción -c, libre | Valor predeterminado prudente, modificable mediante una variable o un Modelfile | Control deslizante por modelo | Opción al inicio |
| Elección de la cuantización | Cualquier archivo GGUF | Etiqueta del catálogo, Q4 por defecto | Lista disponible para descargar | Cualquier archivo GGUF |
| Capas enviadas al GPU | Opción -ngl, capa por capa | Automático | Control deslizante | Opción al inicio |
| Cuantización de la caché KV | Opciones -ctk y -ctv | Variable de entorno global | Configuración avanzada | Opción al inicio |
| API | llama-server, compatible con OpenAI | API limpia + compatibilidad con OpenAI | Servidor compatible con OpenAI | API limpia + compatibilidad con OpenAI |
| Actualizaciones del motor | El mismo día, con cada commit | Con un desfase | Con un desfase | Con un desfase |
La última línea importa más de lo que parece. Cuando aparece una nueva arquitectura de modelo, primero se incorpora su soporte en llama.cpp y después, unos días o semanas más tarde, en las herramientas construidas sobre él. Si quieres probar un modelo la semana de su publicación, a menudo es la única vía.
#Los cuatro ajustes que cambian todo
- -ngl (n-gpu-layers)
- El número de capas del modelo colocadas en VRAM. El valor 99 significa «todo lo que cabe». Si el modelo supera la capacidad de tu VRAM, reduce este número hasta que se cargue correctamente: cada capa que se deja en la CPU ralentiza la generación, pero un modelo que funciona a 8 tokens por segundo es mejor que uno que no arranca.
- -c (ctx-size)
- La ventana de contexto asignada. La caché KV crece con ella: en un modelo de 8B, pasar de 8.000 a 32.000 tokens cuesta varios GB de VRAM. Asigna lo que necesitas, no el máximo anunciado por el modelo.
- -fa (flash-attn)
- Activa Flash Attention, que reduce el uso de memoria y acelera la lectura de prompts largos. También es un requisito previo para cuantizar la caché KV.
- --n-cpu-moe
- Para los modelos MoE, mantén a los expertos de un número determinado de capas en RAM y deja el resto en el GPU. Es lo que permite ejecutar un MoE de 30 o 120 mil millones de parámetros en una tarjeta de 16 GB a una velocidad útil.
- Flash Attention: activarlo en llama.cpp, Ollama y vLLM
- Cuantizar la caché KV para ahorrar VRAM
- Distribuir un modelo en varios GPUs con tensor-split
- Documentación oficial de llama-server (lista completa de opciones)
#Lo que ha cambiado: --fit ajusta -ngl por ti
Durante mucho tiempo, ajustar -ngl a mano fue el primer paso habitual en cualquier guía de llama.cpp: poner 99 para enviar todo a la GPU y luego ir reduciendo el valor por ensayo y error si fallaba la carga. Ya no es un paso obligatorio. El proyecto ha añadido una opción --fit, activada por defecto, que ajusta automáticamente los parámetros no especificados (incluido -ngl) para que el modelo quepa en la memoria disponible. En una tarjeta modesta, esto evita el habitual ciclo entre un intento de ejecución fallido y la reducción manual de -ngl.
#¿Qué backend para tu tarjeta?
llama.cpp se compila o se descarga para un backend de cálculo determinado. La elección correcta depende únicamente de tu hardware. La tabla recoge las familias de nuestra base de 90 configuraciones.
| Tu equipo | Backend recomendado | Nota |
|---|---|---|
| NVIDIA GTX 10 a RTX 50, de sobremesa y para portátiles | CUDA | El camino más rápido y mejor probado. |
| AMD Radeon RX 7000 y RX 9000 | ROCm (HIP) o Vulkan | ROCm es más rápido cuando funciona. Vulkan se instala sin problemas, incluso en Windows. |
| AMD Radeon RX 6000 y modelos anteriores | Vulkan | Soporte parcial o ausente de ROCm según la tarjeta. |
| Apple M1 a M5 | Metal | Activado por defecto en los binarios de macOS. Se puede utilizar toda la memoria unificada. |
| GPU integrado Intel o AMD, Intel Arc | Vulkan o SYCL | Mejora real frente al uso exclusivo de la CPU en modelos pequeños. |
| Sin GPU | CPU (AVX2, AVX-512, NEON) | Funciona en cualquier equipo. Busca modelos de hasta 8 mil millones de parámetros. |
- Compilar llama.cpp con CUDA
- Compilar llama.cpp con Metal en Mac
- llama.cpp con Vulkan, el backend universal
#Nuestras mediciones con llama.cpp
llama.cpp es el motor de referencia de nuestro banco de pruebas, precisamente porque funciona de forma idéntica en todas las plataformas. Estas son las velocidades de generación registradas con Llama 3.1 8B en Q4, con un contexto de 2 048 tokens, una sola solicitud y Flash Attention activada.
| Máquina | Memoria | Llama 3.1 8B Q4 |
|---|---|---|
| RTX 5090 | 32 GB | 172 tok/s |
| RTX 4090 | 24 GB | 128 tok/s |
| RTX 4070 | 12 GB | 76 tok/s |
| Mac M3 Max | 64 GB unificados | 64 tok/s |
| RTX 3060 | 12 GB | 44 tok/s |
| Ryzen 7 7700, solo CPU | RAM del sistema | 7,8 tok/s |
Dos conclusiones. En primer lugar, la diferencia entre una RTX 3060 y un procesador por sí solo es de un factor de cinco a seis: incluso una tarjeta de gama básica cambia la experiencia. En segundo lugar, estas cifras serían prácticamente las mismas en Ollama o LM Studio en las mismas máquinas, ya que el motor de cálculo es el mismo.
#Quedarse en Ollama o pasar a llama.cpp
| Quédate con Ollama o LM Studio si… | Pásate a llama.cpp si… |
|---|---|
| Quieres hablar con un modelo sin leer documentación. | Tu modelo supera la capacidad de la VRAM y quieres ajustar con precisión la distribución entre GPU y CPU. |
| Cambias frecuentemente de modelo y aprecias el catálogo integrado. | Quieres probar una arquitectura publicada esta semana. |
| Tus herramientas (Open WebUI, extensiones de editor) esperan la API de Ollama. | Estás montando un servidor para usarlo a largo plazo y quieres controlar cada opción, desde el contexto hasta la caché KV. |
#Empezar en diez minutos
No necesitas compilar para probarlo. Se publican binarios precompilados para Windows, macOS y Linux con cada versión, y los gestores de paquetes se encargan del resto. El comando a continuación descarga un pequeño modelo desde Hugging Face y abre la interfaz web en http://localhost:8080.
Para un modelo más ambicioso del catálogo, descarga el archivo GGUF que prefieras e indica su ruta con la opción -m. Compilar a partir del código fuente solo resulta útil para activar un backend específico o seguir el desarrollo día a día.
#Errores más comunes al cargar
La mayoría de los problemas con llama.cpp se reducen a tres causas: superar la memoria disponible, un archivo GGUF incompatible con la compilación instalada o una opción mal escrita. El mensaje de error mostrado en la línea de comandos indica casi siempre cuál de las tres es la causa, siempre que lo leas hasta el final en lugar de cerrar la ventana y volver a ejecutar el programa.
| Mensaje o síntoma | Causa probable | A probar |
|---|---|---|
| cudaMalloc failed: out of memory | El modelo, con el contexto solicitado, supera la VRAM disponible | Reducir -c, dejar que --fit ajuste -ngl o elegir una cuantización más ligera |
| unknown model architecture | El archivo GGUF utiliza una arquitectura más reciente que el binario instalado | Actualizar a la última versión publicada; las nuevas arquitecturas llegan primero a llama.cpp |
| Generación muy lenta a pesar de tener una GPU reciente | Las capas no se cargan todas en el GPU, a menudo por falta de VRAM libre | Comprobar la salida de carga (línea «offloaded»), cerrar las demás aplicaciones que ocupan la tarjeta |
| error: invalid argument | Una opción renombrada o mal escrita en el comando | Comparar con llama-server --help, que enumera los alias cortos y largos actualizados |
Conviene leer una vez de principio a fin la línea de carga que aparece al iniciar el servidor: indica el número de capas realmente enviadas a la GPU, el tamaño efectivo del contexto y el tipo de caché KV utilizado. A menudo resulta más rápido que añadir opciones al azar hasta que funcione. Presta también atención a la versión instalada: llama.cpp publica versiones nocturnas con mucha frecuencia y, a veces, ya se ha publicado una corrección para tu tarjeta o tu modelo que todavía no ha llegado al paquete de Homebrew o winget que instalaste la semana anterior.
#FAQ
¿Es más rápido llama.cpp que Ollama?+
¿Se necesita saber compilar para usar llama.cpp?+
¿Se puede usar llama.cpp sin tarjeta gráfica?+
¿Qué diferencia hay entre llama.cpp y vLLM?+
¿Y en Mac, llama.cpp o MLX?+
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.