Compressão Dinâmica de Cache KV baseada no framework vLLM

Motivação

Revisando artigos acadêmicos recentes do último ano na área de esparsidade KV (H2O, SnapKV, PyramidKV), aplicamos a esparsidade KV a diferentes camadas do modelo. Empregando uma estratégia de poda, eliminamos pares KV com pontuações mais baixas, mantendo aqueles com pontuações mais altas e maior proximidade. Essa abordagem reduz o uso de memória, bem como a sobrecarga computacional e de E/S, resultando em inferência acelerada.

Experimentos

Linhas de base e configurações: Executamos todos os experimentos de KV-Compress usando nossa integração vLLM, bifurcada da v0.6.2, em modo de grafo CUDA com tamanho de bloco 16. Para todos os experimentos com RTX 4090/Llama-3.1-8B-Instruct, usamos utilização padrão de memória GPU de 0,9 e definimos maxmodel-length para 32k. Avaliamos nossa compressão no Llama-3.1-8B-Instruct, comparando o desempenho com os seguintes métodos de linha de base introduzidos em trabalhos anteriores:

  • vLLM-0.6.2
  • Novita AI, compressão de Cache KV Pyramid baseada no framework vLLM

MMLU Pro e LongBench: Controlamos diferentes taxas de compressão do Cache KV definindo diferentes comprimentos de janela deslizante em diferentes camadas. No experimento, definimos principalmente três comprimentos de janela deslizante: 1024, 1280 e 1536, e realizamos testes cruzados em diferentes números de camadas.
No teste MMLU Pro, diferentes camadas de esparsidade KV e diferentes comprimentos de janela deslizante apresentam desempenhos variados. Considerando a taxa de aceleração, a precisão geral pode ser garantida acima de 98%.

vllm-0.6.2 Novita AI
Camadas de esparsidade KV completa janela deslizante=1536
22 0.4517 0.4496
26 0.4517 0.4476
31 0.4517 0.4476

No teste LongBench, selecionamos uma janela deslizante de 1024 para teste de desempenho e constatamos que a perda de precisão foi de cerca de 1,03%.

vllm base VS Novita AI

Benchmarks de throughput: Em aplicações reais de LLM, uma configuração de comprimento de entrada/saída de 5000/500 é a mais comum, e o índice TTFT deve ser inferior a 2s. Com base nessas condições, realizamos testes comparativos de desempenho em lote, que resultaram em uma aceleração de inferência de 1,5x para vLLM.

Throughput vllm-0.6.2 Novita AI
Camadas de esparsidade KV completa janela deslizante=1536
22 1 1.26
26 1 1.34
31 1 1.44

Principais alterações

Os arquivos modificados incluem principalmente:

  • Flash attention, pontuação esparsa baseada em Flash attention, garantindo que a perda de desempenho do kernel seja inferior a 1%.
  • Paged attention e reshape_and_cache, pontuação esparsa baseada em Paged attention e sincronização da pontuação esparsa nas fases de preenchimento e decodificação.
  • Block_manager e outras funções relacionadas ao gerenciamento de memória e preparação de tensores.

Conclusão

A Novita AI também suporta paralelismo de tensores para permitir que modelos como Llama3-70B sejam executados em múltiplas GPUs. Atualmente, não suporta código aberto por algumas razões, mas esperamos contribuir com tecnologia e ideias para a comunidade e recebemos com satisfação intercâmbios técnicos com todos. Apenas um aviso: Os seguintes recursos ainda não são suportados no vLLM-0.6.2:

  • Chunked-prefill
  • Prefix caching
  • FlashInfer e outros backends que não sejam FlashAttention
  • Decodificação especulativa

Novita AI é uma plataforma de nuvem de IA que oferece aos desenvolvedores uma maneira fácil de implantar modelos de IA usando nossa API simples, além de fornecer uma GPU em nuvem acessível e confiável para construção e escalonamento.

Leitura recomendada

  1. Como a esparsidade KV alcança aceleração de 1,5x para vLLM
  2. Desbloqueie o chat zero-shot do Llama 3–8b: dicas e técnicas de especialistas
  3. Utilize o Clipboard Conqueror com a chave de API da Novita AI para produtividade do desenvolvedor