nlp

KV Cache Optimization

KV Cache Reading Sheet

Posted by Kylin on October 29, 2023

[TOC]

Why KV cache?

refer to https://kylinchen.cn/2023/08/21/KVCache/

需要注意的是,KV cache本身也是一种优化策略,用缓存Key Value(空间)避免重复计算(时间),但是现在发现这个KV cache实在太大了,尤其是在Serving System了里面,轻松达到模型参数占用4倍。

所以优化一般分为两个方向:

  • 储存优化(主要)
  • 计算优化

Attention 机制修改

减少Head

MQA (Multi Query Attention,多查询注意力) 是多头注意力的一种变体。**MQA不同的注意力头共享一个K和V的集合,每个头只单独保留了一份查询参数 **。支持对已经训练好的模型进行微调来添加MQA。

保留了一定数量的KV-cache,使得其在MHA和MQA之间平衡。

image-20231010231326213

Window Attention

image-20231010232527341

LongFormer

arxiv 23.09

refer to https://kylinchen.cn/2023/10/29/StreamingLM/

注意力集中在头尾,所以咱 tokens 保留头尾的就好

image-20231029224004708

arxiv 23.10

同 StreamingLM,本质上就是保留头尾,给出Λ-shaped attention mask

image-20231030220757107

Sparse Attention

image-20231030000753270

arxiv 23.06

通过动态的评价方式来判断需要保留和废弃的KV值

计算-储存优化

SOSP 23

通过 tiling 和 recomputation 等策略减少 HBM 读写,达到:1)加速,2)节约内存

04