Avanzado 11 minllama.cpp

Compilar llama.cpp con Metal

Respuesta directa

En un Mac con Apple Silicon, llama.cpp se compila con tres comandos y Metal está activado por defecto: clona el repositorio, ejecuta cmake -B build y después cmake --build build --config Release, sin instalar un toolkit de GPU. También puedes instalarlo sin compilar con Homebrew. Los binarios llama-cli y llama-server ejecutan entonces los cálculos en la GPU del chip M; es la memoria unificada, más que la potencia bruta, la que determina el tamaño de modelo que puedes utilizar.

llama.cpp es el motor de inferencia en el que se basan Ollama y LM Studio, y funciona de forma nativa en Mac. Esta guía muestra cómo instalarlo o compilarlo con Metal, ejecutarlo con un modelo GGUF, ofrecerlo a través de una API, aumentar el límite de memoria GPU de macOS e interpretar correctamente los benchmarks publicados para los chips M1 a M5.

Por Mohamed Meguedmi·Actualización 2026-09-30·Probado en macOS 14+

#llama.cpp en Mac: lo que aporta Metal

En macOS, la GPU se utiliza a través de Metal, la API gráfica y de cálculo de Apple, y llama.cpp la aprovecha directamente. El README del proyecto indica que Apple Silicon recibe soporte de primer nivel, con optimizaciones mediante ARM NEON, Accelerate y Metal. En la práctica, esto significa que la compilación por defecto ya produce un motor que utiliza la GPU, sin necesidad de añadir opciones, y que la memoria unificada evita cualquier transferencia entre el procesador y la GPU: el modelo se almacena una sola vez en memoria. Por tanto, los factores limitantes en un Mac son la capacidad y el ancho de banda de esta memoria.

→
No hay que instalar nada para la GPU
A diferencia de CUDA, que exige un kit de herramientas de varios gigabytes, Metal viene incluido en macOS. Basta con las herramientas de compilación de Apple y CMake.

#Prerrequisitos

El kit de IA Local

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
Un Mac Apple Silicon
De M1 a M5: esta guía está dirigida a estos modelos. Los Mac con procesador Intel apenas se benefician.
Herramientas de compilación de Apple
Instala las herramientas de línea de comandos con xcode-select --install.
CMake y Git
Disponibles a través de Homebrew: brew install cmake git.
Memoria para el modelo
La referencia del sitio: un 8B en Q4 pesa aproximadamente 5 GB, un 14B alrededor de 9 GB, un 32B entre 19 y 20 GB, antes del contexto.
Herramientas de compilación
xcode-select --install
brew install cmake git

#Instalar sin compilar: Homebrew

Si no necesitas opciones de compilación especiales, la opción más rápida es Homebrew. La documentación de instalación de llama.cpp indica que la fórmula se actualiza automáticamente con cada nueva versión del proyecto. Obtienes los mismos ejecutables listos para usar con Metal.

Instalación con Homebrew
brew install llama.cpp

Compila tú mismo cuando quieras la última versión del repositorio, probar una rama o modificar una opción de compilación. De lo contrario, Homebrew basta: ahorrarás el tiempo de compilación y las actualizaciones se hacen con brew upgrade.

#1. Compilar con Metal

Compilación (Metal activado por defecto)
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

cmake -B build
cmake --build build --config Release -j $(sysctl -n hw.ncpu)

La documentación de compilación es explícita: en macOS, Metal está activado por defecto y hace que los cálculos se ejecuten en la GPU. No hay que añadir ninguna opción. El nombre anterior del repositorio, bajo la cuenta de Georgi Gerganov, redirige a la organización ggml-org, donde ahora se encuentra el proyecto. Los binarios aparecen en build/bin, entre ellos llama-cli para la terminal y llama-server para la API.

