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.