O que é Flash-Decoding e quando acelera os LLMs?
Tradução automática
Este artigo foi traduzido automaticamente a partir da versão original em inglês.
Flash-Decoding paraleliza a atenção durante a descodificação ao longo da sequência de chaves e valores em cache. Diferentes blocos da GPU processam diferentes partes de um histórico longo e depois combinam os resultados parciais da atenção com uma normalização numericamente correta. Pode ajudar a geração com lotes pequenos quando uma cache longa fornece mais trabalho do que o escalonamento atual da atenção consegue executar de forma eficiente.
Acelera uma operação de atenção. A aceleração resultante no serving também depende do tempo gasto nas restantes partes do modelo.
Por que a descodificação precisa de outro escalonamento
Durante o prefill, muitas posições de consulta podem ser processadas em paralelo. Durante a descodificação habitual, cada sequência ativa fornece uma nova posição de consulta. Um lote pequeno pode, por isso, disponibilizar poucos blocos independentes para utilizar a GPU de forma eficaz, embora cada consulta tenha de ler um histórico longo.
Flash-Decoding cria unidades de trabalho adicionais ao dividir esse histórico. Cada unidade calcula um resultado parcial e um valor de normalização log-sum-exp. Uma redução combina-os no resultado que a atenção sobre o histórico completo exige. Consulte a explicação de Flash-Decoding dos autores de Stanford.
Com um histórico curto, o trabalho adicional dos resultados parciais e da redução pode superar o benefício. Um lote maior pode já fornecer trabalho paralelo suficiente. Nenhum dos casos garante um ganho com uma divisão adicional da sequência.
Como interpretar o resultado publicado
Os autores reportaram uma aceleração de até oito vezes de ponta a ponta na sua avaliação de CodeLlama-34B com um lote de tamanho um em quatro GPUs A100, para comprimentos de sequência de 512 a 64K. Essa comparação usou a referência e a configuração de execução que escolheram. Não prevê uma melhoria de oito vezes face a um servidor atual com um backend de descodificação já otimizado.
Ao testar o seu servidor:
- verifique se o backend de atenção selecionado utiliza realmente o método;
- compare o mesmo modelo, disposição das GPUs, precisão da cache e comprimentos de sequência;
- teste tanto lotes de tamanho um como um nível realista de pedidos simultâneos;
- registe o tempo do kernel de atenção separadamente do passo completo de descodificação;
- meça a latência dos tokens de saída e a correção numérica.
Um kernel de atenção mais rápido pode deixar a leitura dos pesos, o cálculo da rede feed-forward ou a comunicação como o maior custo restante. Dê preferência ao resultado de ponta a ponta ao decidir se deve alterar a configuração de serving.
Guia de engenharia: Flash-Decoding relaciona a divisão da sequência com a distinção entre prefill e descodificação.