Vai al contenuto principale
FondamentiIntermedio6 min di lettura

Decodifica speculativa e MTP: velocità gratis

i
iaLocale Team
•
Decodifica speculativa e MTP: velocità gratis

L'IA locale ha un collo di bottiglia ben conosciuto: il decoding autoregressive. Ogni token della risposta passa per un passaggio completo del modello, e anche su hardware serio significa decine di token al secondo — abbastanza per leggere, spesso non abbastanza per lavorare. Esiste però una tecnica che aggira questo limite quasi gratis: la decodifica speculativa. In questo articolo vediamo come funziona, perché è "lossless", cosa significa la sigla MTP che appare nei modelli Qwen, e come attivarla oggi con llama.cpp, vLLM e SGLang.

Come funziona il draft-verify

L'idea originale arriva dal paper Fast Inference from Transformers via Speculative Decoding di Leviathan, Kalman e Matias (arXiv:2211.17192): i task di linguaggio difficili contengono spesso sottotask più facili, che un modello piccolo può approssimare molto bene. Il meccanismo è un anello in due tempi:

  1. Draft — un modello piccolo (o una testa leggera dello stesso modello) propone K token consecutivi in rapidissima sequenza.
  2. Verify — il modello grande esegue un solo forward pass su quei K token e li valuta in parallelo. Se i primi j token sono corretti, vengono accettati; il primo token rifiutato viene sostituito con la risposta vera del modello grande.

Il punto cruciale è il campionamento: con il metodo corretto (speculative sampling), la distribuzione finale dei token è identica a quella del modello grande usato da solo. Nessuna fine-tuning, nessuna approssimazione sulla qualità: se un token proposto viene accettato, è esattamente come se l'avesse prodotto il modello grande.

Perché conviene? Il costo del draft è quasi trascurabile rispetto al forward del modello grande, e quel singolo forward verifica fino a K token invece di uno. Se il modello piccolo ha ragione spesso — e su testo reale succede molto spesso — si moltiplica la velocità per un fattore vicino alla lunghezza media dei blocchi accettati.

MTP: le teste multiple dentro i checkpoint Qwen

Negli ultimi checkpoint della famiglia Qwen, come Qwen3.8-27B, il modello include già una componente di Multi-Token Prediction: durante l'addestramento, il modello impara a predire non solo il token successivo ma anche i due o tre successivi, tramite teste MTP addestrate con più passi. La documentazione ufficiale del modello lo conferma: "MTP (Multi-Token Prediction): trained with multiple steps" (model card Qwen3.8).

In pratica questo significa che non serve un secondo modello: le teste MTP fanno da bozze dentro lo stesso checkpoint. In llama.cpp si abilita tutto con un flag, senza file extra:

llama-server -m Qwen3.8-27B.Q4_K_M.gguf --spec-type draft-mtp

Il flag --spec-type draft-mtp è documentato nella documentazione ufficiale di llama.cpp come "Multi Token Prediction (MTP) heads from the main model". Per i modelli che invece hanno un draft separato, lo stesso documento elenca gli altri tipi (draft, draft-eagle3, ngram-simple e altri).

EAGLE: il draft che legge i pensieri del modello

La famiglia EAGLE — dal paper EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty (arXiv:2401.15077) — sposta il drafting a un livello più informativo: invece di far predire i token a un modello separato che legge solo il testo, un piccolo draft model legge gli stati nascosti del modello grande e predice da lì i token successivi. EAGLE è lossless come il sampling speculativo classico: nessuna fine-tuning del modello target e distribuzione dell'output invariata.

Mistral ha adottato questa via per il suo flagship: insieme a Mistral Medium 3.5, dense 128B con finestra di contesto da 256k, pubblica un draft head EAGLE dedicato, mistralai/Mistral-Medium-3.5-128B-EAGLE (model card). Il draft è un corpo da 2 layer quantizzato in FP8, circa 4 GB, pensato per serving a bassa concorrenza dove conta la latenza.

