H_2O: Oráculo de Elementos Dominantes para Inferência Gerativa Eficiente em Modelos de Linguagem de Grande Escala
H_2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models
June 24, 2023
Autores: Zhenyu Zhang, Ying Sheng, Tianyi Zhou, Tianlong Chen, Lianmin Zheng, Ruisi Cai, Zhao Song, Yuandong Tian, Christopher Ré, Clark Barrett, Zhangyang Wang, Beidi Chen
cs.AI
Resumo
Os Modelos de Linguagem de Grande Escala (LLMs), apesar de seus recentes e impressionantes feitos, são notavelmente caros para implantar, especialmente para aplicações que envolvem geração de conteúdo extenso, como sistemas de diálogo e escrita de histórias. Frequentemente, uma grande quantidade de informações de estado transitório, conhecida como cache KV, é armazenada na memória da GPU, além dos parâmetros do modelo, escalando linearmente com o comprimento da sequência e o tamanho do lote. Neste artigo, introduzimos uma nova abordagem para implementar o cache KV que reduz significativamente sua pegada de memória. Nossa abordagem é baseada na observação notável de que uma pequena porção de tokens contribui com a maior parte do valor ao calcular os escores de atenção. Chamamos esses tokens de Heavy Hitters (H_2). Por meio de uma investigação abrangente, descobrimos que (i) o surgimento de H_2 é natural e está fortemente correlacionado com a coocorrência frequente de tokens no texto, e (ii) removê-los resulta em uma degradação significativa do desempenho. Com base nessas percepções, propomos o Heavy Hitter Oracle (H_2O), uma política de evicção do cache KV que retém dinamicamente um equilíbrio entre tokens recentes e H_2. Formulamos a evicção do cache KV como um problema submodular dinâmico e provamos (sob suposições leves) uma garantia teórica para nosso novo algoritmo de evicção, que pode ajudar a orientar trabalhos futuros. Validamos a precisão do nosso algoritmo com OPT, LLaMA e GPT-NeoX em uma ampla gama de tarefas. Nossa implementação do H_2O com 20% de heavy hitters melhora a taxa de transferência em até 29 vezes, 29 vezes e 3 vezes em relação a três sistemas de inferência líderes: DeepSpeed Zero-Inference, Hugging Face Accelerate e FlexGen, em OPT-6.7B e OPT-30B. Com o mesmo tamanho de lote, o H2O pode reduzir a latência em até 1,9 vezes. O código está disponível em https://github.com/FMInference/H2O.
English
Large Language Models (LLMs), despite their recent impressive
accomplishments, are notably cost-prohibitive to deploy, particularly for
applications involving long-content generation, such as dialogue systems and
story writing. Often, a large amount of transient state information, referred
to as the KV cache, is stored in GPU memory in addition to model parameters,
scaling linearly with the sequence length and batch size. In this paper, we
introduce a novel approach for implementing the KV cache which significantly
reduces its memory footprint. Our approach is based on the noteworthy
observation that a small portion of tokens contributes most of the value when
computing attention scores. We call these tokens Heavy Hitters (H_2). Through
a comprehensive investigation, we find that (i) the emergence of H_2 is
natural and strongly correlates with the frequent co-occurrence of tokens in
the text, and (ii) removing them results in significant performance
degradation. Based on these insights, we propose Heavy Hitter Oracle (H_2O),
a KV cache eviction policy that dynamically retains a balance of recent and
H_2 tokens. We formulate the KV cache eviction as a dynamic submodular
problem and prove (under mild assumptions) a theoretical guarantee for our
novel eviction algorithm which could help guide future work. We validate the
accuracy of our algorithm with OPT, LLaMA, and GPT-NeoX across a wide range of
tasks. Our implementation of H_2O with 20% heavy hitters improves the
throughput over three leading inference systems DeepSpeed Zero-Inference,
Hugging Face Accelerate, and FlexGen by up to 29times, 29times, and
3times on OPT-6.7B and OPT-30B. With the same batch size, H2O can reduce the
latency by up to 1.9times. The code is available at
https://github.com/FMInference/H2O.