Il collo di bottiglia del serving
Addestrare un modello linguistico di grandi dimensioni è costoso, ma servirlo in produzione presenta sfide altrettanto complesse. Ogni richiesta di generazione richiede una KV cache (key-value cache) che cresce proporzionalmente alla lunghezza della sequenza e al numero di layer del modello. Con centinaia di richieste concorrenti, la gestione della memoria GPU diventa il fattore limitante: l’approccio ingenuo pre-alloca blocchi di memoria contigui per ogni sequenza, sprecando dal 60% al 80% della memoria disponibile a causa della frammentazione e della pre-allocazione conservativa.
PagedAttention: la memoria virtuale per i Transformer
vLLM, sviluppato dal team di ricerca di UC Berkeley, introduce PagedAttention, un meccanismo di gestione della KV cache ispirato al concetto di paginazione della memoria virtuale dei sistemi operativi. Invece di allocare blocchi contigui per l’intera sequenza, PagedAttention suddivide la KV cache in blocchi di dimensione fissa (le “pagine”) che possono essere allocati in posizioni non contigue della memoria GPU.
Una tabella di mapping — analoga alla page table di un sistema operativo — traduce gli indirizzi logici della sequenza in indirizzi fisici dei blocchi. I blocchi vengono allocati on-demand man mano che la generazione procede, eliminando la necessità di pre-allocare memoria per la lunghezza massima della sequenza.
Continuous batching e condivisione
Il secondo contributo fondamentale è il continuous batching: nuove richieste vengono inserite nel batch di esecuzione appena una sequenza termina, senza attendere che l’intero batch sia completato. Questo elimina i tempi morti in cui la GPU resta inattiva in attesa che tutte le sequenze del batch raggiungano la fine.
PagedAttention abilita inoltre la condivisione della memoria tra sequenze: quando tecniche come il beam search o il parallel sampling generano più sequenze dallo stesso prompt, i blocchi di KV cache del prefisso condiviso vengono referenziati tramite contatori, non duplicati. Il risparmio di memoria può raggiungere il 55%.
Risultati e adozione
Nei benchmark pubblicati, vLLM raggiunge un throughput 2-4 volte superiore rispetto all’inferenza naive con HuggingFace Transformers, e fino a 24 volte superiore in scenari con sequenze lunghe e alto parallelismo. Il progetto è rilasciato come libreria open source con un’API compatibile con lo standard OpenAI, permettendo un’integrazione trasparente in sistemi esistenti. Per il deployment in produzione di modelli linguistici, il layer di serving diventa tanto critico quanto il modello stesso.
Link: docs.vllm.ai
