Avanzato 11 minllama.cpp

compilare llama.cpp con Metal

Risposta diretta

Su un Mac Apple Silicon, llama.cpp si compila con tre comandi e Metal è attivato per impostazione predefinita: clona il repository, esegui cmake -B build e poi cmake --build build --config Release, senza installare un toolkit GPU. Puoi anche installarlo senza compilare, con Homebrew. Gli eseguibili llama-cli e llama-server eseguono quindi i calcoli sulla GPU del chip M; è la memoria unificata, più della potenza bruta, a determinare la dimensione del modello che puoi utilizzare.

llama.cpp è il motore di inferenza su cui si basano Ollama e LM Studio e funziona in modo nativo su Mac. Questa guida mostra come installarlo o compilarlo con Metal, eseguirlo con un modello GGUF, renderlo accessibile tramite un'API, aumentare il limite di memoria GPU di macOS e leggere correttamente i benchmark pubblicati per i chip da M1 a M5.

Di Mohamed Meguedmi·Agg. 2026-09-30·Testato su macOS 14+

#llama.cpp su Mac: cosa offre Metal

Su macOS, la GPU viene utilizzata tramite Metal, l’API grafica e di calcolo di Apple, e llama.cpp la sfrutta direttamente. Il README del progetto precisa che Apple Silicon gode di supporto di primo livello, ottimizzato tramite ARM NEON, Accelerate e Metal. In pratica, ciò significa che la compilazione predefinita produce già un motore che utilizza la GPU, senza opzioni da aggiungere, e che la memoria unificata evita ogni trasferimento tra il processore e la GPU: il modello è presente in memoria in una sola copia. Il fattore limitante su un Mac è quindi la capacità e la larghezza di banda di questa memoria.

→
Niente da installare per la GPU
A differenza di CUDA, che richiede un toolkit di diversi gigabyte, Metal è incluso in macOS. Sono sufficienti gli strumenti di compilazione di Apple e CMake.

#Prerequisiti

Il kit IA Locale

Il tuo ChatGPT privato e gratuito sulla tua macchina in 1 ora — LM Studio, Ollama, Open WebUI, i tuoi documenti, senza cloud.

  • Spazio online a vita
  • PDF + file
  • Aggiornamenti a vita
Un Mac Apple Silicon
Da M1 a M5: sono i chip a cui si rivolge questa guida. I Mac con processore Intel non ne traggono quasi alcun vantaggio.
I tool di compilazione Apple
Installa i Command Line Tools con xcode-select --install.
CMake e Git
Disponibili tramite Homebrew: brew install cmake git.
Memoria per il modello
Il riferimento del sito: un 8B in Q4 pesa circa 5 GB, un 14B circa 9 GB, un 32B da 19 a 20 GB, prima del contesto.
Strumenti di compilazione
xcode-select --install
brew install cmake git

#Installare senza compilare: Homebrew

Se non hai bisogno di opzioni di compilazione particolari, la soluzione più veloce è Homebrew. La documentazione di installazione di llama.cpp indica che la formula viene aggiornata automaticamente a ogni nuova versione del progetto. Ottieni gli stessi eseguibili, pronti all'uso, con Metal.

Installazione con Homebrew
brew install llama.cpp

Compila tu stesso quando vuoi la versione più recente del repository, testare un branch o modificare un'opzione di compilazione. Altrimenti, Homebrew basta: risparmi il tempo di compilazione e gli aggiornamenti si fanno con brew upgrade.

#1. Compilare con Metal

Compilazione (Metal attivato per impostazione predefinita)
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 documentazione di build è esplicita: su macOS, Metal è attivato per impostazione predefinita e fa eseguire i calcoli sulla GPU. Non occorre aggiungere alcuna opzione. Il vecchio nome del repository, sotto l'account di Georgi Gerganov, reindirizza all'organizzazione ggml-org, dove ora si trova il progetto. I binari si trovano in build/bin, in particolare llama-cli per il terminale e llama-server per l'API.

i
Metal e MPS, due cose diverse
MPS (Metal Performance Shaders) è il livello utilizzato da PyTorch. llama.cpp non ne dipende: il suo backend Metal è scritto per l'inferenza di modelli quantizzati, il che spiega in gran parte perché sia più veloce delle soluzioni che passano per PyTorch su Mac.

Due opzioni utili: la documentazione indica che -DGGML_METAL=OFF disattiva Metal durante la compilazione, e che un binario compilato con Metal può essere forzato sul processore con --n-gpu-layers 0, utile per confrontare le velocità.

#2. Avviare un primo modello

I motori recenti sanno scaricare il modello da soli. L'opzione -hf accetta il nome di un repository Hugging Face, con la quantizzazione come suffisso; senza suffisso, viene scelta Q4_K_M per impostazione predefinita. Per un file già scaricato, usa -m con il suo percorso.

Scaricare e avviare un modello
./build/bin/llama-cli -hf UTILISATEUR/MODELE-GGUF:Q4_K_M
Avvia un file locale
./build/bin/llama-cli -m ~/modeles/mon-modele-Q4_K_M.gguf

