Programma
Mettiamo che tu abbia trovato un modello linguistico da 7B parametri che vuoi provare in locale. Ora hai un problema: solo i pesi in FP16 sono circa 14 GB, e il tuo laptop ha solo 16 GB di RAM.
Ancor prima di considerare sistema operativo, runtime di inferenza, cache del contesto e buffer temporanei, il modello sta già spingendo l’hardware al limite. È esattamente il problema per cui è stato progettato GGUF.
GGUF è diventato uno dei formati più importanti per eseguire localmente modelli linguistici a pesi aperti. Invece di richiedere una GPU enterprise o un’API cloud, GGUF rende pratico eseguire modelli quantizzati su laptop, desktop, Mac con Apple Silicon e persino alcuni dispositivi mobile o edge.
In questo articolo ti presenterò il formato GGUF e come funziona, ti dirò come la quantizzazione riduce le dimensioni del modello e come scegliere il giusto livello di quantizzazione, e infine come iniziare con Ollama e llama.cpp.
In breve
- GGUF (GGML Unified Format) è un formato di file binario che impacchetta pesi del modello, dati del tokenizer, metadati dell’architettura e informazioni di quantizzazione in un singolo file portatile
- Ha sostituito il vecchio formato GGML nel 2023 ed è ora il formato dominante per distribuire LLM quantizzati su Hugging Face
- GGUF è usato da llama.cpp, Ollama, LM Studio, GPT4All, KoboldCpp e altri strumenti di inferenza locale
- La quantizzazione è la caratteristica chiave: un modello 7B in FP16 pesa ~14 GB; una versione Q4_K_M ~4–5 GB
- I livelli di quantizzazione comuni vanno da Q2_K (il più piccolo, qualità più bassa) a Q8_0 (il più grande, quasi piena precisione) — Q4_K_M è il punto di partenza standard per la maggior parte dell’hardware
- GGUF gira su CPU, Apple Silicon (Metal), GPU NVIDIA (CUDA), GPU AMD (ROCm/Vulkan) e altro
- Scegliere il livello giusto significa bilanciare memoria, qualità dell’output, velocità di inferenza e lunghezza del contesto
Che cos’è GGUF?
GGUF, acronimo di GGML Unified Format, è un formato di file binario che impacchetta pesi del modello, dati del tokenizer, metadati dell’architettura e informazioni di quantizzazione in un singolo file portatile per l’inferenza con runtime basati su GGML, in particolare llama.cpp.
GGUF risolve un problema di distribuzione degli LLM. Molti formati di modello richiedono di mantenere insieme diversi file, inclusi pesi del modello, file del tokenizer, file di configurazione e codice di caricamento specifico per l’architettura. GGUF semplifica rendendo il file del modello in gran parte auto-descrittivo.
Un file GGUF in genere contiene:
- Tensori del modello
- Pesi quantizzati o non quantizzati
- Vocabolario del tokenizer
- Configurazione del tokenizer
- Metadati dell’architettura del modello
- Impostazioni della lunghezza del contesto
- Dimensioni degli embedding
- Numero di teste di attenzione
- Configurazione RoPE
- Nomi, forme e tipi di dato dei tensori
L’idea chiave è che il file si descrive da solo. Il runtime può ispezionare i metadati, comprendere l’architettura, caricare il tokenizer e mappare i tensori senza fare affidamento su un config.json separato o su una cartella del tokenizer.
Questo non significa che ogni file GGUF sia universalmente compatibile con ogni runtime per sempre. Il runtime deve comunque supportare l’architettura del modello e i tipi di tensore usati nel file. Tuttavia, GGUF rende quella compatibilità molto più semplice rispetto ai formati più vecchi perché il file include molte più informazioni strutturate.
Quattro caratteristiche distintive di GGUF sono:
- Distribuzione in un singolo file
- Supporto al memory mapping per un caricamento efficiente
- Metadati estendibili tipizzati key-value
- Supporto per molti tipi di quantizzazione, dalle forme a basso numero di bit fino alla piena precisione
GGUF è stato introdotto come parte dell’ecosistema llama.cpp e GGML nel 2023. Oggi è il formato dominante per distribuire LLM locali quantizzati su Hugging Face.
GGUF vs. GGML
Il formato GGML (Georgi Gerganov Machine Learning) è stato il predecessore di GGUF. È stato importante perché ha reso possibile le prime inferenze locali. Tuttavia, aveva limitazioni pratiche quando l’ecosistema si è ampliato oltre i modelli LLaMA originali.
I problemi comuni di GGML includevano:
- Gestione dei metadati meno flessibile
- Maggiori assunzioni di caricamento specifiche per architettura
- Gestione di tokenizer e configurazione meno auto-contenuta
- Estendibilità più difficile con l’apparire di nuove famiglie di modelli
GGUF ha risolto queste limitazioni con un formato più strutturato. Ha introdotto metadati tipizzati, embedding del tokenizer migliorati e un layout di file più chiaro. Questo ha reso più facile per llama.cpp e strumenti correlati supportare più architetture senza dover riprogettare continuamente la pipeline di caricamento.
Per gli utenti, la differenza importante è semplice: GGUF è il formato moderno. Se oggi scarichi modelli, quasi sempre dovresti scegliere GGUF anziché i vecchi file GGML.
GGUF vs. GPTQ e AWQ
Informandoti sui formati di file, avrai sicuramente incontrato GGUF, GPTQ (Generative Post-Training Quantization) e AWQ (Activation-Aware Weight Quantization). Se ne parla spesso insieme perché tutti e tre servono a rendere l’inferenza degli LLM più efficiente. Tuttavia, non appartengono alla stessa categoria.
GGUF è principalmente un formato di file e un contenitore di distribuzione. Supporta molti tipi di quantizzazione ed è strettamente associato all’inferenza locale in stile llama.cpp.
GPTQ e AWQ sono metodi di quantizzazione ed ecosistemi comunemente usati per l’inferenza ottimizzata su GPU, in particolare su hardware NVIDIA tramite framework come Transformers, ExLlama, AutoGPTQ e workflow compatibili con vLLM.
|
Caratteristica |
GGUF |
GPTQ |
AWQ |
|
Target principale |
Inferenza locale portabile |
Inferenza su GPU |
Inferenza su GPU |
|
Hardware comune |
CPU, Apple Silicon, NVIDIA, AMD, Vulkan, mobile |
GPU NVIDIA |
GPU NVIDIA |
|
Supporto CPU |
Forte |
Limitato |
Limitato |
|
Portabilità |
Molto alta |
Moderata |
Moderata |
|
Ecosistema tipico |
llama.cpp, Ollama, LM Studio, GPT4All |
Transformers, ExLlama, AutoGPTQ |
Transformers, workflow in stile TensorRT-LLM |
|
Throughput GPU |
Buono, soprattutto con offload |
Spesso molto elevato |
Spesso molto elevato |
|
Caso d’uso ideale |
Inferenza locale e su hardware misto |
Serving GPU ad alto throughput |
Serving GPU ad alto throughput |
Se il tuo obiettivo è la massima compatibilità tra laptop, desktop, Apple Silicon e hardware misto, GGUF è di solito la scelta più sicura.
Se il tuo obiettivo è il massimo throughput su server di inferenza NVIDIA dedicati, GPTQ, AWQ, FP8 o altri formati di serving ottimizzati per GPU potrebbero essere più adatti.
Perché usare GGUF?
GGUF è diventato popolare perché risolve problemi pratici di distribuzione. Personalmente lo trovo comodissimo quando faccio deploy in locale senza tutta la confusione di setup.
Eseguire LLM locali significava strumenti frammentati, pesi non compressi molto grandi, formati di modello incompatibili e passaggi di configurazione complicati. Ora GGUF può aiutarti a standardizzare gran parte di quel flusso di lavoro.
Invece di pensare a molti file separati e script di caricamento, gli utenti possono concentrarsi sulla scelta del modello giusto, del livello di quantizzazione e sull’esecuzione dell’inferenza.
Esegui i modelli in locale
GGUF ti consente di eseguire LLM sulla tua macchina. Questo significa:
- Nessun costo per token via API
- Nessuna dipendenza da un provider di inferenza hosted
- Nessuna necessità di inviare prompt a un’API di terze parti
- Inferenza offline possibile dopo aver scaricato il modello
È particolarmente utile per workflow sensibili alla privacy. Gli sviluppatori potrebbero non voler inviare codice proprietario, documenti interni, dati dei clienti o prompt riservati a un’API esterna.
L’inferenza locale non è automaticamente sicura di per sé. Devi comunque gestire correttamente macchina, log, applicazioni e controlli di accesso. Ma GGUF rende molto più accessibile il deploy locale privato.
Per fare pratica con i modelli in locale, vedi i nostri tutorial su eseguire Mistral Medium 3.5 con SGLang, eseguire DeepSeek V4 Flash in locale, eseguire l’efficiente modello Bonsai a 1 bit su un vecchio laptop e eseguire MiniMax M2 in locale come assistente di coding.
Flessibilità hardware
GGUF è utile perché funziona su molte configurazioni hardware.
A seconda del runtime e del backend, i modelli GGUF possono girare su:
- Macchine solo CPU
- GPU NVIDIA tramite CUDA
- Apple Silicon tramite Metal
- GPU AMD tramite HIP o Vulkan
- GPU Intel tramite SYCL o Vulkan
- Alcuni ambienti ARM e mobile
Questa flessibilità è una delle ragioni per cui llama.cpp è diventato influente. Non è stato progettato solo per GPU server di fascia alta. È stato pensato per rendere possibile l’inferenza locale su un’ampia gamma di hardware.
Per esempio, un utente Mac può affidarsi all’accelerazione Metal, mentre un utente Linux desktop può usare CUDA o Vulkan. Un utente solo CPU può comunque eseguire modelli quantizzati più piccoli, anche se la velocità di generazione sarà inferiore.
Ampio supporto nell’ecosistema
GGUF è supportato da molti strumenti di inferenza locale. Esempi includono:
- llama.cpp per inferenza da riga di comando e server
- Ollama per gestione dei modelli via CLI e accesso API
- LM Studio per una GUI desktop
- GPT4All per chat locali orientate alla privacy
- KoboldCpp per roleplay locale e workflow di generazione testo
- Jan e Open WebUI per interfacce IA locali
Questo conta perché gli utenti non sono vincolati a un’unica interfaccia. Lo stesso formato generale di modello può essere usato in workflow diversi.
Uno sviluppatore può fare benchmark di un modello con llama.cpp, chattarci in LM Studio, servirlo tramite Ollama e collegarlo a un’interfaccia browser tramite Open WebUI.
Distribuzione su Hugging Face
Hugging Face è diventato un importante hub di distribuzione per i modelli GGUF.

