Hugging Face acelerou a inferência de LLM em 22% com batching assíncrono
A Hugging Face desbloqueou a assincronia na inferência de LLM. Em vez de CPU e GPU trabalharem alternadamente, agora operam em paralelo: enquanto a GPU calcula

A Hugging Face encontrou uma maneira simples de acelerar a geração de tokens em LLMs em 22% — simplesmente fazendo a CPU e GPU funcionarem simultaneamente em vez de esperarem uma pela outra. Isso não requer retreinamento de modelos ou novos algoritmos.
Qual Era o Problema
No batching síncrono típico, a CPU prepara dados, depois a GPU os computa, depois a CPU espera pelos resultados e prepara o próximo lote. A GPU fica ociosa cerca de 24% do tempo — enquanto a CPU lida com o pré-processamento. É como uma linha de montagem onde em cada etapa alguém está olhando para o relógio. Mesmo que a CPU esteja funcionando em plena capacidade, é mais lenta do que a computação mais simples da GPU, portanto a placa gráfica simplesmente senta e espera por novos dados. No batching síncrono, um modelo de 8 bilhões de parâmetros com tamanho de lote 32 gerou 8K tokens em 300 segundos com atividade de GPU de apenas 76%.
Como a Assincronicidade Resolve o Problema
A ideia é extremamente simples: executar a CPU e GPU em paralelo através de streams CUDA. Três streams independentes são usados — um para transferir dados para a GPU (H2D), um para as computações reais (Compute) e um para a transferência reversa (D2H). Cada stream retorna o controle à CPU imediatamente sem bloqueá-la. Eventos CUDA são colocados entre os streams — marcadores que garantem a ordem correta:
- Stream H2D marca quando os dados são carregados na GPU
- Stream Compute espera por este marcador, computa, coloca o seu
- Stream D2H espera a conclusão da computação e recupera os resultados
Enquanto a GPU está computando o lote N, a CPU já está preparando o lote N+1 em um buffer de memória diferente. Sem espera, eles funcionam em paralelo.
O Principal Truque de Carry-Over
A complexidade é que quando uma requisição abrange múltiplos lotes, seus tokens de saída do lote N se tornam a entrada para o lote N+1. A Hugging Face resolveu isso com placeholders: ao preparar o lote N+1, zeros são colocados onde os futuros inputs de tokens vão, e quando o lote N é concluído, os zeros são substituídos por valores reais.
"Isso permite que a CPU prepare o próximo lote sem esperar pelos resultados do atual", explica a Hugging Face.
Tudo é mantido com gráficos CUDA com um pool de memória compartilhado, o que até economiza memória de vídeo.
Os Números Falam por Si
Antes da otimização: GPU ativa 76%, gerando 8K tokens — 300,6 segundos. Depois: GPU ativa 99,4%, mesmos tokens — 234,5 segundos. Aceleração de 22% — quase o máximo teórico para esta arquitetura (o máximo teórico era 24%).
O Que Isso Significa
Isso significa que você não precisa de GPUs mais caras ou retreinamento de modelos para melhorias sérias de velocidade. O código já está na biblioteca Transformers, na classe `ContinuousBatchingAsyncIOs`. Para empresas que geram muitos tokens, isso poderia economizar milhões em hardware.