speculative decoding é uma técnica de inferência de LLM que acelera a geração de tokens sem alterar a qualidade da saída. Um modelo de rascunho menor e mais rápido propõe antecipadamente vários tokens candidatos, e o modelo alvo, maior, verifica todos em uma única passagem paralela. Ele mantém as previsões válidas e faz uma nova amostragem a partir da primeira divergência para preservar sua distribuição exata de saída.
Modelos de linguagem de grande porte geralmente geram respostas um token por vez. Cada nova etapa de saída exige a leitura dos pesos do modelo na memória, deixando a capacidade de processamento do acelerador subutilizada enquanto ele espera pela largura de banda da memória. O speculative decoding rompe esse gargalo de um token por etapa ao transformar verificações sequenciais em uma verificação paralela.
Por que a decodificação autorregressiva padrão é lenta?
A decodificação autorregressiva padrão é lenta porque a geração de cada token exige uma passagem direta separada por todo o modelo. Assim, o processo é limitado pela largura de banda da memória, e não pela capacidade de processamento.
Quando um modelo de linguagem escreve uma resposta, cada token depende de todos os tokens anteriores. Na decodificação padrão, um modelo com 70 bilhões de parâmetros precisa carregar seus pesos da memória de alta largura de banda para produzir o primeiro token, carregar novamente os mesmos pesos para produzir o segundo e repetir esse ciclo centenas de vezes.
No entanto, muitos tokens de uma resposta são fáceis de prever. Palavras funcionais, colchetes de fechamento no código, expressões comuns e sintaxe padronizada não exigem toda a capacidade de raciocínio de um modelo enorme para serem previstos com precisão, embora ainda se queira que o modelo grande dê o parecer final sobre toda a resposta. Como GPU e TPU podem processar um pequeno bloco de tokens em paralelo em praticamente o mesmo tempo real necessário para processar um único token, a capacidade adicional de processamento fica ociosa durante a decodificação de um token por vez. O speculative decoding aproveita essa capacidade paralela disponível.
Como o speculative decoding funciona passo a passo?
O speculative decoding executa um ciclo de quatro etapas até a resposta ficar completa: propor tokens candidatos, verificá-los em paralelo com o modelo alvo, aceitar os tokens correspondentes e fazer uma nova amostragem na primeira rejeição.
Em vez de pedir ao grande modelo alvo que gere cada token sequencialmente, o mecanismo de inferência combina esse modelo com uma aproximação muito menor e mais rápida, frequentemente chamada de modelo de rascunho. Cada ciclo passa por quatro fases distintas:
- Proposta de tokens candidatos: A partir da sequência atual, o pequeno modelo de rascunho gera rapidamente, um por um, uma curta janela de antecipação de $K$ tokens candidatos e registra sua distribuição de probabilidade para cada posição.
- Verificação paralela: O grande modelo alvo recebe a sequência original e todos os $K$ tokens propostos e executa uma única passagem direta. Como as arquiteturas transformer podem avaliar sequências conhecidas de tokens em paralelo, assim como fazem durante o processamento do prompt, o modelo alvo calcula simultaneamente suas próprias distribuições de probabilidade para cada posição proposta.
- Aceitação ou rejeição dos tokens propostos: Percorrendo os $K$ tokens propostos da esquerda para a direita, o mecanismo compara, em cada etapa, a probabilidade do modelo de rascunho com a do modelo alvo usando uma regra formal de amostragem por rejeição, frequentemente chamada de speculative sampling. Na decodificação gulosa, com temperatura zero, um token proposto é aceito quando corresponde à primeira escolha do modelo alvo. Nos modos de amostragem, tokens aos quais o modelo alvo atribui probabilidade pelo menos igual à do modelo de rascunho são sempre aceitos, enquanto os de probabilidade menor são aceitos proporcionalmente à razão entre as probabilidades do modelo alvo e do modelo de rascunho.
- Nova amostragem e geração de token bônus: Se a primeira divergência ocorrer na posição $m$, esse token e todos os tokens propostos depois dele serão descartados. Um token substituto para a posição $m$ é amostrado diretamente de uma distribuição residual ajustada que considera as probabilidades dos dois modelos. Se todos os $K$ tokens propostos forem aceitos, o modelo alvo já terá obtido, na mesma passagem paralela, a distribuição de probabilidade para a posição $K + 1$, podendo amostrar gratuitamente um token bônus adicional.
Como as regras de rejeição e nova amostragem anulam matematicamente os erros do modelo de rascunho, o speculative decoding é sem perdas. Cada etapa com vários tokens produz amostras extraídas exatamente da mesma distribuição de probabilidade que seria obtida executando apenas o modelo alvo. Isso significa que não há degradação da precisão em benchmarks, da capacidade de raciocínio nem do tom.
Quanto mais rápido é o speculative decoding na prática?
Pesquisas fundamentais mostram que o speculative decoding proporciona acelerações de aproximadamente 2X a 3X no tempo real de execução de modelos de linguagem de grande porte quando combinado com um modelo de rascunho adequado e capacidade suficiente de processamento paralelo.
Os artigos fundamentais que apresentaram a técnica no fim de 2022 e no início de 2023 demonstraram ganhos substanciais de latência tanto em transformers codificador-decodificador quanto naqueles apenas com decodificador, sem alterar os pesos dos modelos nem suas distribuições de saída:
| Estudo | Modelo alvo | Configuração do rascunho | Aceleração em tempo real relatada | Condições e tarefas |
|---|---|---|---|---|
| Leviathan et al. (2023) | T5-XXL (11B parâmetros) | T5-small (77M parâmetros) | 2X–3X (até 2.6X–3.4X nas tabelas de configuração do T5-small) | Implementação do T5X usada sem modificações em tradução (EN-DE) e sumarização (CNN/DM), com argmax (temp 0) e amostragem padrão (temp 1). |
| Chen et al. (2023) | Chinchilla (70B parâmetros) | Modelo de rascunho com 4B parâmetros treinado para speculative sampling | 2X–2.5X | Configuração distribuída em TPU v4 para sumarização (XSum) e geração de código (HumanEval). |
Observe a diferença de tamanho entre os modelos alvo e de rascunho nos dois estudos: T5-small é aproximadamente duas ordens de grandeza menor que T5-XXL, e o modelo de rascunho de 4B é uma pequena fração do modelo Chinchilla de 70B. Um modelo de rascunho precisa ser pequeno o suficiente para que a execução de $K$ etapas sequenciais nele acrescente pouquíssima sobrecarga em comparação com uma única etapa do modelo alvo.
O que determina a taxa de aceitação e por que a aceleração não é garantida?
A aceleração do speculative decoding depende de dois fatores principais: o quanto o modelo de rascunho concorda com o modelo alvo, isto é, a taxa de aceitação, e quanta capacidade de processamento paralelo livre o hardware possui. Por isso, uma aceleração líquida nunca é garantida.
Se o modelo de rascunho errar constantemente, o sistema arcará com o custo de latência de executar $K$ etapas sequenciais nesse modelo apenas para o modelo alvo rejeitar o primeiro token. Nesse pior cenário, um ciclo especulativo produz somente um token amostrado novamente e ainda demora mais que uma etapa padrão do modelo alvo.
Várias condições práticas determinam se o speculative decoding acelera ou desacelera a inferência:
- Alinhamento entre os modelos de rascunho e alvo: O modelo de rascunho precisa compartilhar exatamente o mesmo tokenizador e vocabulário do modelo alvo, e sua distribuição de treinamento deve ser bastante semelhante. Completar código, gerar saída JSON estruturada e traduzir expressões previsíveis tendem a produzir taxas de aceitação maiores que a escrita criativa com temperatura alta, na qual muitos tokens bastante diferentes são igualmente plausíveis.
- Sobrecarga de latência do modelo de rascunho: Mesmo uma taxa de aceitação alta não acelerará a geração se o próprio modelo de rascunho for grande e lento demais. Leviathan et al. demonstraram que um modelo de rascunho T5-small menor superou os candidatos maiores T5-base e T5-large na aceleração total do tempo real, pois a sobrecarga de proposta em cada etapa era muito menor.
- Comprimento da janela de antecipação ($K$): Uma janela curta demais limita a quantidade de tokens que podem ser verificados em uma única passagem. Uma janela longa demais desperdiça tempo criando tokens posteriores que são descartados quando um token anterior é rejeitado.
- Processamento paralelo disponível (saturação pelo tamanho do lote): O speculative decoding troca processamento ocioso por menor latência. Em serviços sensíveis à latência e com lotes pequenos, os aceleradores têm bastante capacidade livre para verificar $K$ tokens em paralelo com custo adicional de tempo quase nulo. Com lotes concorrentes enormes, quando as unidades de processamento da GPU já estão totalmente saturadas, adicionar $K$ posições extras de verificação por solicitação aumenta o tempo da passagem e pode eliminar a aceleração.
Qual é a relação entre speculative decoding, KV cache e cache de prompts?
O speculative decoding acelera apenas a fase de decodificação da geração de saída. Já o uso de KV cache evita recalcular a atenção entre tokens, e o cache de prompts acelera e reduz o custo do prefill de entradas repetidas.
Como essas três otimizações afetam a latência de inferência de transformers, desenvolvedores frequentemente confundem a posição de cada uma no ciclo de vida da solicitação:
- Prefill e decodificação: Cada solicitação a um LLM se divide em duas etapas. O prefill processa todos os tokens do prompt de entrada em paralelo para construir o estado inicial; essa etapa já é limitada pela capacidade de processamento e é rápida por token. A decodificação gera os tokens de saída passo a passo e é limitada pela largura de banda da memória. O speculative decoding ajuda apenas durante a decodificação; ele não acelera a leitura de um prompt de entrada longo.
- Papel do KV cache: Tanto o modelo alvo quanto o modelo de rascunho usam seus próprios KV cache durante o speculative decoding. À medida que os tokens candidatos são propostos e verificados, seus estados Key e Value são acrescentados ao cache. Quando o modelo alvo rejeita tokens propostos após a posição $m$, o mecanismo de inferência simplesmente reverte, isto é, trunca, os KV cache dos dois modelos para descartar as entradas rejeitadas antes de iniciar o próximo ciclo.
- Diferença em relação ao cache de prompts: O cache de prompts reutiliza blocos de KV cache pré-calculados para prefixos idênticos de prompts entre chamadas de API separadas, reduzindo o tempo até o primeiro token (TTFT) e muitas vezes também o preço dos tokens de entrada. O speculative decoding reduz a latência entre tokens (ITL) enquanto a resposta é transmitida.
O que o speculative decoding significa para desenvolvedores de API e quem hospeda os próprios modelos?
Para desenvolvedores de API, o speculative decoding aparece como uma menor latência de transmissão de ponta a ponta, e não como um item separado na fatura. Quem hospeda os próprios modelos o configura diretamente nos mecanismos de inferência para melhorar a capacidade de resposta por solicitação.
A forma de interagir com o speculative decoding depende de você chamar endpoints de modelos hospedados ou gerenciar sua própria frota de GPU:
- A cobrança por token das APIs hospedadas raramente muda: Provedores de IA hospedada geralmente cobram por milhão de tokens de entrada e saída processados do ponto de vista do usuário. Mesmo que um provedor use speculative decoding internamente, os tokens de rascunho rejeitados são internos ao mecanismo de atendimento: você paga pelos tokens de saída finais gerados à tarifa padrão do modelo. Para reduzir a conta direta da API, além do tempo de espera, considere engenharia de prompts, APIs em lote e maneiras práticas de reduzir custos de APIs de IA, ou compare tarifas ao decidir como escolher um modelo de IA.
- Benefícios para a experiência em tempo real: Para quem desenvolve aplicativos, o speculative decoding se destaca na experiência do usuário. Agentes de voz, assistentes de código em IDEs e fluxos interativos de produção, de copilotos de programação ao vivo a pipelines de scripts combinados com ferramentas criativas como AI Studio Video, parecem visivelmente mais ágeis quando os tokens de saída chegam duas vezes mais rápido sem trocar para um modelo menos capaz.
- Configuração em hospedagem própria: Se você executa modelos com pesos abertos na própria infraestrutura, configura o speculative decoding diretamente na sua pilha de atendimento. É preciso carregar tanto o modelo alvo quanto o de rascunho na memória da GPU, ou usar uma variante sem modelo de rascunho, garantir que ambos compartilhem exatamente o mesmo tokenizador e ajustar o comprimento da antecipação ao seu nível típico de concorrência.
É sempre necessário um modelo de rascunho separado?
Variantes posteriores do speculative decoding eliminam a necessidade de treinar e implantar um pequeno modelo de rascunho separado, preservando o mesmo princípio de propor e verificar.
Gerenciar dois modelos separados na memória e encontrar um modelo pequeno com exatamente o mesmo tokenizador e comportamento alinhado ao do modelo alvo pode ser complicado operacionalmente. Para resolver isso, pesquisadores de inferência e frameworks de atendimento introduziram várias abordagens sem modelo de rascunho:
- Proposta por n-gramas e busca no prompt: Em vez de executar uma rede neural para propor tokens, o mecanismo procura trechos de texto correspondentes no prompt de entrada e na saída gerada recentemente e copia os tokens seguintes como candidatos. Isso funciona especialmente bem ao resumir documentos, editar código ou extrair citações que já aparecem na janela de contexto.
- Cabeças de previsão de vários tokens e camadas auxiliares: Em vez de manter um modelo independente completo, um pequeno conjunto de cabeças de previsão leves ou camadas de rascunho pode ser conectado diretamente aos estados ocultos do modelo alvo para propor os próximos tokens em uma única passagem.
- Self-speculative decoding: Algumas configurações usam um subconjunto das próprias camadas do modelo alvo, pulando camadas intermediárias durante a proposta, para gerar tokens candidatos. Em seguida, executam todas as camadas para verificá-los.
Independentemente de como os tokens candidatos são propostos, a garantia central permanece a mesma: o modelo alvo completo verifica os candidatos em paralelo e aplica sua distribuição de probabilidade exata a cada token aceito.
Perguntas frequentes
O speculative decoding altera a precisão do modelo ou a qualidade da saída?
Não. O speculative decoding padrão (speculative sampling) é matematicamente sem perdas. Na decodificação gulosa, ele aceita apenas tokens que correspondem exatamente à principal previsão do modelo alvo. Na amostragem com temperatura, suas regras de rejeição e nova amostragem residual garantem que as sequências geradas sigam exatamente a mesma distribuição de probabilidade da decodificação autorregressiva padrão do modelo alvo.
O speculative decoding reduz o tempo até o primeiro token (TTFT)?
Não. O tempo até o primeiro token mede quanto tempo o modelo leva para ler seu prompt de entrada durante a etapa de prefill e emitir o primeiro token de saída. Como o prefill já processa os tokens do prompt em paralelo, o speculative decoding acelera apenas as etapas posteriores de decodificação, reduzindo a latência entre tokens e o tempo total de conclusão do restante da resposta.
Por que o speculative decoding pode ser mais lento com lotes grandes?
O speculative decoding usa a capacidade de processamento paralelo livre da GPU ou TPU para verificar vários tokens de rascunho aproximadamente no mesmo tempo necessário para verificar um só. Quando um servidor lida com um lote muito grande de solicitações concorrentes, a capacidade de processamento do acelerador já está totalmente utilizada. Assim, verificar tokens de rascunho adicionais por solicitação acrescenta tempo real de execução e pode superar a economia de leituras da memória.
Qualquer modelo pequeno pode servir como modelo de rascunho para qualquer modelo grande?
Não diretamente no speculative decoding padrão em nível de token. O modelo de rascunho e o modelo alvo precisam compartilhar vocabulário e tokenizador compatíveis para que os IDs dos tokens candidatos e suas distribuições de probabilidade correspondam corretamente entre os dois modelos. Por isso, as combinações geralmente vêm da mesma família de modelos, como T5-small criando rascunhos para T5-XXL.
Fontes
- Yaniv Leviathan, Matan Kalman, and Yossi Matias — Fast Inference from Transformers via Speculative Decoding (arXiv:2211.17192, ICML 2023)
- Charlie Chen, Sebastian Borgeaud, Geoffrey Irving, Jean-Baptiste Lespiau, Laurent Sifre, and John Jumper — Accelerating Large Language Model Decoding with Speculative Sampling (arXiv:2302.01318, 2023)