Il numero di livelli caricati sulla GPU si regola con -ngl; il valore predefinito è auto, adatto a un Mac con memoria unificata. Puoi anche scrivere -ngl all per caricare tutto. Non cercare il percorso di un modello nella cartella di Ollama: i suoi file sono memorizzati in un formato interno che non è un GGUF direttamente utilizzabile.

#Servire un'API compatibile con OpenAI tramite llama-server

llama-server espone endpoint compatibili con l'API OpenAI per la chat, le risposte e gli embedding. Per impostazione predefinita, è in ascolto su 127.0.0.1, porta 8080: è raggiungibile solo dal tuo Mac. Per renderlo accessibile dalla rete, occorre specificare esplicitamente --host, e in tal caso è opportuno proteggere l'accesso.

Avviare l'API locale
./build/bin/llama-server -m ~/modeles/mon-modele-Q4_K_M.gguf --port 8080

#4. La limitazione della memoria GPU di macOS

Su Apple Silicon, macOS mette a disposizione della GPU solo una parte della memoria unificata. Un modello che supera questa quota viene rifiutato o passa in parte all'esecuzione sul processore, anche se la memoria totale è sufficiente. Il motore mostra il valore effettivo all'avvio: cerca la riga ggml_metal_init: recommendedMaxWorkingSetSize nei log di llama-cli o di llama-server.

Il comando sysctl iogpu.wired_limit_mb permette di aumentare questo limite. Richiede un valore in megabyte: 61 440 per 60 GB, ad esempio. Un collaboratore del repository di llama.cpp ricorda che il comando va eseguito di nuovo a ogni avvio, perché l'impostazione non è persistente, e sconsiglia di arrivare al 100 %: il sistema ha bisogno di memoria per tutto ciò che non è vincolato dalla GPU, e le cose vanno male se non gliene si lascia abbastanza.