Fonte: Hugging Face
Molti modelli a pesi aperti popolari ricevono varianti GGUF caricate dalla community poco dopo il rilascio. Questi repository spesso includono diverse opzioni di quantizzazione così che gli utenti possano scegliere un modello adatto al proprio hardware.
Varianti caricate comuni includono:
- Q4_K_M
- Q5_K_M
- Q6_K
- Q8_0
- IQ4_XS
- IQ3_M
- IQ2_XXS
Questo significa che spesso non è necessario convertire manualmente. Per i modelli più popolari, qualcuno nella community ha già creato file GGUF per i livelli di quantizzazione più comuni.
Controllo granulare dimensione-qualità
GGUF offre un controllo fine sul compromesso tra dimensione e qualità. Puoi scegliere:
- Quantizzazioni più piccole per macchine con poca memoria
- Quantizzazioni intermedie per un uso quotidiano bilanciato
- Quantizzazioni a più bit per coding, ragionamento o output strutturati
- Piena o quasi piena precisione quando la memoria non è un vincolo
Questa flessibilità è uno dei vantaggi maggiori del formato. Invece di un unico target di distribuzione fisso, GGUF consente di adattare la stessa famiglia di modelli a molti livelli hardware.
Come funziona GGUF?
Un file GGUF è organizzato in tre parti principali:
- Header
- Metadati e informazioni sui tensori
- Dati dei tensori
La struttura esatta è definita dalla specifica GGUF. L’idea importante è che metadati e informazioni sui tensori compaiono prima dei dati grezzi dei tensori, consentendo a un runtime di capire cosa sta per caricare.
L’header
L’header identifica il file come GGUF e indica al runtime come effettuare il parsing del resto del file. Include:
- Magic number per GGUF
- Versione del formato
- Conteggio dei tensori
- Conteggio delle coppie key-value dei metadati
I file GGUF moderni usano comunemente la versione 3.
I motori di inferenza controllano prima il magic number. Se il file non inizia con l’identificatore GGUF atteso, il runtime può rifiutarlo prima di provare a fare il parsing dei tensori o allocare memoria.
È un passaggio semplice ma importante per sicurezza e affidabilità. Impedisce a un runtime di trattare accidentalmente un file binario non correlato come un modello.
Coppie key-value di metadati
I metadati GGUF sono un archivio key-value tipizzato. Questi metadati possono descrivere:
- Informazioni generali sul modello
- Famiglia di architetture
- Lunghezza del contesto
- Dimensione degli embedding
- Numero di layer
- Numero di teste di attenzione
- Parametri RoPE
- Vocabolario del tokenizer
- Token speciali
- Informazioni di quantizzazione
Le chiavi sono di solito con namespace. Esempi includono:
general.architecturegeneral.alignmentllama.context_lengthtokenizer.ggml.tokens
Il namespacing è importante perché consente a GGUF di supportare molte architetture senza cambiare l’intero formato di file. Un modello della famiglia LLaMA può usare chiavi llama.*, mentre altre famiglie possono usare metadati specifici per la propria architettura.
Questo è uno dei motivi per cui GGUF si è adattato bene a modelli oltre la famiglia LLaMA originale, incluse architetture come Qwen, Mistral, Gemma, DeepSeek, Phi e altre.
Informazioni sui tensori e dati dei tensori
Dopo i metadati, il file memorizza informazioni sui tensori e i dati dei tensori.
Le informazioni sui tensori descrivono:
- Nome del tensore
- Forma
- Tipo di dato
- Offset nella sezione dei dati dei tensori
La sezione dei dati dei tensori contiene i pesi effettivi del modello. Questi pesi possono essere memorizzati in piena precisione o in uno dei tipi di tensore quantizzato supportati da GGUF.
GGUF usa un valore di allineamento definito nei metadati, comunemente general.alignment. Molti file GGUF usano un allineamento a 32 byte, ma il modo corretto di descriverlo è che l’allineamento è controllato dai metadati piuttosto che codificato in modo permanente.
L’allineamento è importante perché consente ai runtime di accedere ai blocchi di tensori in modo efficiente.
Memory mapping
Uno dei vantaggi pratici di GGUF è il memory mapping, spesso chiamato mmap.
Con il memory mapping, il sistema operativo può mappare il file del modello nella memoria virtuale invece di costringere il runtime a copiare l’intero file in RAM in anticipo.
Questo può far sembrare l’avvio del modello molto più veloce, specialmente su SSD. Consente anche al sistema operativo di paginare i dati del modello secondo necessità.
Tuttavia, il memory mapping non fa miracoli. Il modello ha comunque bisogno di sufficiente banda di memoria pratica e RAM o VRAM disponibile per funzionare bene. Se il tuo sistema fa continuamente paging dal disco, l’inferenza può diventare lenta.
Un modo migliore per pensare a mmap è questo:
- Migliora l’efficienza di caricamento
- Riduce copie inutili
- Lascia al sistema operativo la gestione del paging
- Non elimina i requisiti di memoria dell’inferenza
Capire i tipi di quantizzazione GGUF
La quantizzazione comprime i pesi del modello in rappresentazioni a precisione inferiore.
Invece di memorizzare ogni peso come un valore a 16 bit in virgola mobile, un modello quantizzato memorizza valori approssimati usando meno bit. Questo riduce la dimensione su disco, l’uso di RAM e VRAM e la pressione sulla banda di memoria.
L’intuizione chiave è che molti pesi delle reti neurali non necessitano della piena precisione in virgola mobile durante l’inferenza. Un modello quantizzato con cura può preservare gran parte del comportamento originale diventando però molto più piccolo.
Nomenclatura della quantizzazione GGUF
I nomi di quantizzazione GGUF seguono di solito questo schema:
- Q significa quantizzato
- Il numero suggerisce i bit per peso approssimativi
- K si riferisce alla famiglia k-quant
- S, M e L indicano di solito varianti small, medium e large
Esempi includono:
- Q4_K_M
- Q5_K_M
- Q6_K
- Q8_0
Il nome è una guida utile, ma non è sempre un’indicazione esatta della dimensione totale del file. La dimensione reale dipende dal mix di tensori, dall’architettura, dai metadati, dalla dimensione del tokenizer e dal fatto che alcuni tensori restino a precisione più alta.
Tipi comuni di quantizzazione GGUF
|
Quantizzazione |
Comportamento approssimativo |
Dimensione file 7B appross. |
Nota sulla qualità |
|
Q2_K |
Quantizzazione a bit molto bassi |
Circa 2,5–3 GB |
Piccola, ma la perdita di qualità è spesso evidente |
|
Q3_K_M |
Quantizzazione bilanciata a bit bassi |
Circa 3,5–4 GB |
Usabile per chat leggere, non ideale per ragionamento |
|
Q4_K_M |
Quantizzazione a 4 bit bilanciata |
Circa 4–5 GB |
Ottimo default per la maggior parte degli utenti locali |
|
Q5_K_M |
Quantizzazione a 5 bit di qualità superiore |
Circa 5,5–6,5 GB |
Meglio per coding, ragionamento e compiti strutturati |
|
Q6_K |
Quantizzazione di alta qualità |
Circa 7–8 GB |
Spesso vicina al comportamento ad alta precisione |
|
Q8_0 |
Quantizzazione a 8 bit |
Circa 8–9 GB |
Alta qualità, ma molto più grande di Q4/Q5 |
Questi numeri sono approssimazioni per modelli densi classe 7B. Architetture più recenti, modelli mixture-of-experts, tokenizer più grandi e layout di tensori diversi possono cambiare la dimensione reale del file.
In pratica, Q4_K_M è diventato un default popolare perché offre un buon equilibrio tra dimensione e qualità. Molti utenti lo trovano sufficiente per chat generali, sintesi, riscritture e lavoro esplorativo di IA locale.
Q5_K_M e Q6_K sono spesso scelte migliori per carichi più esigenti, come coding o follow-up di istruzioni multi-step
Il motivo è semplice: questi compiti sono più sensibili a piccole degradazioni di qualità.
K-quant vs. I-quant
I K-quant sono la famiglia di quantizzazione ampiamente utilizzata dietro formati come Q4_K_M, Q5_K_M e Q6_K.
Usano schemi di quantizzazione raggruppata con informazioni di scaling che aiutano a preservare il comportamento del modello riducendo i requisiti di memoria. Sono popolari perché affidabili, ampiamente supportati e facili da trovare nelle release GGUF della community.
Gli I-quant, spesso scritti come formati IQ, sono tipi di quantizzazione più recenti come:
- IQ4_XS
- IQ3_M
- IQ2_XXS
- IQ1_S
Gli I-quant sono progettati per ottenere una qualità migliore a dimensioni molto piccole. Possono usare tecniche come quantizzazione consapevole dell’importanza e codebook di quantizzazione non lineari. Alcuni workflow usano una matrice di importanza, spesso chiamata imatrix, per preservare i pesi più importanti durante la quantizzazione.

