LoCoCo: Dropping In Convolutions for Long Context Compression
<|reference_start|>LoCoCo: Dropping In Convolutions for Long Context Compression: This paper tackles the memory hurdle of processing long context sequences in Large Language Models (LLMs), by presenting a novel approach, Dropping In Convolutions for Long Context Compression (LoCoCo). LoCoCo employs only a fixed-size Key-Value (KV) cache, and can enhance efficiency in both inference and fine-tuning stages. Diverging from prior methods that selectively drop KV pairs based on heuristics, LoCoCo leverages a data-driven adaptive fusion technique, blending previous KV pairs with incoming tokens to minimize the loss of contextual information and ensure accurate attention modeling. This token integration is achieved through injecting one-dimensional convolutional kernels that dynamically calculate mixing weights for each KV cache slot. Designed for broad compatibility with existing LLM frameworks, LoCoCo allows for straightforward "drop-in" integration without needing architectural modifications, while incurring minimal tuning overhead. Experiments demonstrate that LoCoCo maintains consistently outstanding performance across various context lengths and can achieve a high context compression rate during both inference and fine-tuning phases. During inference, we successfully compressed up to 3482 tokens into a 128-size KV cache, while retaining comparable performance to the full sequence - an accuracy improvement of up to 0.2791 compared to baselines at the same cache size. During post-training tuning, we also effectively extended the context length from 4K to 32K using a KV cache of fixed size 512, achieving performance similar to fine-tuning with entire sequences.<|reference_end|>
@article{cai2024lococo:,
    title={LoCoCo: Dropping In Convolutions for Long Context Compression},
    author={Ruisi Cai, Yuandong Tian, Zhangyang Wang, Beidi Chen},
    journal={arXiv preprint arXiv:2406.05317},
    year={2024},
    archivePrefix={arXiv},
    eprint={2406.05317},
    primaryClass={cs.LG cs.CL}
}