ChunkAttention: Эффективный механизм самовнимания с префиксно-осведомленным кэшем ключей и значений и двухфазным разделением
ChunkAttention: Efficient Self-Attention with Prefix-Aware KV Cache and Two-Phase Partition
February 23, 2024
Авторы: Lu Ye, Ze Tao, Yong Huang, Yang Li
cs.AI
Аннотация
Само-внимание (self-attention) является ключевым компонентом больших языковых моделей (LLM), но также представляет собой значительный источник задержек при выполнении выводов для длинных последовательностей. В сценариях обслуживания мультитенантных LLM вычислительные затраты и операции с памятью, связанные с само-вниманием, могут быть оптимизированы за счет использования вероятности того, что несколько запросов к LLM имеют общие системные промпты в префиксах. В данной статье мы представляем ChunkAttention — модуль само-внимания, учитывающий префиксы, который способен обнаруживать совпадающие префиксы промптов в нескольких запросах и совместно использовать их тензоры ключей/значений в памяти во время выполнения, что повышает эффективность использования памяти KV-кэша. Это достигается за счет разбиения монолитных тензоров ключей/значений на меньшие фрагменты и организации их во вспомогательное префиксное дерево. В результате, на основе KV-кэша, структурированного в виде префиксного дерева, мы разрабатываем эффективное ядро само-внимания, в котором реализован двухфазный алгоритм разделения для улучшения локальности данных во время вычисления само-внимания при наличии общих системных промптов. Эксперименты показывают, что ChunkAttention ускоряет выполнение ядра само-внимания в 3,2–4,8 раза по сравнению с современными реализациями при длине системного промпта от 1024 до 4096.
English
Self-attention is an essential component of large language models(LLMs) but a
significant source of inference latency for long sequences. In multi-tenant
LLMs serving scenarios, the compute and memory operation cost of self-attention
can be optimized by using the probability that multiple LLM requests have
shared system prompts in prefixes. In this paper, we introduce ChunkAttention,
a prefix-aware self-attention module that can detect matching prompt prefixes
across multiple requests and share their key/value tensors in memory at runtime
to improve the memory utilization of KV cache. This is achieved by breaking
monolithic key/value tensors into smaller chunks and structuring them into the
auxiliary prefix tree. Consequently, on top of the prefix-tree based KV cache,
we design an efficient self-attention kernel, where a two-phase partition
algorithm is implemented to improve the data locality during self-attention
computation in the presence of shared system prompts. Experiments show that
ChunkAttention can speed up the self-attention kernel by 3.2-4.8times
compared to the start-of-the-art implementation, with the length of the system
prompt ranging from 1024 to 4096.