Chunked Prefill
Aprende como o prefill em blocos melhora a latência e o débito da inferência de LLMs ao dividir prompts longos em blocos de tokens, permitindo um serving mais estável sob cargas de trabalho simultâneas.
O prefill em blocos é uma técnica de agendamento de inferência que divide um prompt de entrada longo em grupos menores de tokens, em vez de processar todo o prompt numa única operação ininterrupta. Um motor de inferência pode intercalar estes blocos com a geração de tokens para outros pedidos, impedindo que um prompt longo monopolize a GPU. O resultado é, normalmente, uma latência mais estável sob cargas de trabalho concorrentes, uma melhor utilização do hardware e um serviço mais previsível para aplicações interativas de modelos de linguagem de grande dimensão.
Como funciona o prefill em blocos#
A inferência autoregressiva de Transformer tem duas fases principais:
- Prefill: O modelo processa todos os tokens de entrada, calcula os respetivos estados de atenção e preenche a cache KV. O prefill avalia muitos tokens em paralelo e é normalmente limitado pela capacidade de computação.
- Decode: O modelo gera a saída um token de cada vez, enquanto lê os estados previamente armazenados em cache. O decode é frequentemente limitado pela largura de banda da memória, e não pela capacidade de computação bruta.
Sem divisão em blocos, um pedido de 20 000 tokens pode ocupar um passo de inferência durante muito mais tempo do que um pedido curto. As gerações ativas podem então sofrer pausas, aumentando a latência entre tokens, mesmo quando os seus próprios prompts são pequenos.
Com o prefill em blocos, o agendador atribui a cada iteração um orçamento de tokens. Primeiro agenda as operações de decode ativas e, em seguida, utiliza o orçamento restante para um ou mais blocos do prompt. Se um prompt não couber, os tokens restantes aguardam por uma iteração posterior. As atuais orientações de otimização do vLLM descrevem esta abordagem como uma forma de combinar o trabalho de prefill, intensivo em computação, com o decode, intensivo em memória.
A divisão em blocos altera o momento em que os tokens do prompt são processados, mas não a sua ordem nem o seu significado. Cada bloco concluído expande o estado de atenção armazenado em cache do pedido até que todo o prompt esteja pronto e o decode possa começar.
Porque é importante o prefill em blocos#
O prefill em blocos aborda objetivos de desempenho concorrentes na disponibilização de modelos em produção:
- Latência entre tokens: Dar prioridade aos pedidos de decode existentes ajuda a manter as respostas transmitidas sem pausas longas.
- Tempo até ao primeiro token: Blocos grandes concluem mais rapidamente um novo prompt, enquanto blocos muito pequenos podem atrasar o seu primeiro token gerado.
- Débito: Combinar trabalho de prefill e decode pode utilizar mais eficazmente a capacidade de computação da GPU e a largura de banda da memória.
- Equidade: É menos provável que prompts longos bloqueiem muitos pedidos curtos e interativos.
A definição do bloco ou do orçamento de tokens é, por isso, um compromisso. A configuração do agendador do vLLM disponibiliza controlos para limites de tokens em lotes, prefills parciais e limiares para prompts longos. Orçamentos menores favorecem geralmente um decode responsivo, enquanto orçamentos maiores favorecem uma ingestão mais rápida dos prompts.
A divisão em blocos não elimina todos os estrangulamentos. Contextos longos continuam a consumir memória de cache, e uma admissão demasiado agressiva pode causar pressão sobre a cache, preempção de pedidos ou trabalho repetido. Os operadores devem medir a latência de inferência mediana e de cauda, o tempo até ao primeiro token, a latência entre tokens, o débito e a utilização de memória da GPU sob distribuições de prompts realistas.
Conceitos de inferência relacionados#
O prefill em blocos está estreitamente ligado a várias otimizações, mas tem uma finalidade distinta:
- Batching contínuo: Adiciona e remove pedidos dinamicamente durante a geração. O prefill em blocos complementa-o ao tornar o processamento de prompts longos agendável em limites ao nível dos tokens.
- Caching de prompts: Reutiliza estados previamente calculados para um prefixo de prompt repetido. O prefill em blocos agenda novos cálculos; não ignora esses cálculos.
- Gestão paginada da cache KV: Organiza os estados de atenção armazenados em blocos de memória. A visão geral do TensorRT-LLM da NVIDIA inclui o caching paginado e o batching em voo, juntamente com otimizações do processamento de prompts.
- Batching dinâmico: Combina pedidos separados em lotes, conforme explicado no guia de batching dinâmico do NVIDIA Triton. Não divide necessariamente um prompt longo individual em prefills parciais.
- Prefill e decode desagregados: Executa as fases em workers separados. As orientações de implementação de prefill e decode da NVIDIA mostram como as fases podem, em alternativa, ser escaladas de forma independente.
Embora o fluxo de trabalho de implementação do Ultralytics YOLO26 no Triton suporte inferência de visão computacional escalável e batching automático, a deteção de objetos YOLO padrão não tem uma fase autoregressiva de prefill de texto. O prefill em blocos aplica-se principalmente a modelos generativos de linguagem e multimodais.
Aplicações no mundo real#
-
Assistentes de documentos: Um assistente com geração aumentada por recuperação pode receber um relatório longo enquanto presta simultaneamente serviço a utilizadores com perguntas curtas. Dividir em blocos o prefill do relatório permite que as conversas em curso continuem o decode, em vez de congelarem até que todo o contexto seja processado.
-
Análise de vídeo multimodal: Um modelo de visão e linguagem pode receber características de imagem, descrições de objetos e uma instrução de texto longa. Um pipeline de visão pode primeiro produzir deteções utilizando a predição do Ultralytics YOLO e, em seguida, enviar contexto visual estruturado para o modelo generativo. O prefill em blocos ajuda a agendar os tokens visuais e textuais resultantes juntamente com outros pedidos. O fluxo de trabalho multimodal de codificação-prefill-decode da NVIDIA ilustra por que motivo a gestão independente destas fases pode melhorar a escalabilidade.
Orientações práticas de implementação#
Ativa o prefill em blocos apenas através de um motor de disponibilização que suporte oficialmente a arquitetura pretendida. Por exemplo, a configuração do backend TensorRT-LLM documenta controlos de contexto em blocos para implementações compatíveis.
Faz benchmarks com concorrência, comprimentos de entrada e comprimentos de saída realistas, em vez de depender de um único pedido. Começa com o orçamento de tokens recomendado pelo runtime e ajusta-o enquanto acompanhas o tempo até ao primeiro token e a latência entre tokens. Por fim, testa cargas de trabalho mistas que contenham prompts muito longos e muito curtos; é neste cenário que o prefill em blocos proporciona o seu valor operacional mais evidente.