Le impostazioni di partenza consigliate sono (num_steps, eagle_topk, num_draft_tokens) = (3, 1, 4), e vale la pena ricordare il principio: EAGLE brilla a bassa concorrenza; in batch-heavy il throughput è dominato dal passaggio del modello target e il contributo del draft diminuisce.

Quanto si guadagna davvero

I numeri dipendono da hardware, modello e tipo di testo, ma gli ordini di grandezza sono stabili:

  • SGLang riporta per Mistral Medium 3.5 su 4× H200 un single-stream di 69,07 tok/s senza EAGLE e 97,10 tok/s con EAGLE, con accept length di 1,72 token a step (cookbook SGLang): un guadagno del ~40% nella latenza di streaming su un singolo utente.
  • I draft EAGLE-3 su altri modelli raggiungono tipicamente 3-4 token accettati per passo, con speedup che salgono verso i 3×.
  • Su laptop e GPU consumer i guadagni percentuali tendono a essere più alti: il draft costa poco in RAM e il verify parallelizzato ammortizza bene il costo del prefill.

La regola pratica: se usi l'IA locale per risposte lunghe (scrittura, codice, chat), la decodifica speculativa si ripaga da sola; se generi solo pochi token alla volta, il prefill domina e il guadagno si assottiglia.

Come abilitarla: tre scenari concreti

1. Modello con teste MTP (Qwen3.8, llama.cpp). Basta il flag, già visto sopra. Nessun file aggiuntivo, nessun download: le teste MTP viaggiano dentro il GGUF del modello.

2. Draft EAGLE ufficiale (Mistral Medium 3.5, vLLM). Il checkpoint EAGLE di Mistral è servito nativamente da vLLM:

vllm serve mistralai/Mistral-Medium-3.5-128B-EAGLE

con i parametri speculative token count = 3 e metodo eagle, come documentato nella model card. Stesso supporto day-zero in SGLang, con tag docker dedicati.

3. Serving ad alto throughput (SGLang). SGLang è un motore di serving open source (licenza Apache-2.0) che ha reso il decoding speculativo una feature di prima classe: MTP, EAGLE, draft model, ngram — tutti dietro il medesimo --speculative-algorithm. È la scelta naturale quando si serve un modello a più utenti, perché combina continuous batching, RadixAttention e speculative decoding in un unico stack.

Quando ha senso e quando no

La decodifica speculativa non è magia: il guadagno è proporzionale alla lunghezza dei blocchi accettati, che dipende dalla prevedibilità del testo. Risposte concise o molto creative accettano meno; testo strutturato, codice e risposte templated accettano di più. Per l'uso quotidiano su hardware consumer — l'ambito in cui lavora la maggior parte di chi porta l'IA locale sul proprio hardware — è uno dei miglioramenti a costo zero più grandi disponibili: si abilita con un flag, non cambia la qualità, e toglie un peso concreto dalla latenza percepita. Il modello resta il tuo, i token restano tuoi, e la velocità ora non è più un compromesso.

Riferimenti

Articolo generato con IA

In questi percorsi

#decodifica-speculativa#eagle#mtp#performance#velocita
Condividi:

Ti è piaciuto questo articolo?

Iscriviti alla newsletter per ricevere nuovi tutorial e guide.

Dopo l'iscrizione ricevi una email di conferma (double opt-in). Senza conferma non inviamo nulla. Nessuno spam, ti promettiamo.

Articoli Correlati

RAG: fai domande ai tuoi documenti
Fondamenti4 min di lettura

RAG: fai domande ai tuoi documenti

RAG, Retrieval Augmented Generation, è il modo più semplice per far rispondere un modello locale a domande sui tuoi documenti: embedding, database vettoriale e ciclo di recupero, con un esempio concreto.

iaLocale Team - 24 settembre 2026Leggi di più