大模型Transformer 推理 :kvCache原理浅析
kvCache 原理
在采样时,Transformer模型会以给定的提示/上下文作为初始输入进行推理(可以并行处理),然后逐一生成额外的标记来继续完善生成的序列(体现了模型的自回归性质)。在采样过程中,Transformer会执行自注意力操作,为此需要给当前序列中的每个元素(无论是提示/上下文还是生成的标记)提取键值(kv)向量。这些向量存储在一个矩阵中,通常被称为kv缓存或者past缓存(开源GPT-2的实现称其为past缓存)。past缓存通常表示为:[batch, 2, num_heads, seq_len, features]
kv缓存是为了避免每次采样标记时重新计算key键向量、value值向量。利用预先计算好的k值和v值,可以节省大量计算时间,尽管这会占用一定的存储空间。每个token所存储的字节数为:
- 第一个2表示k和v这两个向量。在每一层中我们都要存储这些k,v向量,每个值都为一个矩阵。
- 然后再乘以2,以计算每个向量所需的字节数,假设采用16位格式。
所有层的k和v需进行的浮点运算次数为: