Chunked Prefill
Scopri in che modo il prefill a blocchi migliora la latenza e il throughput dell'inferenza LLM suddividendo i prompt lunghi in blocchi di token per un servizio più fluido con carichi di lavoro concorrenti.
Il prefill a blocchi è una tecnica di pianificazione dell'inferenza che divide un prompt di input lungo in gruppi più piccoli di tokens anziché elaborare l'intero prompt in un'unica operazione ininterrotta. Un motore di inferenza può intercalare questi blocchi con la generazione di token per altre richieste, impedendo a un prompt lungo di monopolizzare la GPU. Il risultato è in genere una latenza più fluida in presenza di carichi di lavoro concorrenti, un migliore utilizzo dell'hardware e un servizio più prevedibile per le applicazioni interattive di large language model.
Come funziona il prefill a blocchi#
L'inferenza autoregressiva di Transformer ha due fasi principali:
- Prefill: Il modello elabora tutti i token di input, calcola i relativi stati di attenzione e popola la KV cache. Il prefill valuta molti token in parallelo ed è solitamente limitato dalla potenza di calcolo.
- Decode: Il modello genera l'output un token alla volta leggendo gli stati precedentemente memorizzati nella cache. La fase di decode è spesso limitata dalla larghezza di banda della memoria piuttosto che dal calcolo puro.
Senza la suddivisione in blocchi, una richiesta da 20.000 token può occupare un passaggio di inferenza per molto più tempo rispetto a una richiesta breve. Le generazioni attive possono quindi subire pause, aumentando la latenza tra un token e l'altro anche se i loro prompt sono piccoli.
Con il prefill a blocchi, lo scheduler assegna a ciascuna iterazione un budget di token. Prima pianifica le operazioni di decode attive, poi usa il budget rimanente per uno o più blocchi di prompt. Se un prompt non rientra, i suoi token rimanenti attendono un'iterazione successiva. L'attuale vLLM optimization guidance descrive questo approccio come un modo per combinare il lavoro di prefill, intensivo di calcolo, con il decode, intensivo di memoria.
La suddivisione in blocchi modifica il momento in cui i token del prompt vengono elaborati, non il loro ordine o significato. Ogni blocco completato estende lo stato di attenzione memorizzato nella cache della richiesta fino a quando il prompt completo è pronto e la decodifica può iniziare.
Perché il prefill a blocchi è importante#
Il prefill a blocchi affronta obiettivi di performance in conflitto nel model serving di produzione:
- Latenza tra token: Dare priorità alle richieste di decode esistenti aiuta le risposte in streaming a continuare senza lunghe pause.
- Tempo al primo token: Blocchi grandi completano prima un nuovo prompt, mentre blocchi molto piccoli potrebbero ritardare il primo token generato.
- Throughput: La combinazione del lavoro di prefill e decode può utilizzare la capacità di calcolo e la larghezza di banda della memoria della GPU in modo più efficace.
- Equità: I prompt lunghi hanno meno probabilità di bloccare molte richieste brevi e interattive.
L'impostazione del blocco o del budget di token rappresenta quindi un compromesso. La vLLM scheduler configuration espone i controlli per i limiti di token in batch, i prefill parziali e le soglie per i prompt lunghi. Budget più piccoli favoriscono generalmente una decodifica reattiva, mentre budget più grandi favoriscono un'ingestione più rapida dei prompt.
La suddivisione in blocchi non elimina ogni collo di bottiglia. I contesti lunghi consumano comunque memoria della cache e un'ammissione troppo aggressiva può causare pressione sulla cache, preinflazione delle richieste o lavoro ripetuto. Gli operatori dovrebbero misurare la mediana e la coda della inference latency, il tempo al primo token, la latenza tra token, il throughput e l'utilizzo della memoria della GPU con distribuzioni di prompt realistiche.
Concetti di inferenza correlati#
Il prefill a blocchi è strettamente connesso a diverse ottimizzazioni ma persegue uno scopo distinto:
- Continuous batching: Aggiunge e rimuove dinamicamente le richieste durante la generazione. Il prefill a blocchi lo integra rendendo l'elaborazione dei prompt lunghi pianificabile a livello di limiti dei token.
- Prompt caching: Riutilizza gli stati precedentemente calcolati per un prefisso di prompt ripetuto. Il prefill a blocchi pianifica nuovi calcoli; non salta tali calcoli.
- Gestione della KV-cache con paginazione: Organizza gli stati di attenzione memorizzati nella cache in blocchi di memoria. Il TensorRT-LLM overview di NVIDIA include la cache con paginazione e il batching in-flight insieme alle ottimizzazioni per l'elaborazione dei prompt.
- Batching dinamico: Combina richieste separate in batch, come spiegato nella NVIDIA Triton dynamic batching guide. Non divide necessariamente un singolo prompt lungo in prefill parziali.
- Prefill e decode disaggregati: Esegue le fasi su worker separati. Il prefill and decode deployment guidance di NVIDIA mostra come le fasi possano invece essere scalate in modo indipendente.
Sebbene il Ultralytics YOLO26 Triton deployment workflow supporti l'inferenza di computer vision scalabile e il batching automatico, il rilevamento di oggetti YOLO standard non prevede una fase di prefill del testo autoregressiva. Il prefill a blocchi si applica principalmente a modelli linguistici generativi e multimodali.
Applicazioni nel mondo reale#
-
Assistenti di documenti: Un assistente basato su retrieval-augmented generation può ricevere un report lungo servendo contemporaneamente utenti con domande brevi. Eseguire il prefill del report a blocchi consente alle chat in corso di continuare la decodifica anziché bloccarsi fino all'elaborazione dell'intero contesto.
-
Analisi video multimodale: Un vision-language model può ricevere caratteristiche di immagini, descrizioni di oggetti e una lunga istruzione testuale. Una pipeline visiva può prima produrre rilevamenti utilizzando Ultralytics YOLO prediction e poi inviare il contesto visivo strutturato al modello generativo. Il prefill a blocchi aiuta a pianificare i token visivi e testuali risultanti insieme ad altre richieste. Il multimodal encode-prefill-decode workflow di NVIDIA illustra il motivo per cui la gestione indipendente di queste fasi può migliorare la scalabilità.
Guida pratica al deployment#
Abilita il prefill a blocchi solo tramite un motore di serving che supporta ufficialmente l'architettura di destinazione. Ad esempio, la TensorRT-LLM backend configuration documenta i controlli del contesto a blocchi per i deployment supportati.
Esegui il benchmark con concorrenza, lunghezze di input e lunghezze di output realistiche anziché affidarti a una singola richiesta. Inizia con il budget di token consigliato dal runtime, quindi modificalo monitorando il tempo al primo token e la latenza tra token. Infine, testa carichi di lavoro misti contenenti prompt sia molto lunghi che molto brevi; è qui che il prefill a blocchi fornisce il suo valore operativo più evidente.