Aumentare il limite (non 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
!
Mantieni un margine per macOS
Lascia al sistema almeno qualche gigabyte. Un limite troppo alto provoca rallentamenti o blocchi che obbligano a riavviare. Per rendere l'impostazione permanente, bisogna riapplicarla all'avvio, ad esempio con un demone avviato al boot: non esiste un'impostazione persistente nativa.

#Quale modello per quale quantità di memoria unificata

La memoria unificata è condivisa tra macOS, le tue applicazioni e il modello, e la GPU ne riceve solo una parte. Il sito indica che i pesi di un modello 8B in Q4 sono intorno a 5 GB, quelli di un 14B intorno a 9 GB e quelli di un 32B intorno a 19–20 GB. A questi si aggiunge la cache del contesto. La tabella fornisce un ordine di grandezza prudenziale; il valore di riferimento è recommendedMaxWorkingSetSize, visualizzato dal motore.

Ordine di grandezza in base alla memoria del Mac (pesi in Q4, escluso il contesto)
Memoria del MacModello ragionevoleNota
8 GB3B (2 GB)Un 8B è possibile, ma lascia troppo poco margine a macOS
16 GB8B (5 GB), contesto medioIl limite GPU predefinito rimane sufficiente
Da 24 a 32 GB14B (9 GB), o anche un 8B in Q8Un 32B in Q4 richiede di aumentare il limite GPU
Da 48 a 64 GB32B (19-20 GB) con un contesto lungoAumentare il limite GPU se il motore rifiuta il modello
96 GB e oltre70B (circa 40 GB) e modelli MoEVerificare recommendedMaxWorkingSetSize prima di scaricare

Questi ordini di grandezza sono stime prudenziali, non misurazioni: un contesto lungo, un secondo modello o un'applicazione che consuma molte risorse bastano a cambiare la situazione. La guida dedicata alla memoria fornisce il metodo di calcolo completo.

#5. Le opzioni che contano

Opzioni di llama-cli e llama-server (README ufficiale di llama-cli)
OpzioneRuoloValore predefinito
-ngl, --n-gpu-layersNumero di layer posizionati in VRAM (un numero, auto o all)auto
-fa, --flash-attnFlash Attention: on, off o autoauto
-ctk, -ctvTipo di cache KV per le chiavi e i valori (f16, q8_0, q4_0…)f16
-hfRepository Hugging Face da scaricare, con quantizzazione opzionaleQ4_K_M se il suffisso è omesso
-cDimensione del contesto, in tokensecondo il modello

Flash Attention è in modalità automatica per impostazione predefinita: nella maggior parte dei casi non è necessario attivarla manualmente. La cache KV si quantizza con -ctk e -ctv, a condizione che Flash Attention sia attiva; la quantizzazione in q8_0 dimezza all'incirca la memoria della cache rispetto a f16, al prezzo di una lieve perdita di precisione che è meglio verificare nei tuoi casi d'uso. La guida dedicata illustra il compromesso in dettaglio.

#6. Prestazioni per chip: ciò che misurano i benchmark pubblici

QuelLLM non misura queste macchine. Il riferimento è la discussione «Performance of llama.cpp on Apple Silicon M-series» nel repository di llama.cpp, dove ogni contributore esegue lo stesso test su un LLaMA 7B in Q4_0. La tabella qui sotto ne riporta alcune righe, indicando la versione di llama.cpp usata per ogni misurazione: le misurazioni dei chip da M1 a M4 sono state eseguite con la stessa versione, mentre quella usata per gli M5 è più recente.

Generazione (tg) e prompt (pp) su LLaMA 7B Q4_0, in token al secondo
Chip (core GPU)Larghezza di bandaPromptGenerazioneQuota del limite teorico
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 %

Il limite teorico è la banda passante divisa per il peso del modello (3,56 GiB, cioè 3,82 GB). I chip Pro raggiungono dal 71 all'82% di questo limite, mentre il chip Max ne raggiunge soltanto il 58%: a partire da un certo livello, la memoria non è più l'unico collo di bottiglia e pagare per una maggiore banda passante rende meno di quanto la scheda tecnica lasci intendere.

Tre insegnamenti. La generazione segue la banda passante: il M3 Pro, a 150 GB/s, è più lento del M2 Pro a 200 GB/s, nonostante appartenga a una generazione di chip più recente. I chip Max, con una banda passante molto più elevata, dominano. Infine, la lettura del prompt ha fatto un salto con i M5: 1 620,64 token/s per un M5 Pro, contro 439,78 per un M4 Pro con lo stesso numero di core GPU, cioè 3,7 volte di più. Questa differenza conta per i documenti lunghi e il RAG, molto meno per la chat.

i
Come leggere questi numeri
Le misurazioni provengono da contributori diversi, con versioni diverse di llama.cpp e di macOS. Forniscono un ordine di grandezza per confrontare i chip, non una garanzia per la tua macchina. Un modello da 8 a 9 miliardi di parametri in Q4 è più pesante di un 7B e sarà quindi un po' più lento.

Una buona abitudine prima di concludere che un Mac è lento: rilanciare lo stesso modello con -ngl 0, poi con il valore predefinito, e confrontare. La differenza tra i due mostra il contributo effettivo della GPU sulla tua macchina e conferma che il calcolo passa effettivamente attraverso Metal. Annota anche la versione di llama.cpp utilizzata: le ottimizzazioni Metal evolvono rapidamente e un binario datato può essere nettamente più lento di una versione recente.

#Risoluzione dei problemi: errori comuni

Simptomi comuni su Mac
SintomoCausa probabilePossibile soluzione
Velocità molto bassa, processore al 100 %Modello caricato sulla CPUVerificare -ngl e leggere i log di avvio
Errore di allocazione della memoria della GPUModello più grande della quota di RAM assegnata alla GPUVerificare iogpu.wired_limit_mb, ridurre il modello o il contesto
Il Mac rallenta o si bloccaLimite GPU troppo alto, nessun margine per macOSDiminuire il valore di iogpu.wired_limit_mb
La compilazione fallisceStrumenti Apple mancanti o CMake troppo vecchioxcode-select --install poi brew upgrade cmake
Il modello non è stato trovatoPercorso o nome del repository Hugging Face erratoProvare -hf con un repository noto, oppure -m con un percorso assoluto
FAQ
È necessario compilare llama.cpp per usare Metal su Mac?+
No. Metal è abilitato per impostazione predefinita durante la compilazione su macOS, e Homebrew fornisce eseguibili già pronti con brew install llama.cpp. Compila tu stesso solo per ottenere l'ultima versione del repository, testare un branch o usare un'opzione particolare. Entrambe le modalità forniscono gli stessi strumenti, llama-cli e llama-server.
Come verificare che llama.cpp utilizzi la GPU sul mio Mac?+
Leggi i log all'avvio di llama-cli o llama-server: indicano l'inizializzazione di Metal e il valore di recommendedMaxWorkingSetSize. Un throughput molto basso con il processore saturo segnala un modello caricato sulla CPU. Verifica quindi l'opzione -ngl, il cui valore predefinito è auto.
Come assegnare più memoria alla GPU su un Mac Apple Silicon?+
Con sudo sysctl iogpu.wired_limit_mb=VALEUR, dove il valore è espresso in megabyte. L'impostazione non è persistente e va applicata di nuovo a ogni avvio. Non puntare al 100 % della RAM: macOS ha bisogno di memoria per il resto del sistema. Rileggi recommendedMaxWorkingSetSize nei log per confermare il nuovo valore.
llama.cpp o Ollama su Mac?+
Ollama si basa su llama.cpp e semplifica l'installazione, i download e l'API. Usa direttamente llama.cpp per le opzioni più recenti, un controllo preciso dei parametri o llama-server. Su Mac, la guida comparativa tra MLX e llama.cpp descrive in dettaglio anche l'altro motore possibile. Per iniziare, Ollama o LM Studio sono sufficienti.
Quale velocità aspettarsi da un Mac M4 Pro con llama.cpp?+
Il benchmark pubblico di llama.cpp dà 50,74 token/s in generazione e 439,78 in lettura del prompt per un M4 Pro a 20 core GPU su un LLaMA 7B in Q4_0. Un modello più grande sarà più lento. Questi numeri variano in base alla versione di llama.cpp, alla memoria e a macOS.
Questa guida ti è stata utile?

Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.