i
Metal y MPS, dos cosas diferentes
MPS (Metal Performance Shaders) es la capa que utiliza PyTorch. llama.cpp no la requiere: su backend Metal está escrito para la inferencia de modelos cuantizados, lo que explica en gran medida que sea más rápido que soluciones que pasan por PyTorch en Mac.

Dos opciones útiles: la documentación indica que -DGGML_METAL=OFF desactiva Metal durante la compilación y que se puede obligar a un binario compilado con Metal a ejecutarse en el procesador mediante --n-gpu-layers 0, lo que resulta práctico para comparar velocidades.

#2. Arrancar un primer modelo

Los motores recientes saben descargar el modelo ellos mismos. La opción -hf toma el nombre de un repositorio de Hugging Face, con la cuantización en sufijo; sin sufijo, se usa por defecto Q4_K_M. Para un archivo ya descargado, usa -m con su ruta.

Descargar y ejecutar un modelo
./build/bin/llama-cli -hf UTILISATEUR/MODELE-GGUF:Q4_K_M
Ejecutar un archivo local
./build/bin/llama-cli -m ~/modeles/mon-modele-Q4_K_M.gguf

El número de capas cargadas en la GPU se ajusta con -ngl; su valor predeterminado es auto, lo que resulta adecuado para un Mac con memoria unificada. También puedes escribir -ngl all para cargarlo todo. No busques la ruta de un modelo en la carpeta de Ollama: sus archivos se almacenan en un formato interno que no es un GGUF directamente utilizable.

#Servir una API compatible con OpenAI con llama-server

llama-server expone rutas compatibles con la API de OpenAI para chat, respuestas y embeddings. Por defecto, escucha en 127.0.0.1, puerto 8080: solo es accesible desde tu Mac. Para hacerlo accesible por red, se debe especificar --host explícitamente, y entonces es necesario proteger el acceso.

Iniciar la API local
./build/bin/llama-server -m ~/modeles/mon-modele-Q4_K_M.gguf --port 8080

#4. El límite de memoria de la GPU en macOS

En Apple Silicon, macOS solo deja a la GPU una parte de la memoria unificada. Un modelo que supere esa parte se rechaza o pasa a ejecutarse parcialmente en el procesador, aunque la memoria total sea suficiente. El motor muestra el valor efectivo al arrancar: busca la línea ggml_metal_init: recommendedMaxWorkingSetSize en los registros de llama-cli o llama-server.

El comando sysctl iogpu.wired_limit_mb permite aumentar este límite. Acepta un valor en megabytes: 61 440 para 60 GB, por ejemplo. Un colaborador del repositorio de llama.cpp recuerda que debes volver a ejecutarlo en cada arranque, porque el ajuste no es persistente, y desaconseja llegar al 100 %: el sistema necesita memoria para todo lo que no está bloqueado por la GPU, y las cosas van mal si no le dejas suficiente.

Elevar el límite (cambio no persistente)
# 56 Go pour le GPU sur un Mac de 64 Go (56 x 1024 = 57344)
sudo sysctl iogpu.wired_limit_mb=57344

# Relancez ensuite le modèle et relisez recommendedMaxWorkingSetSize
!
Reserva un margen para macOS
Deja al sistema al menos unos cuantos gigabytes. Un límite demasiado alto provoca ralentizaciones o bloqueos que obligan a reiniciar. Para que el ajuste sea permanente, hay que volver a aplicarlo al iniciar el sistema, por ejemplo mediante un demonio que se ejecute al arrancar: no existe un ajuste persistente nativo.

#Qué modelo elegir según la capacidad de memoria unificada

La memoria unificada se comparte entre macOS, tus aplicaciones y el modelo, y la GPU solo recibe una parte. La referencia del sitio sitúa los pesos de un modelo de 8B en Q4 en torno a 5 GB, los de un 14B en torno a 9 GB y los de un 32B entre 19 y 20 GB. A esto se añade la caché de contexto. La tabla ofrece una estimación orientativa y prudente; el valor que debes tomar como referencia es recommendedMaxWorkingSetSize, mostrado por el motor.

