推理阶段解码空间换时间

缓存前面的KV,只计算当前解码的token的注意力

KV Cache占用的内存会随着长度的增加而线性增长,并且也会带来访存效率上的压力

优化方案

  1. 共享KV:包括MQA、GQA、MLA的方法,多个query共享一对KV
  2. 窗口KV:丢弃以前的KV,但是会损失长context(Longformer)
  3. 量化压缩KV
  4. 计算优化(flash attention)

MQA:Multi Query Attention

多头共享相同的K和V,降低KV Cache占用的内存,并且计算量更小

另外保持与传统多头注意力相似的性能

GQA:Group Query Attention

MQA直接只用一对KV,精度损失,可以分组,每组一对KV

当分组=头数,相当于MHA

当分组=1,相当于MQA

MLA:Multi Head Latent Attention

减小推理时的KV Cache

下采样一个 $c_t^{KV}$(多个head共享同一个潜在空间),经过上采样分别得到KV(上采样到不同的head),所以缓存的时候只需要缓存这个潜在空间向量 $c_t^{KV}$