Vai al contenuto
AI.info

The Pulse

Hugging Face porta i modelli quantizzati di llama.cpp in Transformers

Hugging Face ha aggiunto il supporto per eseguire modelli quantizzati di llama.cpp tramite Transformers, consentendo agli sviluppatori di caricare checkpoint GGUF con le familiari API di Python e PyTorch.

Hugging Face porta i modelli quantizzati di llama.cpp in Transformers

AI.info Team ·

Hugging Face ha aggiunto il supporto per eseguire modelli quantizzati di llama.cpp direttamente tramite Transformers, consentendo agli sviluppatori di caricare checkpoint GGUF con le consuete API di Python e PyTorch, senza dover passare a un runtime separato. L’azienda ha pubblicato l’aggiornamento il 22 settembre 2026, concentrandosi inizialmente sull’inferenza locale su Apple Silicon e sull’architettura Qwen3.5.

La modifica collega due componenti molto usati dell’ecosistema dei modelli open. GGUF è il formato dei modelli sviluppato per llama.cpp, mentre Transformers è la libreria principale di Hugging Face per definire, caricare e valutare modelli. Hugging Face afferma che il nuovo percorso riutilizza i kernel ggml tramite la sua kernels library e riduce il sovraccarico nel metodo generate.

È qui che siamo arrivati. E non mentirò: è una sensazione davvero magica 🧙‍♀️
Qwen3.6 27B in esecuzione nell’agente di programmazione Pi tramite Llama.cpp sul MacBook Pro
Per compiti non banali nelle basi di codice di Hugging Face, sembra davvero, davvero vicino a raggiungere l’ultimo Opus di Claude…

Julien Chaumond, direttore tecnico di Hugging Face

Qwen3.5 si adatta più facilmente ai computer locali

I pacchetti GGUF raccolgono in un unico file i pesi e i metadati del modello, comprese le informazioni sul tokenizer e, facoltativamente, un template di chat. I diversi livelli di quantizzazione riducono l’uso della memoria memorizzando i pesi con una precisione inferiore; alcune varianti, come Q4_K_M, usano per lo più pesi a quattro bit, mantenendo una precisione maggiore per tensori selezionati.

Hugging Face mostra l’effetto usando il checkpoint GGUF Qwen3.5-4B di Unsloth. Il file BF16 non quantizzato è indicato a 8,42 GB, contro i 3,53 GB di Q6_K, i 3,14 GB di Q5_K_M e i 2,74 GB di Q4_K_M. L’azienda consiglia di iniziare con Q4_K_M e passare a varianti più grandi quando è disponibile più memoria, avvertendo però che l’impatto sulla qualità dipende dal modello e dal compito.

Un argomento GGUF, poi il normale codice Transformers

La nuova procedura di caricamento richiede poche impostazioni specifiche per GGUF. Gli sviluppatori passano a from_pretrained un repository Hub e il nome del file, usando gguf_file sia per il tokenizer sia per il modello. Il resto del flusso di lavoro usa le normali chiamate di Transformers, come apply_chat_template e generate.

Nell’esempio di Hugging Face viene caricato unsloth/Qwen3.5-4B-GGUF con Qwen3.5-4B-Q4_K_M.gguf. Quando i pesi quantizzati restano impacchettati nel backend Metal di Apple, Transformers carica automaticamente kernel ggml e Metal compatibili e usa ggml-org/ggml-attn per l’attenzione. Se non è possibile recuperare il kernel per l’attenzione, il modello ripiega su sdpa con un avviso. Separatamente, se non è disponibile un kernel di quantizzazione compatibile, il caricatore dequantizza il modello, aumentando il consumo di memoria.

Lo stesso checkpoint può essere eseguito anche tramite transformers serve, che espone un’API compatibile con OpenAI. Il comando accetta un identificativo del modello nel formato <model_id>:<filename>.gguf, consentendo di selezionare un file specifico da un repository che contiene più varianti quantizzate.

Hugging Face confronta i risultati con llama.cpp

Hugging Face confronta la propria implementazione con llama.cpp usando tre checkpoint GGUF: un piccolo modello denso, un modello denso più grande e un modello mixture-of-experts. I test vengono eseguiti su un MacBook Pro con processore M2 Max, 32 GB di memoria unificata, macOS 26.6, PyTorch 2.12.1 e kernels 0.17.0.

L’azienda afferma che Transformers si avvicina a llama.cpp su tutti e tre i checkpoint. Il confronto non è un test identico: la misurazione di Transformers genera 128 token a partire da un prompt di 12 token e include l’elaborazione del prompt, mentre il risultato di llama-bench di llama.cpp riporta il throughput della sola decodifica. Hugging Face afferma inoltre che i test prevedono tre ripetizioni dopo il riscaldamento e lunghi intervalli di raffreddamento, perché l’esecuzione di test consecutivi ha ridotto le prestazioni del 10% o più sulla macchina di prova.

Hugging Face continua a consigliare llama.cpp quando il requisito principale è un’inferenza locale efficiente. Il suo runtime dedicato, la gestione della memoria e il supporto hardware sono ancora progettati appositamente per questo scopo. La nuova integrazione è invece rivolta agli sviluppatori che vogliono esaminare le attivazioni, modificare il codice dei modelli, valutare checkpoint quantizzati o provare modifiche alla generazione in Python.

I kernel ggml vanno oltre GGUF

Il lavoro porta anche diversi kernel derivati da ggml nell’esecuzione dei modelli PyTorch. Il kernel ggml-quantization legge direttamente i pesi impacchettati per le operazioni matriciali, mentre ggml-norm gestisce la normalizzazione e ggml-attn fornisce l’attenzione Metal. Un kernel gated delta-network supporta i livelli di attenzione lineare usati da Qwen3.5 e Qwen3.8, e Hugging Face ha aggiunto una propria implementazione top-k per il routing dei modelli mixture-of-experts.

Questo approccio potrebbe in futuro aiutare i modelli che non dispongono di un’implementazione dedicata in llama.cpp. Hugging Face afferma che Transformers include già versioni PyTorch di molte architetture, quindi kernel ggml compatibili potrebbero accelerare alcune operazioni senza richiedere un’implementazione C++ completa in llama.cpp. La stessa tecnica potrebbe essere applicata anche a modelli di visione artificiale, audio e multimodali, sebbene ogni architettura richieda comunque integrazione e convalida.

Apple Silicon è il primo limite

Il percorso iniziale per l’inferenza con pesi impacchettati è limitato al backend MPS di Apple Silicon. L’importazione di GGUF tramite dequantizzazione resta disponibile come percorso separato, ma il supporto al formato non significa che i kernel per i pesi impacchettati funzionino su tutti i dispositivi.

Anche il padding e il batching richiedono altro lavoro. Gli input senza padding beneficiano di un’ottimizzazione che rimuove una maschera di attenzione superflua nelle prime fasi della generazione, mentre i batch con padding non possono usare questa scorciatoia e potrebbero essere più lenti. Al momento, il supporto alle architetture si concentra sui modelli densi e mixture-of-experts Qwen3.5, oltre che sui checkpoint Qwen3.8 compatibili.

Per ora, il risultato pratico è circoscritto ma utile: uno sviluppatore può prendere un checkpoint GGUF compatto realizzato per llama.cpp, caricarlo tramite Transformers, mantenere in Python il ciclo di generazione e usare gli strumenti PyTorch per esaminare o modificare il modello. La prima versione supporta l’inferenza con pesi impacchettati di Qwen3.5 su Apple Silicon; il supporto ad altre architetture e ad altro hardware arriverà in seguito.

Fonte

Esplora

Altri articoli