Orden de magnitud según la memoria del Mac (pesos en Q4, sin contar la memoria del contexto)
Memoria del MacModelo razonableNota
8 GB3B (2 GB)Un 8B es posible pero deja demasiado poco margen para macOS
16 GB8B (5 GB), contexto medioEl límite predeterminado de la GPU sigue siendo suficiente
24 a 32 GB14B (9 GB), o incluso un 8B en Q8Un 32B en Q4 requiere aumentar el límite de la GPU
48 a 64 GB32B (19-20 GB) con contexto largoAumentar el límite de la GPU si el motor rechaza el modelo
96 GB y más70B (aproximadamente 40 GB) y modelos MoEVerificar recommendedMaxWorkingSetSize antes de descargar

Estas cifras orientativas son estimaciones prudentes, no mediciones: basta con un contexto largo, un segundo modelo o una aplicación que consuma muchos recursos para cambiar la situación. La guía dedicada a la memoria ofrece el método de cálculo completo.

#5. Las opciones que cuentan

Opciones de llama-cli y llama-server (README oficial de llama-cli)
OpciónRolValor por defecto
-ngl, --n-gpu-layersNúmero de capas en VRAM (un número, auto o all)auto
-fa, --flash-attnFlash Attention: on, off o autoauto
-ctk, -ctvTipo de caché KV para las claves y los valores (f16, q8_0, q4_0…)f16
-hfRepositorio de Hugging Face que se descargará, con cuantización opcionalQ4_K_M si el sufijo se omite
-cTamaño de contexto, en tokenssegún el modelo

Flash Attention está en modo automático por defecto: en la mayoría de los casos no es necesario activarlo manualmente. La caché KV se cuantiza con -ctk y -ctv, siempre que Flash Attention esté activado; al usar q8_0 en lugar de f16, la memoria de la caché se reduce aproximadamente a la mitad, a costa de una ligera pérdida de precisión que conviene comprobar en tus casos de uso. La guía específica detalla esta contrapartida.

#6. Rendimiento por chip: lo que miden los benchmarks públicos

QuelLLM no mide estas máquinas. La referencia es el hilo «Performance of llama.cpp on Apple Silicon M-series» del repositorio de llama.cpp, donde cada participante ejecuta la misma prueba con un LLaMA 7B en Q4_0. La tabla siguiente recoge algunas de sus filas, con las versiones de llama.cpp utilizadas en cada medición: las mediciones de los chips M1 a M4 corresponden a la misma versión; la utilizada para los M5 es más reciente.

Generación (tg) y prompt (pp) en LLaMA 7B Q4_0, en tokens por segundo
Chip (núcleos de GPU)Ancho de bandaPromptGeneraciónParte del techo teórico
M2 Pro (19)200 GB/s341,1938,8674 %
M3 Pro (18)150 GB/s341,6730,7478 %
M4 Pro (20)273 GB/s439,7850,7471 %
M5 Pro (20)307 GB/s1 620,6466,3382 %
M4 Max (40)546 GB/s885,6883,0658 %

El límite teórico es el ancho de banda dividido por el tamaño del modelo (3,56 GiB, es decir, 3,82 GB). Los chips Pro alcanzan entre el 71 % y el 82 % de ese límite, mientras que el chip Max solo alcanza el 58 %: a partir de cierto nivel, la memoria ya no es el único freno, y pagar por más ancho de banda aporta menos de lo que sugiere la ficha técnica.

Tres conclusiones. La velocidad de generación depende del ancho de banda: el M3 Pro, a 150 GB/s, es más lento que el M2 Pro a 200 GB/s, pese a tener un chip de una generación más reciente. Los chips Max, con un ancho de banda mucho mayor, dominan. Por último, la lectura del prompt ha dado un salto con los M5: 1 620,64 tokens/s para un M5 Pro, frente a 439,78 para un M4 Pro con el mismo número de núcleos GPU, es decir, 3,7 veces esa velocidad. Esta diferencia importa para los documentos largos y el RAG, mucho menos para el chat.

