大语言模型中的KV缓存:从零理解与实现
KV缓存是一种高效的大语言模型推理技术,通过存储中间键和值向量以便重用,避免冗余计算。本文阐述了这一概念,并提供了基于PyTorch的从零代码实现,展示了如何在文本生成过程中修改多头注意力机制以缓存键和值。
KV缓存存储先前注意力计算中的键(K)和值(V)向量,以便在生成后续token时重用它们,从而通过避免重新计算来加速推理。如果没有KV缓存,每一步生成都需要重新计算所有先前token的键和值;有了缓存,只需计算新token的向量并将其追加到缓存中。文章提供了一个基于作者书中类似GPT模型的代码实现。主要改动包括:在MultiHeadAttention类中添加缓存缓冲区(cache_k和cache_v),修改前向方法以根据条件使用缓存,添加重置方法,并通过模型传播use_cache标志。在生成过程中,当use_cache为True时,模型在初始提示后仅处理新token,而不使用缓存时则每一步都处理完整序列。一个简单的性能比较显示,对于所测试的示例,KV缓存大致使生成速度翻倍。
来源: Sebastian Raschka —
原文
