DynamicKV: Task-Aware Adaptive KV Cache Compression for Long Context LLMs
Xiabin Zhou, Wenbin Wang, Minyan Zeng, Jiaxian Guo, Xuebo Liu, Li Shen, Min Zhang, Liang Ding
TL;DR
This work tackles the memory bottleneck of KV cache in long-context LLMs by revealing that token retention across layers is task-dependent. It introduces DynamicKV, a layer-aware KV cache compression method that dynamically allocates per-layer budgets and uses progressive cache updates during the prefilling phase to adapt to the task at hand. Empirical results on LongBench show DynamicKV can preserve near-FullKV performance with a small token budget (as low as 6.9%), while Needle-in-a-Haystack evaluations demonstrate superiority over SOTA methods under extreme compression. The approach integrates with existing inference pipelines and maintains decoding efficiency, offering practical gains in latency and memory usage for long-context applications.
Abstract
Efficient KV cache management in LLMs is crucial for long-context tasks like RAG and summarization. Existing KV cache compression methods enforce a fixed pattern, neglecting task-specific characteristics and reducing the retention of essential information. However, we observe distinct activation patterns across layers in various tasks, highlighting the need for adaptive strategies tailored to each task's unique demands. Based on this insight, we propose DynamicKV, a method that dynamically optimizes token retention by adjusting the number of tokens retained at each layer to adapt to the specific task. DynamicKV establishes global and per-layer maximum KV cache budgets, temporarily retaining the maximum budget for the current layer, and periodically updating the KV cache sizes of all preceding layers during inference. Our method retains only 1.7% of the KV cache size while achieving ~85% of the Full KV cache performance on LongBench. Notably, even under extreme compression (0.9%), DynamicKV surpasses state-of-the-art (SOTA) methods by 11% in the Needle-in-a-Haystack test using Mistral-7B-Instruct-v0.2. The code will be released.