Il compromesso è la complessità. Gli I-quant possono produrre ottimi risultati dimensione-qualità, soprattutto a bitrate molto bassi, ma possono richiedere workflow di quantizzazione e supporto runtime più attenti.
Per la maggior parte dei principianti, i K-quant restano il punto di partenza più semplice.
Scegliere un livello di quantizzazione per il tuo hardware
La seguente tabella offre punti di partenza pratici. Considerali regole empiriche, non garanzie ferree. Lunghezza del contesto, overhead del sistema operativo, offload su GPU, dimensione della cache KV e specifica architettura del modello possono tutti modificare i requisiti di memoria.
|
Livello hardware |
Modelli 7B/8B |
Modelli 13B/14B |
Modelli 30B/34B |
Modelli classe 70B |
|
8 GB RAM/VRAM |
Q4_K_M o più piccolo |
Q2_K/Q3_K potrebbero essere lenti |
Non pratico |
Non pratico |
|
16 GB RAM/VRAM |
Q5_K_M o Q6_K |
Q4_K_M |
Non pratico o molto vincolato |
Non pratico |
|
24 GB RAM/VRAM |
Q8_0 o Q6_K |
Q5_K_M/Q6_K |
Q3_K/Q4_K con vincoli |
Non pratico per la maggior parte degli utenti |
|
32 GB RAM/VRAM |
Q8_0 |
Q6_K/Q8_0 |
Q4_K_M/Q5_K_M |
Q2_K/Q3_K solo per esperimenti |
|
48 GB+ RAM/VRAM |
Q8_0 o FP16/BF16 dove supportato |
Q8_0 |
Q5_K_M/Q6_K |
Q4_K_M possibile con vincoli |
|
64 GB+ RAM/VRAM |
Alta precisione |
Alta precisione |
Q6_K/Q8_0 |
Q4_K_M/Q5_K_M più pratici |
Regole generali:
- Usa Q4_K_M come default sicuro per la maggior parte delle inferenze locali.
- Usa Q5_K_M quando la qualità conta più del risparmio di ogni gigabyte.
- Usa Q6_K o Q8_0 quando la memoria è disponibile e vuoi una fedeltà migliore.
- Evita Q2_K per lavoro serio a meno che tu non stia testando scenari estremi vincolati dalla memoria.
- Lascia memoria extra per la cache KV, soprattutto con finestre di contesto lunghe.
La cache KV è facile da trascurare. Un modello può entrare in RAM con una lunghezza di contesto corta ma fallire o rallentare con una lunghezza molto maggiore perché la cache cresce con la sequenza.
L’ecosistema GGUF
L’adozione di GGUF è trainata tanto dagli strumenti quanto dal formato stesso.
Un formato diventa utile solo quando gli utenti possono scaricare, eseguire, ispezionare, convertire e servire facilmente i modelli. GGUF beneficia di un ecosistema forte tra strumenti da riga di comando, app desktop, API e repository di modelli hosted.
1. llama.cpp
llama.cpp è il runtime GGUF originale e più importante. È un motore di inferenza leggero in C/C++ creato da Georgi Gerganov e mantenuto dalla community GGML. Il suo obiettivo principale è abilitare un’inferenza LLM efficiente con setup minimo su molte piattaforme hardware.
Il llama.cpp moderno supporta molti backend, tra cui:
- CPU
- CUDA per GPU NVIDIA
- Metal per dispositivi Apple
- Vulkan
- HIP per GPU AMD tramite ROCm
- SYCL per GPU Intel
- OpenCL in ambienti selezionati
- Altri backend specializzati come CANN, OpenVINO e WebGPU, a seconda del supporto della piattaforma
Include anche strumenti per conversione, quantizzazione, serving, benchmarking e inferenza da riga di comando. Strumenti comuni includono:
convert_hf_to_gguf.pyllama-quantizellama-clillama-serverllama-bench
I comandi per creare una build CMake base su CPU sono:
cmake -B build
cmake --build build --config Release
Per alcune configurazioni, è necessario aggiungere determinate flag al primo di questi due comandi:
- Disattiva Apple Metal su macOS (abilitato di default):
-DGGML_METAL=OFF - Build Vulkan:
-DGGML_VULKAN=1 - Build CUDA per GPU NVIDIA:
-DGGML_CUDA=ON
Nota che le build attuali usano opzioni CMake GGML_* come GGML_CUDA, GGML_VULKAN e GGML_HIP.
2. Ollama
Ollama è uno dei modi più semplici per eseguire modelli locali. Fornisce:
- Una CLI semplice
- Download e gestione dei modelli
- Una REST API locale
- Librerie ufficiali Python e JavaScript
- Integrazione con molte interfacce IA locali
Ollama archivia e gestisce i modelli per te, quindi l’utente di solito non interagisce direttamente con i file .gguf. Tuttavia, Ollama è costruito attorno all’inferenza locale compatibile con llama.cpp e può anche importare file GGUF tramite un workflow Modelfile.
Ollama espone un’API locale a:
http://localhost:11434/api
Due endpoint usati spesso sono:
/api/generateper il completamento dei prompt/api/chatper messaggi in stile chat
Per i principianti, Ollama è spesso il percorso più rapido da zero all’inferenza locale.
3. LM Studio

