I grandi modelli linguistici (LLM) diventano lenti e costosi all’aumentare del traffico. Un articolo pubblicato sul sito Machine Learning Mastery, firmato Bala Priya, propone un albero decisionale in sei domande per scegliere, tra le diverse tecniche esistenti, quella che corrisponde al collo di bottiglia di un dato carico di lavoro.
- Ogni tecnica di ottimizzazione dell’inferenza risponde a un collo di bottiglia preciso.
- Un albero decisionale in sei domande aiuta a scegliere la tecnica adatta.
- Il prefix caching funziona solo se il prefisso è identico carattere per carattere.
- Ogni tecnica ha compromessi, quindi una scarsa resa richiede di verificarne l’ipotesi di partenza.
Cosa presuppone ogni tecnica
Durante l’inferenza, cioè la fase in cui il modello produce le sue risposte, le richieste si accumulano dietro le generazioni più lunghe, la memoria del processore grafico (GPU) si riempie di stati di attenzione memorizzati nella cache, e l’hardware passa una parte significativa del suo tempo in attesa di letture dalla memoria. Le tecniche di ottimizzazione dell’inferenza non mirano tutte allo stesso punto: alcune agiscono sulla memoria, altre sul calcolo, altre sull’ordinamento delle richieste.
Ciascuna si basa su un’ipotesi precisa. La quantizzazione, la sparsità strutturata e la distillazione presuppongono che il modello sia troppo grande per l’hardware o il budget di latenza, e che ridurne le dimensioni valga un rischio sulla precisione. Il prefix caching presuppone che molte richieste condividano un medesimo inizio di sequenza di token (le unità di testo elaborate dal modello), il cui ricalcolo sarebbe inutile. Il batching continuo presuppone che le richieste arrivino in parallelo con lunghezze di risposta imprevedibili.
Altre tecniche rispondono a situazioni diverse. Il PagedAttention riguarda una memoria cache KV frammentata o sovradimensionata, il decodifica speculativa una decodifica limitata dalla generazione token per token, e la disaggregazione prefill-decode una contesa tra le due fasi su una stessa GPU. Il parallelismo di tensori o di pipeline serve per i modelli che non stanno nella memoria di un singolo dispositivo, lo scaricamento della cache KV ai casi in cui input utili vengono espulsi troppo presto, e l’elaborazione in batch offline alle richieste che non richiedono una risposta interattiva.
Un albero decisionale in sei domande
La prima domanda riguarda l’hardware: il modello sta comodamente sul target? Se è troppo pesante, l’autore raccomanda di iniziare con la compressione del modello, perché determina la capacità residua. La seconda domanda riguarda la ripetizione dei prompt. Le applicazioni di chat reinviano l’intera cronologia a ogni turno, e le pipeline di generazione aumentata tramite recupero (RAG) spesso aggiungono le stesse istruzioni a contesti diversi. In questo caso, il prefix caching è presentato come «la tecnica con il miglior rapporto effetto/sforzo», a condizione che il prefisso sia identico carattere per carattere. Il contenuto stabile deve quindi precedere il contenuto variabile.
Le domande seguenti riguardano il traffico e la memoria. Se richieste brevi e lunghe arrivano in raffiche che si sovrappongono, il batching continuo elimina i tempi morti, con le sequenze terminate che lasciano immediatamente il batch. Se la cache KV riserva memoria inutilizzata, il PagedAttention la suddivide in pagine di dimensione fissa. Quando la velocità di generazione di ciascun utente prevale sul throughput globale, può essere presa in considerazione la decodifica speculativa, che si basa su un piccolo modello bozza. L’ultima domanda, la disaggregazione prefill-decode, riguarda solo i deployment su larga scala, perché modifica l’architettura del servizio.
Compromessi e segni di fallimento
Ogni tecnica ha il suo rovescio. La quantizzazione può comportare una perdita di precisione, il prefix caching fallisce alla minima divergenza di carattere, e la decodifica speculativa richiede un modello bozza con un tasso di accettazione sufficiente. La disaggregazione comporta un costo di trasferimento della cache KV tra nodi, e l’elaborazione offline non è adatta agli usi soggetti a tempi di risposta stringenti.
L’articolo dettaglia anche i sintomi di un fallimento. Un tasso di successo della cache dei prefissi vicino allo zero può derivare da una serializzazione non deterministica o da contenuto dinamico posto all’inizio del prompt. Una decodifica speculativa più lenta della decodifica classica indica un tasso di accettazione troppo basso. Se la disaggregazione degrada la latenza, il carico di lavoro è forse troppo piccolo. Se il guadagno di throughput atteso dalla quantizzazione non appare, forse sono stati quantizzati solo i pesi. Secondo l’autore, quando una tecnica sottoperforma ripetutamente, bisogna prima verificare la sua ipotesi di partenza prima di aggiungere complessità.
