llama.cpp: che cos'è e bisogna abbandonare Ollama ?
llama.cpp è il motore di inferenza in C/C++ che esegue i modelli nel formato GGUF su CPU e su GPU NVIDIA, AMD, Intel e Apple Silicon; Ollama, LM Studio e KoboldCpp si basano su di esso. Usarlo direttamente, tramite llama-server, non rende un modello più veloce sullo stesso hardware: ti dà il controllo su impostazioni che i software basati su di esso scelgono al posto tuo, come la distribuzione GPU/CPU, la dimensione del contesto e la quantizzazione della cache KV.
llama.cpp è il motore di inferenza scritto in C e C++ che esegue i modelli in formato GGUF su CPU, su GPU NVIDIA, AMD e Intel e su Mac. Al 20 settembre 2026, la maggior parte delle applicazioni per LLM locali si basa su di esso o sulla sua libreria ggml: Ollama, LM Studio, KoboldCpp, Jan. Usarlo direttamente non rende il tuo modello più veloce. Ti dà il controllo su impostazioni che le applicazioni costruite su di esso scelgono al posto tuo.
#llama.cpp in sintesi
Il progetto è stato avviato nel marzo 2023 da Georgi Gerganov, con un obiettivo semplice: far girare il modello LLaMA di Meta su un MacBook, senza Python né dipendenze pesanti. È pubblicato sotto licenza MIT. Tre anni dopo, il repository (passato sotto l'organizzazione ggml-org) supporta centinaia di architetture, e il formato di file che ha definito nell'agosto 2023, il GGUF, è diventato lo standard di fatto per distribuire un modello quantizzato.
Due scelte tecniche spiegano questo successo. La prima è la quantizzazione: llama.cpp sa eseguire pesi compressi da 2 a 8 bit, il che permette di far stare un modello di 8 miliardi di parametri in 5 GB invece che in 16. La seconda è la ripartizione tra processore e scheda grafica: quando un modello non entra interamente in VRAM, una parte degli strati rimane in RAM e il resto va sulla GPU. È più lento di un caricamento completo, ma funziona, e pochi motori lo offrono.
#Cosa c'è nella confezione
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
- llama-cli
- La chat da riga di comando. Utile per testare un modello o un'impostazione in pochi secondi.
- llama-server
- Un server HTTP con un'API compatibile con quella di OpenAI e un'interfaccia web integrata, sulla porta 8080. È il componente che la maggior parte degli utenti avanzati mantiene sempre in esecuzione.
- llama-bench
- Lo strumento di misura. Fornisce separatamente la velocità di lettura del prompt e la velocità di generazione, permettendo di confrontare due impostazioni senza raccontarsi storie.
- llama-quantize
- Converte un GGUF in precisione completa in una quantizzazione più leggera (Q4_K_M, Q5_K_M, Q8_0).
- llama-server: configurare un'API OpenAI locale, passo dopo passo
- GGUF e safetensors: capire i formati dei modelli
- Documentazione ufficiale del formato GGUF — Hugging Face
#Ciò che gli strati software aggiuntivi aggiungono e nascondono
Ollama, LM Studio e KoboldCpp offrono ciò che llama.cpp non fa: un catalogo di modelli, il download con un solo comando, un'interfaccia, il caricamento e lo scaricamento automatici dei modelli dalla memoria. In cambio, impostano valori predefiniti. La tabella qui di seguito non confronta le prestazioni: indica chi decide cosa.
| Regolazione | llama.cpp puro | Ollama | LM Studio | KoboldCpp |
|---|---|---|---|---|
| Dimensione del contesto | Opzione -c, senza vincoli | Valore predefinito prudente, modificabile tramite variabile o Modelfile | Cursore per modello | Opzione all'avvio |
| Scelta della quantizzazione | Qualsiasi file GGUF | Tag del catalogo, Q4 per impostazione predefinita | Elenco proposto per il download | Qualsiasi file GGUF |
| Livelli inviati alla GPU | Opzione -ngl, layer per layer | Automatico | Cursore | Opzione all'avvio |
| Quantizzazione della cache KV | Opzioni -ctk e -ctv | Variabile di ambiente globale | Impostazioni avanzate | Opzione all'avvio |
| API | llama-server, compatibile con OpenAI | API pulita + compatibilità con OpenAI | Server compatibile con OpenAI | API pulita + compatibilità con OpenAI |
| Aggiornamenti del motore | Lo stesso giorno, con ogni commit | Con un ritardo | Con un ritardo | Con un ritardo |
L'ultima riga conta più di quanto sembri. Quando esce una nuova architettura di modello, viene prima supportata in llama.cpp, poi negli strumenti che vi si appoggiano qualche giorno o settimana più tardi. Se vuoi provare un modello nella settimana della sua pubblicazione, questa è spesso l'unica strada.
#I quattro parametri che cambiano tutto
- -ngl (n-gpu-layers)
- Il numero di strati del modello caricati in VRAM. Il valore 99 significa «tutto ciò che ci sta». Se il modello supera la capacità della tua VRAM, riduci questo numero finché il caricamento non riesce: ogni strato lasciato alla CPU rallenta la generazione, ma un modello che funziona a 8 token al secondo è meglio di uno che non si avvia.
- -c (ctx-size)
- La finestra di contesto allocata. La cache KV cresce con essa: su un modello 8B, passare da 8.000 a 32.000 token richiede diversi GB di VRAM. Alloca ciò di cui hai bisogno, non il massimo dichiarato dal modello.
- -fa (flash-attn)
- Attiva Flash Attention, che riduce l'uso di memoria e accelera la lettura dei prompt lunghi. È anche un prerequisito per quantizzare la cache KV.
- --n-cpu-moe
- Per i modelli MoE, tenere gli esperti di un certo numero di strati in RAM e lasciare il resto sulla GPU. È proprio questo che permette di eseguire un MoE con 30 o 120 miliardi di parametri su una scheda da 16 GB a velocità utilizzabile.
- Flash Attention: attivarla in llama.cpp, Ollama e vLLM
- Quantizzare la cache KV per risparmiare VRAM
- Distribuire un modello su più GPU con tensor-split
- Documentazione ufficiale di llama-server (elenco completo delle opzioni)
#Cosa è cambiato: --fit imposta -ngl al posto tuo
Per molto tempo, impostare -ngl a mano è stata la prima indicazione di ogni guida a llama.cpp: impostarlo a 99 per caricare tutto sulla GPU, poi abbassarlo per tentativi se il caricamento falliva. Non è più un passaggio obbligatorio. Il progetto ha aggiunto un'opzione --fit, attiva per impostazione predefinita, che regola automaticamente i parametri non specificati (tra cui -ngl) affinché il modello rientri nella memoria disponibile. Su una scheda modesta, questo evita il consueto alternarsi tra un avvio fallito e una riduzione manuale di -ngl.
#Quale backend per la tua scheda?
llama.cpp si compila, oppure si scarica, per uno specifico backend di calcolo. La scelta giusta dipende esclusivamente dal tuo hardware. La tabella riprende le famiglie presenti nella nostra base di 90 configurazioni.
| Il tuo hardware | Backend consigliato | Nota |
|---|---|---|
| NVIDIA dalla GTX 10 alla RTX 50, per desktop e portatili | CUDA | Il percorso più veloce e meglio testato. |
| AMD Radeon RX 7000 e RX 9000 | ROCm (HIP) o Vulkan | ROCm è più veloce quando funziona. Vulkan si installa senza problemi, anche su Windows. |
| AMD Radeon RX 6000 e generazioni precedenti | Vulkan | Supporto parziale o assente di ROCm a seconda della scheda. |
| Apple da M1 a M5 | Metal | Attivato per impostazione predefinita nei binari macOS. Tutta la memoria unificata è utilizzabile. |
| GPU integrata Intel o AMD, Intel Arc | Vulkan o SYCL | Vantaggio reale rispetto all'uso della sola CPU sui modelli piccoli. |
| Nessuna GPU | CPU (AVX2, AVX-512, NEON) | Funziona ovunque. Cerca modelli con al massimo 8 miliardi di parametri. |
- Compilare llama.cpp con CUDA
- Compilare llama.cpp con Metal su Mac
- llama.cpp con Vulkan, il backend universale
#Le nostre misure con llama.cpp
llama.cpp è il motore di riferimento del nostro banco di prova, proprio perché funziona esattamente allo stesso modo su tutte le piattaforme. Ecco le velocità di generazione rilevate su Llama 3.1 8B in Q4, con un contesto di 2 048 token, una sola richiesta e Flash Attention attivata.
| Macchina | 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 unificati | 64 tok/s |
| RTX 3060 | 12 GB | 44 tok/s |
| Ryzen 7 7700, solo CPU | RAM di sistema | 7,8 tok/s |
Da questi dati emergono due considerazioni. Innanzitutto, il divario tra una RTX 3060 e il solo processore è di un fattore da cinque a sei: anche una scheda di fascia bassa cambia l'esperienza. Inoltre, questi numeri sarebbero praticamente gli stessi in Ollama o LM Studio sulle stesse macchine, perché il motore di calcolo è lo stesso.
#Restare su Ollama o passare a llama.cpp
| Continua a usare Ollama o LM Studio se… | Passa a llama.cpp se… |
|---|---|
| Vuoi parlare con un modello senza leggere la documentazione. | Il tuo modello supera la capacità della VRAM e vuoi regolare con precisione la ripartizione tra GPU e CPU. |
| Cambi spesso modello e apprezzi il catalogo integrato. | Vuoi provare un'architettura uscita questa settimana. |
| I tuoi strumenti (Open WebUI, estensioni dell'editor) si aspettano l'API di Ollama. | Stai configurando un server destinato a durare e vuoi controllare ogni opzione, dal contesto alla cache KV. |
#Iniziare in dieci minuti
Nessuna compilazione necessaria per provare. Sono disponibili binari precompilati per Windows, macOS e Linux a ogni versione, e i gestori di pacchetti si occupano del resto. Il comando seguente scarica un modello piccolo da Hugging Face e apre l'interfaccia web su http://localhost:8080.
Per un modello più ambizioso del catalogo, scarica il file GGUF che preferisci e indica il suo percorso con l'opzione -m. La compilazione dai sorgenti diventa utile solo per attivare un backend specifico o seguire lo sviluppo giorno per giorno.
#Gli errori di caricamento più comuni
La maggior parte dei blocchi con llama.cpp si riconduce a tre cause: un superamento della capacità di memoria disponibile, un file GGUF incompatibile con la build installata o un'opzione scritta male. Il messaggio di errore visualizzato sulla riga di comando indica quasi sempre quale delle tre sia la causa, a patto di leggerlo fino in fondo anziché chiuderlo e rilanciare il comando.
| Messaggio o sintomo | Causa probabile | Da provare |
|---|---|---|
| cudaMalloc failed: out of memory | Il modello, con il contesto richiesto, supera la VRAM disponibile | Ridurre -c, lasciare che --fit regoli -ngl oppure scegliere una quantizzazione più leggera |
| unknown model architecture | Il file GGUF utilizza un'architettura più recente rispetto al binario installato | Aggiornare alla versione più recente pubblicata; le nuove architetture arrivano prima in llama.cpp |
| Generazione molto lenta nonostante una GPU recente | Non tutti i layer vengono trasferiti sulla GPU, spesso per mancanza di VRAM libera | Verificare l'output del caricamento (riga « offloaded »), chiudere le altre applicazioni che occupano la scheda |
| error: invalid argument | Un'opzione rinominata o scritta in modo errato nel comando | Confrontare con llama-server --help, che elenca gli alias brevi e lunghi aggiornati |
Vale la pena leggere una volta per intero la riga di caricamento visualizzata all'avvio del server: indica il numero di strati effettivamente inviati alla GPU, la dimensione effettiva del contesto e il tipo di cache KV utilizzato. Spesso è più rapido che aggiungere opzioni a caso finché non funziona. Tieni anche d'occhio la versione installata: llama.cpp pubblica versioni nightly molto frequentemente e talvolta è già uscita una correzione per la tua scheda o il tuo modello, senza che sia ancora arrivata nel pacchetto Homebrew o winget che hai installato la settimana precedente.
#FAQ
llama.cpp è più veloce di Ollama?+
È necessario sapere compilare per usare llama.cpp?+
È possibile usare llama.cpp senza scheda grafica?+
Qual è la differenza tra llama.cpp e vLLM?+
E su Mac, llama.cpp o MLX?+
Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.