Hugging Face Blog→ original

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

Hugging Face acelerou a inferência de LLM em 22% com batching assíncrono
Fonte: Hugging Face Blog. Colagem: Hamidun News.
◐ Ouvir artigo

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.

ZK
Hamidun News
Notícias de AI sem ruído. Seleção editorial diária de mais de 400 fontes. Produto de Zhemal Khamidun, Head of AI na Alpina Digital.
O que você acha?
Carregando comentários…