transformer库中的kv cache分析与调试

这篇文章记录了kv cache到底cache的是啥，以及为啥kv cache能够work。在研究kv cache的时候，有两个问题困扰我很久。 为什么说只有causal模型能够使用kv cache transformer中默认代码里面没有使用causal mask kv cache原理 我们知道，transformer里面一个重要环节是做self attention，而self attention又是通过qkv实现的。这里暂时不讨论qkv的深层含义，简单理解就是输入的token经过三个线性变化之后变为与原始输入维度相同的三个矩阵qkv。再经过下面的attention计算公式，计算出一个与原始输入维度相同的向量，该向量包含的各个token之间的相互关系。 这里我们把这个过程细化一下，来看看为什么可以进行KV cache，除以那个dk和softmax都不是重点，重点是三个矩阵相乘。…