i
¿Cómo leer estos números?
Las mediciones proceden de distintos colaboradores, con versiones diferentes de llama.cpp y de macOS. Ofrecen un orden de magnitud para comparar chips, no una garantía para tu máquina. Un modelo de 8 a 9 mil millones de parámetros en Q4 es más pesado que uno de 7B y, por tanto, será un poco más lento.

Una buena costumbre antes de concluir que un Mac es lento: volver a ejecutar el mismo modelo con -ngl 0, después con el valor predeterminado, y comparar. La diferencia entre ambas ejecuciones muestra lo que realmente aporta la GPU en tu máquina y confirma que el cálculo se realiza mediante Metal. Anota también la versión de llama.cpp utilizada: las optimizaciones para Metal evolucionan rápidamente y un binario antiguo puede ser considerablemente más lento que una versión reciente.

#Solución de problemas: errores comunes

Síntomas frecuentes en Mac
SíntomaCausa probablePosible solución
Velocidad muy baja, procesador al 100 %Modelo cargado en CPUVerificar -ngl y leer los logs de arranque
Error de asignación de memoria del GPUModelo más grande que la parte de RAM asignada al GPUAumentar iogpu.wired_limit_mb, reducir el modelo o el contexto
El Mac se ralentiza o se congelaLímite de GPU demasiado alto, no hay margen para macOSReducir el valor de iogpu.wired_limit_mb
La compilación fallaHerramientas Apple ausentes o CMake demasiado antiguoxcode-select --install luego brew upgrade cmake
El modelo no se encuentraRuta o nombre de repositorio de Hugging Face incorrectoProbar -hf con un repositorio conocido, o -m con una ruta absoluta
FAQ
¿Se necesita compilar llama.cpp para usar Metal en Mac?+
No. Metal está activado por defecto en la compilación en macOS, y Homebrew proporciona ejecutables listos para usar con brew install llama.cpp. Compila por tu cuenta solo si necesitas la última versión del repositorio, una rama que quieras probar o una opción específica. Ambas vías proporcionan las mismas herramientas, llama-cli y llama-server.
¿Cómo verificar que llama.cpp utiliza la GPU en mi Mac?+
Lee los registros al iniciar llama-cli o llama-server: indican la inicialización de Metal y el valor de recommendedMaxWorkingSetSize. Una tasa de procesamiento muy baja con el procesador saturado indica que el modelo está cargado en la CPU. Revisa entonces el ajuste -ngl, cuyo valor por defecto es auto.
¿Cómo asignar más memoria a la GPU en un Mac con Apple Silicon?+
Con sudo sysctl iogpu.wired_limit_mb=VALEUR, con el valor expresado en megabytes. El ajuste no es persistente y hay que volver a aplicarlo en cada arranque. No apuntes al 100 % de la RAM: macOS necesita memoria para el resto del sistema. Vuelve a consultar recommendedMaxWorkingSetSize en los registros para confirmar el nuevo valor.
¿llama.cpp o Ollama en Mac?+
Ollama se basa en llama.cpp y simplifica la instalación, las descargas y la API. Utiliza llama.cpp directamente para acceder a las opciones más recientes, controlar con precisión los parámetros o usar llama-server. En Mac, la guía comparativa de MLX frente a llama.cpp también detalla el otro motor posible. Para empezar, Ollama o LM Studio bastan.
¿Qué velocidad esperar de un Mac M4 Pro con llama.cpp?+
El benchmark público de llama.cpp da 50,74 tokens/s en generación y 439,78 en lectura del prompt para un M4 Pro con 20 núcleos de GPU en un LLaMA 7B en Q4_0. Un modelo más grande será más lento. Estos números varían según la versión de llama.cpp, la memoria y macOS.
¿Esta guía te ha ayudado?

¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.