KVCache 的数据分布特点[1]

在 KVQuant 论文中,作者发现,在**处理长序列和较大的批量时,激活内存成为了主要的性能瓶颈,特别是在模型权重已经量化到较低精度的情况下。**对于LLaMA-7B模型,当序列长度达到128K时,KV缓存成为了主要的瓶颈。此外,如果模型权重已经被量化,即使在 32K 的序列长度下,KV 缓存也是主要的瓶颈。 【长序列 → KV缓存成为主要的瓶颈】

而在 QAQ 和 KIVI 中,作者也都发现 Key cache 和 Value cache 之间存在很大的区别,Key cache 量化难度远高于 value 。 KVQuant 采用的方法是在 Key 前面的 rope 前就完成量化,实际使用时则反量化之后再做一次 rope ;QAQ 是采用了混合 bit 数和全精度保留 outlier 的量化策略,KIVI 则是用两种不同的量化分组粒度策略完成不同的量化过程。

支持的框架

vLLM

from vllm import LLM, SamplingParams

# Create an LLM.
llm = LLM(model="facebook/opt-125m", kv_cache_dtype="fp8")

Hugging Face

lmdeploy [10]

online int8/int4 KV cache quantization