IA

    Chunked Prefill e Desacoplamento Prefill-Decode (PD): A Fronteira da Inferência de LLMs

    Como a segmentação de prefill e o desacoplamento físico de nós eliminam o Head-of-Line Blocking, estabilizam o TTFT e multiplicam o goodput em clusters de IA.

    2026-08-2512 minEquipe MaxVision
    CLIP_001 · DJI O4FPV · 4K · 60FPS
    IA · 2026.08.25 · NOVIDADE-REAL

    A inferência de LLMs opera sob duas dinâmicas físicas opostas. O processamento do prompt (prefill) satura os Tensor Cores. A geração autorregressiva token a token (decode) satura a memória HBM.

    Quando ambas as fases compartilham a mesma GPU, prompts longos bloqueiam decodes ativos. Essa contenção gera picos severos no Time-to-First-Token (TTFT). Ocorre também forte instabilidade na Inter-Token Latency (ITL).

    Duas inovações resolvem esse impasse: o Chunked Prefill no agendador e o desacoplamento físico Prefill-Decode Disaggregation (PD).

    Servidores blade de inferência de IA em rack industrial com cabos ópticos de alta velocidade e presilha de retenção carmim no chassi

    A assimetria física entre prefill e decode

    A fase de prefill é limitada por computação (compute-bound). A fase de decode é limitada por largura de banda de memória (memory-bandwidth-bound). Essa assimetria dita como a GPU consome tempo em cada etapa.

    No prefill, o modelo recebe todos os tokens de entrada juntos. Ele executa multiplicações de matrizes densas (GEMM). A intensidade aritmética supera facilmente 300 FLOPs por byte lido da memória.

    No decode, o modelo gera um token por passo. Ele realiza operações matriz-vetor (GEMV). Para cada token, a GPU precisa transferir todos os pesos e o histórico de KV Cache da HBM.

    A intensidade aritmética no decode cai para a faixa de 15 a 30 FLOPs por byte. Os Tensor Cores passam de 85% a 95% do tempo ociosos, aguardando dados da memória.

    O modelo Roofline formaliza o ponto de equilíbrio de hardware (ridge point). Ele define a intensidade necessária para saturar a computação da GPU:

    I_ridge = Capacidade_Computacional (FLOP/s) ÷ Largura_de_Banda_HBM (Bytes/s)

    Na arquitetura NVIDIA H100 SXM5 em precisão FP16:

    I_ridge = (989.5 × 10^12 FLOP/s) ÷ (3.35 × 10^12 Byte/s) ≈ 295.4 FLOPs/byte

    Na arquitetura NVIDIA H200 SXM com memória HBM3e de 4.8 TB/s:

    I_ridge = (989.5 × 10^12 FLOP/s) ÷ (4.80 × 10^12 Byte/s) ≈ 206.1 FLOPs/byte

    O prefill opera acima desse limiar. O decode opera muito abaixo. Otimizar ambos com a mesma configuração na mesma GPU gera desperdício de silício.

    Métrica de ExecuçãoFase de PrefillFase de Decode
    Regime de GargaloCompute-Bound (Tensor Cores)Memory-Bandwidth-Bound (HBM)
    Operação Algébrica PrincipalMatriz-Matriz Densa (GEMM)Matriz-Vetor (GEMV)
    Intensidade Aritmética> 300 FLOPs/byte15 a 30 FLOPs/byte
    Utilização de Tensor Cores80% a 95% (saturação)5% a 15% (ociosidade)
    Métrica Crítica de SLATime-to-First-Token (TTFT)Inter-Token Latency (ITL)

    O problema do Head-of-Line Blocking no Continuous Batching

    O agendamento por lotes contínuos (Continuous Batching) sofre de bloqueio de início de fila (Head-of-Line Blocking). A chegada de um prompt extenso suspende todas as requisições ativas de decode no cluster.

    Ao receber um prompt de 8.000 tokens, a GPU monopoliza seus núcleos para processar o bloco. A operação dura centenas de milissegundos.

    Durante essa janela, usuários conectados sofrem travamentos no fluxo de texto (stream jitter). A latência entre tokens consecutivos (ITL) salta de 25 ms para mais de 500 ms no percentil P99.

    Ao mesmo tempo, novas requisições acumulam tempo de fila. Isso degrada o Time-to-First-Token (TTFT) e viola os acordos de nível de serviço (SLOs).

    Continuous Batching Tradicional (HoL Blocking):
    Iteração N:   [Decode req 1] [Decode req 2] [Decode req 3] -> 30 ms
    Iteração N+1: [--- PREFILL MONOLÍTICO DE 8K TOKENS (Req 4) ---] -> 450 ms (Decode congelado)
    Iteração N+2: [Decode req 1] [Decode req 2] [Decode req 3] [Decode req 4] -> 32 ms
    

    Esse comportamento em dente de serra compromete a estabilidade de agentes e assistentes conversacionais em tempo real.

    Close-up em substrato semicondutor de silício com módulos de processamento e feixe de alinhamento carmim demarcando a fronteira de agendamento

    Chunked Prefill e Piggybacking no agendador de iteração

    O Chunked Prefill divide prompts longos em blocos uniformes de tamanho fixo. O agendador intercala essas fatias com os passos de decode a cada iteração.

    A técnica foi demonstrada no paper Sarathi-Serve (arXiv:2403.02310). Em vez de processar 4.096 tokens em um bloco único, o sistema cria fatias discretas de 1.024 tokens.

    A cada iteração, o agendador combina um chunk de prefill com todos os decodes pendentes. Esse processo recebe o nome técnico de Piggybacking.

    O chunk de prefill consome ciclos ociosos dos Tensor Cores enquanto a GPU transfere tensores do decode na HBM. O tempo total por iteração permanece estável entre 35 e 45 ms.

    Agendamento com Chunked Prefill (Sarathi-Serve / vLLM):
    Iteração N:   [Chunk 1 (1024 tok) Req 4] + [Decode 1, 2, 3] -> 40 ms
    Iteração N+1: [Chunk 2 (1024 tok) Req 4] + [Decode 1, 2, 3] -> 40 ms
    Iteração N+2: [Chunk 3 (1024 tok) Req 4] + [Decode 1, 2, 3] -> 40 ms
    Iteração N+3: [Chunk 4 (1024 tok) Req 4] + [Decode 1, 2, 3] -> 40 ms (Prefill concluído)
    Iteração N+4: [Decode req 1] [Decode req 2] [Decode req 3] [Decode req 4] -> 32 ms
    

    O número de iterações necessárias para processar o prompt depende do tamanho da fatia:

    N_iter = ⌈ L_prompt ÷ C_chunk ⌉

    Um prompt de 3.200 tokens com C_chunk = 1.024 é concluído em exatamente 4 iterações. Os fluxos paralelos continuam gerando texto sem pausas perceptíveis.

    O vLLM e o SGLang adotam Chunked Prefill nativo em seus agendadores de produção.

    Limites do Chunked Prefill e a necessidade de desacoplamento físico

    O Chunked Prefill estabiliza o ITL, mas introduz sobrecarga computacional na atenção parcial acumulada. Esse overhead ocorre pela necessidade de consultar estados calculados em blocos anteriores.

    No processamento do segundo chunk, a projeção de Query calcula atenção contra o primeiro chunk. No quarto bloco, a atenção abrange todas as três fatias precedentes.

    O volume de operações de atenção cresce com o número de blocos encadeados. Para prompts acima de 32.000 tokens, o tempo total de prefill pode subir de 15% a 35% frente ao prefill monolítico.

    Além disso, a GPU permanece presa a uma configuração única de paralelismo de tensores (Tensor Parallelism - TP).

    O prefill se beneficia de TP = 4 ou TP = 8 para acelerar operações densas. O decode sofre com alto TP pela latência do All-Reduce em matrizes pequenas.

    Para eliminar esse conflito de forma definitiva, os motores modernos adotam a separação física de nós (PD Disaggregation).

    Dois clusters de servidores especializados conectados por canaleta industrial de cabeamento de fibra óptica com acento carmim

    Arquitetura de Prefill-Decode Disaggregation (PD)

    A desagregação Prefill-Decode divide a infraestrutura em dois grupos de servidores independentes conectados por rede rápida. Os nós de prefill cuidam da ingestão de contexto. Os nós de decode cuidam da geração token a token.

    Essa arquitetura foi formalizada no DistServe (OSDI 2024) e no Splitwise (ISCA 2024).

    Cada grupo recebe hardware e paralelismo otimizados para seu respectivo regime:

    • Nós de Prefill (P-Nodes): Focados em FLOPS brutos e precisão FP8/FP4. Utilizam alto paralelismo (TP = 4 ou TP = 8) para liquidar prompts em alta velocidade.
    • Nós de Decode (D-Nodes): Focados em capacidade e largura de banda de memória HBM. Utilizam baixo paralelismo (TP = 1 ou TP = 2) e paralelismo de pipeline (PP).

    Ao concluir o prompt, o P-Node gera o primeiro token. Em seguida, ele transfere o tensor de KV Cache para o D-Node designado.

    O D-Node assume a requisição a partir do segundo token. Ele executa a transmissão da resposta até o fim do texto.

    Cluster Desacoplado (PD Disaggregation):
    Cliente -> [Load Balancer / Global Scheduler]
                    |
                    +---> [Pool de P-Nodes (Compute: TP=8, FP8)]
                                | (Gera 1º token + KV Cache)
                                | === Transferência RDMA 400G ===> [Pool de D-Nodes (HBM: TP=1)]
                                                                        | (Gera tokens 2..N)
                                                                        +---> Stream para Cliente
    

    Transferência de KV Cache via RDMA e Pipelining Assíncrono

    A viabilidade da desagregação PD depende de transferir o KV Cache entre servidores sem adicionar latência perceptível. Essa comunicação utiliza redes RDMA de 400 Gbps (InfiniBand NDR ou RoCEv2) com GPUDirect RDMA.

    O tamanho do KV Cache para uma requisição de S_tokens é determinado pela estrutura do modelo:

    S_KV (bytes) = 2 × L × n_kv × d_k × b_elem × S_tokens

    No modelo Llama-3-70B (L = 80, n_kv = 8, d_k = 128, precisão FP16 com b_elem = 2):

    S_token = 2 × 80 × 8 × 128 × 2 = 327.680 bytes/token = 320 KB/token

    Para um prompt de 4.096 tokens, o volume transferido atinge 1,28 GB:

    S_total = 4.096 × 320 KB = 1.310.720 KB = 1.28 GB

    Em uma interface InfiniBand NDR 400 Gbps com vazão efetiva de 50 GB/s, o tempo bruto de transferência é:

    T_transfer = 1.28 GB ÷ 50 GB/s = 0.0256 s = 25.6 ms

    Para anular esse tempo de espera, motores como Mooncake (arXiv:2407.00079) e SGLang utilizam pipelining assíncrono.

    Quando uma camada do modelo conclui o cálculo no P-Node, ela despacha seu KV Cache via RDMA. Essa transmissão ocorre em paralelo com a computação da camada seguinte.

    Ao terminar a última camada, mais de 90% do KV Cache já reside na memória do D-Node. O atraso residual aparente cai para menos de 3 milissegundos.

    Ganhos de Goodput e Benchmarks de Produção

    A desagregação PD multiplica a eficiência do cluster sob restrições rígidas de latência. A métrica de referência é o Goodput, que contabiliza apenas requisições entregues dentro dos prazos de TTFT e ITL.

    Medições do framework DistServe (OSDI 2024) comprovam ganhos substanciais em escala:

    • Goodput Total: Aumento de 2.0x a 4.4x na capacidade de requisições por segundo atendidas dentro dos SLOs.
    • Latência P99 de TTFT: Redução de até 10x no tempo de emissão do primeiro token.
    • Latência P99 de ITL: Redução de até 5x na oscilação de geração token a token.
    • Custo Operacional: Economia de até 45% na despesa de infraestrutura por milhão de tokens gerados.
    Abordagem de InferênciaTTFT P99 (Prompt 4k)ITL P99 (Jitter)Goodput RelativoComplexidade de Rede
    Continuous Batching Clássico2.100 ms280 ms1.0x (Base)Baixa (Local)
    Chunked Prefill Co-alocado650 ms48 ms2.1xBaixa (Local)
    PD Disaggregation (RDMA 400G)180 ms22 ms4.2xMédia/Alta (Cluster)

    Como planejar a transição no seu cluster de inferência

    A escolha entre Chunked Prefill local e Desagregação PD depende do volume de requisições e da infraestrutura disponível.

    Para clusters com até 8 GPUs em nó único, o Chunked Prefill é a solução imediata ideal. Utilize chunk_size = 512 para decodes rápidos ou chunk_size = 1024 para equilibrar vazão total.

    Para parques com mais de 16 GPUs sob alta concorrência, a PD Disaggregation é a escolha recomendada. A topologia requer rede RoCEv2 ou InfiniBand, além de agendadores integrados ao vLLM ou SGLang.

    A infraestrutura de IA avança para a especialização de hardware por fase de inferência. Essa arquitetura transforma clusters heterogêneos em plataformas previsíveis, eficientes e de alta capacidade.


    Perguntas Frequentes sobre Chunked Prefill e PD Disaggregation

    O que é o problema de Head-of-Line Blocking na inferência de LLMs?

    É o congelamento que ocorre quando um prompt extenso monopoliza os núcleos da GPU, pausando a geração de todas as outras requisições ativas no mesmo lote.

    Qual é a diferença fundamental entre Chunked Prefill e PD Disaggregation?

    O Chunked Prefill fatia o prompt na mesma GPU via software. A PD Disaggregation separa GPUs em nós dedicados de prefill e nós dedicados de decode interconectados por RDMA.

    Como a transferência de KV Cache não adiciona latência na desagregação PD?

    Motores modernos utilizam redes RDMA de 400 Gbps com pipelining assíncrono. O cache de cada camada é transmitido enquanto a camada seguinte ainda é calculada no nó de prefill.

    Quando vale a pena migrar de Chunked Prefill para um cluster com PD Disaggregation?

    A migração é vantajosa para frotas com mais de 16 GPUs que atendem alto volume com contextos longos (acima de 16k tokens) e exigem garantias rígidas de TTFT e ITL.

    TAGS
    • IA
    • LLM
    • Inferência
    • vLLM
    • SGLang
    • Arquitetura de Software
    • Sistemas Distribuídos
    Mascote da MaxVision para contato rápido no WhatsAppFale agora pelo WhatsApp