Ottimizzazione della dequantization in Llama.cpp
Un recente lavoro open source si concentra sull'ottimizzazione della dequantization della cache KV in Llama.cpp. L'implementazione TurboQuant mirava a migliorare le prestazioni, ma si è imbattuta in un collo di bottiglia significativo: la dequantization.
In contesti ampi (32K su M5 Max), la sola dequantization assorbiva circa il 40% del tempo di decodifica. Approcci convenzionali come LUT, SIMD e kernel fusi non hanno prodotto miglioramenti apprezzabili.
Sfruttare la sparsità dell'attenzione
La soluzione efficace è stata quella di sfruttare la sparsità dell'attenzione. Poiché Flash Attention calcola i pesi softmax prima di accedere a V, in contesti lunghi, la maggior parte di questi pesi tende a zero. Invece di accelerare la dequantization, si è scelto di saltarla completamente per le posizioni con attenzione trascurabile.
I risultati su Qwen3.5-35B-A3B (M5 Max) con TurboQuant KV (turbo3) mostrano un aumento del 22.8% nella velocità di decodifica a 32K, senza variazioni nella perplexity. Test simili su cache KV standard q8_0 hanno mostrato un aumento del 5% nella decodifica, sempre senza impatto sulla perplexity.
L'ottimizzazione non è specifica per TurboQuant, ma sfrutta direttamente la sparsità dell'attenzione. Test su M2 Pro hanno mostrato miglioramenti significativi con 4-mag LUT sul lato K e sparse V stack.
Il codice e i benchmark sono disponibili su GitHub.
💬 Commenti (0)
🔒 Accedi o registrati per commentare gli articoli.
Nessun commento ancora. Sii il primo a commentare!