Fonte: LM Studio
LM Studio è un’app desktop per scoprire, scaricare e chattare con modelli locali. È utile per chi preferisce un’interfaccia grafica invece degli strumenti da riga di comando.
4. GPT4All

Fonte: GPT4All
GPT4All è un’altra applicazione IA multipiattaforma focalizzata su workflow di chatbot locali e privati. Supporta i modelli GGUF e offre un ambiente adatto ai principianti per l’inferenza locale.
Questi strumenti rendono GGUF accessibile ai non specialisti. Gli utenti non devono capire CMake, layout dei tensori o dettagli interni della quantizzazione solo per provare un modello locale.
Come iniziare con i modelli GGUF
Ci sono due modi pratici per iniziare:
- Usa Ollama per l’esperienza più semplice.
- Usa direttamente llama.cpp per avere più controllo.
Eseguire un modello con Ollama
Il workflow più semplice è scaricare il modello e avviare una sessione di chat interattiva:
ollama pull llama3.3
ollama run llama3.3
Per chiamare il modello da Python usando la REST API:
import requests
payload = {
"model": "llama3.3",
"prompt": "Give me three practical use cases for GGUF.",
"stream": False
}
response = requests.post(
"http://localhost:11434/api/generate",
json=payload
)
print(response.json()["response"])
Per applicazioni in stile chat, usa /api/chat:
import requests
payload = {
"model": "llama3.3",
"messages": [
{"role": "user", "content": "What is GGUF used for?"}
],
"stream": False
}
response = requests.post(
"http://localhost:11434/api/chat",
json=payload
)
print(response.json()["message"]["content"])
Il campo stream: false è importante per script semplici. Senza di esso, Ollama restituisce uno stream di oggetti JSON invece di una singola risposta JSON finale.
Puoi anche usare la libreria Python ufficiale di Ollama:
from ollama import chat
response = chat(
model="llama3.3",
messages=[
{"role": "user", "content": "Explain GGUF quantization simply."}
]
)
print(response.message.content)
Eseguire un file GGUF con llama.cpp
Se hai già un file .gguf, puoi eseguirlo direttamente con llama.cpp dopo aver compilato il progetto.
Esempio:
./build/bin/llama-cli \
-m models/model.Q4_K_M.gguf \
-p "Explain the difference between GGUF and GPTQ." \
-n 256
Se hai abilitato il supporto GPU, puoi fare offload dei layer sulla GPU:
./build/bin/llama-cli \
-m models/model.Q4_K_M.gguf \
-p "Summarize GGUF in five bullet points." \
-n 256 \
-ngl 99
Il flag -ngl controlla il numero di layer portati su GPU. Un valore alto come 99 si usa comunemente per fare offload del più possibile, supponendo che il modello rientri nella VRAM.
Per il serving via API, usa llama-server:
./build/bin/llama-server \
-m models/model.Q4_K_M.gguf \
-ngl 99 \
--host 127.0.0.1 \
--port 8080
Questo ti fornisce un’interfaccia server locale per integrare llama.cpp nelle applicazioni.
Convertire un modello Hugging Face in GGUF
La maggior parte degli utenti non ha bisogno di convertire manualmente i modelli perché le release GGUF della community sono ampiamente disponibili.
Tuttavia, la conversione manuale è utile quando:
- Hai effettuato il fine-tuning del tuo modello
- Non esiste ancora una versione GGUF
- Vuoi controllare tu stesso il processo di quantizzazione
- Hai bisogno di un tipo specifico di quantizzazione
Un workflow tipico è:
- Scaricare un modello da Hugging Face.
- Convertirlo in GGUF.
- Quantizzare il file GGUF.
Esempio:
huggingface-cli download mistralai/Mistral-7B-Instruct-v0.3 \
--local-dir mistral-7b
Poi converti in GGUF:
python convert_hf_to_gguf.py mistral-7b \
--outfile mistral-f16.gguf \
--outtype f16
Quindi quantizza:
./build/bin/llama-quantize \
mistral-f16.gguf \
mistral-q4_k_m.gguf \
Q4_K_M
Nell’attuale workflow di llama.cpp, convert_hf_to_gguf.py e llama-quantize sono gli strumenti rilevanti. Tutorial più vecchi possono riferirsi a script di conversione deprecati o a nomi di binari precedenti.
Vantaggi e limiti del formato GGUF
GGUF è ottimizzato per l’inferenza locale pratica. Non è un sostituto universale per ogni formato di modello o stack di serving.
|
Vantaggi |
Limiti |
|
Distribuzione del modello in un singolo file |
Non progettato per il training da zero |
|
Ecosistema forte per inferenza locale |
La quantizzazione a bit molto bassi può danneggiare la qualità |
|
Funziona su molti backend hardware |
I modelli grandi richiedono comunque molta memoria |
|
Supporta il memory mapping |
Il throughput GPU può essere inferiore a stack di serving GPU specializzati |
|
Molte scelte di quantizzazione |
Il runtime deve comunque supportare architettura e tipi di tensore del modello |
|
Distribuzione facile su Hugging Face |
La lunghezza del contesto può aumentare l’uso di memoria tramite la cache KV |
Per l’inferenza incentrata su CPU, Apple Silicon, hardware misto e privacy, GGUF è spesso un’ottima scelta.
Per il deployment su server NVIDIA ad alto throughput, altri formati e motori possono essere più veloci a seconda di modello, batch size, metodo di quantizzazione e framework di serving.
Considerazioni finali
GGUF rende pratica l’inferenza LLM locale impacchettando tutto ciò di cui un runtime ha bisogno (pesi, tokenizer, metadati, info di quantizzazione) in un unico file portatile. La sua vera forza è l’ecosistema attorno: llama.cpp, Ollama, LM Studio e Hugging Face lo hanno reso il formato predefinito per il deploy dell’IA locale.
Per la maggior parte degli utenti, il percorso è semplice: installa Ollama, scarica un modello ed eseguilo. Q4_K_M è un default solido; passa a Q5_K_M o Q6_K quando ti serve un miglior output di ragionamento o coding e hai memoria a sufficienza.
Se vuoi approfondire il deploy degli LLM, l’ottimizzazione dei modelli e i workflow di inferenza locale, esplora il percorso di carriera Associate AI Engineer for Data Scientists o Associate AI Engineer for Developers.
FAQ sul formato GGUF
Cosa significa GGUF?
GGUF sta per GGML Unified Format. È un formato di file binario progettato per archiviare ed eseguire localmente grandi modelli linguistici. GGUF impacchetta tensori, dati del tokenizer, metadati e informazioni sull’architettura in un singolo file portatile, rendendo la distribuzione locale molto più semplice rispetto ai vecchi workflow con più file.
GGUF è migliore di GPTQ o AWQ?
GGUF non è necessariamente "migliore" di GPTQ o AWQ in ogni scenario. GGUF è ottimizzato per portabilità e ampia compatibilità hardware, soprattutto per inferenza su CPU, Apple Silicon e hardware misto tramite strumenti come llama.cpp e Ollama. GPTQ e AWQ sono in genere più ottimizzati per l’inferenza su GPU NVIDIA ad alto throughput in ambienti server.
Quale quantizzazione GGUF dovrebbero usare i principianti?
Per la maggior parte degli utenti, Q4_K_M è il punto di partenza più sicuro. Offre un ottimo equilibrio tra qualità del modello, uso di RAM e velocità di inferenza. Chi ha più memoria e vuole migliori prestazioni di ragionamento o coding può preferire Q5_K_M o Q6_K, mentre formati a bit più bassi come Q2_K sono di solito adatti solo alla sperimentazione.
I modelli GGUF possono girare senza GPU?
Sì. Uno dei vantaggi maggiori di GGUF è il forte supporto per CPU. Strumenti come llama.cpp possono eseguire modelli GGUF interamente su CPU, anche se la velocità di inferenza sarà di solito inferiore rispetto all’accelerazione GPU. Modelli quantizzati più piccoli, come varianti 7B o 8B Q4_K_M, sono spesso pratici su CPU consumer moderne.
Devo convertire manualmente i modelli in GGUF?
Di solito no. La maggior parte dei modelli a pesi aperti popolari ha già versioni GGUF caricate dalla community su Hugging Face. La conversione manuale è utile principalmente se hai fatto il fine-tuning del tuo modello, hai bisogno di un tipo di quantizzazione specifico o vuoi un controllo più stretto sul processo di conversione e quantizzazione usando llama.cpp.
Sono Austin, blogger e autore tech con anni di esperienza come data scientist e data analyst nel settore sanitario. Partito dalla biologia, oggi aiuto altri a fare lo stesso passaggio attraverso il mio blog tecnologico. La mia passione per la tecnologia mi ha portato a collaborare come autore con decine di aziende SaaS, ispirando altre persone e condividendo le mie esperienze.
