当前位置: 首页 > news >正文

kv cache缓存

计算自注意力时,Q(查询)向量在每次解码步骤中都是全新的,而 K(键)和 V(值)向量大部分是重复的,缓存 K 和 V 可以避免大量的重复计算。

下面通过一个具体的例子来详细解释为什么。

自注意力机制

在解码(生成)过程中,对于每一个新生成的 token,都有:

  • Q (Query):来自当前新生成的 token。它负责去“询问”历史上下文中哪些部分是重要的。

  • K (Key):来自所有已生成的 token(包括当前新的这个)。它作为“标识”,被 Q 查询。

  • V (Value):来自所有已生成的 token(包括当前新的这个)。它包含每个 token 的实际信息内容。

注意力分数的计算方式是:Softmax( (Q * K^T) / sqrt(d_k) ) * V

具体例子

假设我们正在生成句子 “I love you”。

第 1 步:生成 “I”

  • 输入:[BEGIN] (假设起始符)

  • 输出:"I"

  • 此时,我们计算出了 Q1, K1, V1(对应 token “I”)。

  • KV Cache 状态:缓存 K1, V1

第 2 步:生成 “love”

  • 输入:[BEGIN], I

  • 输出:"love"

  • 在这个步骤中:

    • 我们只需要为新 token “love” 计算 Q2_new

    • K 和 V 从哪里来?

      • 一部分来自新 token “love” 自己计算出的 K2_new, V2_new

      • 另一部分来自 KV Cache 中读取的上一步的 K1, V1

  • 所以,计算注意力时,完整的 K 和 V 是:

    • K = [K1, K2_new] (拼接操作)

    • V = [V1, V2_new]

  • Q 是什么? 只有 Q2_new

  • 计算:Attention = Softmax( (Q2_new * K^T) / sqrt(d_k) ) * V

  • 更新 KV Cache:将新的 K2_new, V2_new 拼接到缓存中,现在缓存里有 [K1, K2_new] 和 [V1, V2_new]

第 3 步:生成 “you”

  • 输入:[BEGIN], I, love

  • 输出:"you"

  • 在这个步骤中:

    • 我们只需要为新 token “you” 计算 Q3_new

    • K 和 V 从哪里来?

      • 一部分来自新 token “you” 自己计算出的 K3_new, V3_new

      • 绝大部分来自 KV Cache 中读取的上一步的 [K1, K2_new], [V1, V2_new]

  • 所以,计算注意力时,完整的 K 和 V 是:

    • K = [K1, K2_new, K3_new]

    • V = [V1, V2_new, V3_new]

  • Q 是什么? 只有 Q3_new

  • 计算:Attention = Softmax( (Q3_new * K^T) / sqrt(d_k) ) * V

  • 更新 KV Cache:将新的 K3_new, V3_new 拼接到缓存中。

Q 不进行缓存

从上面的过程可以清晰地看出:

  1. Q 的生命周期很短:每个解码步骤中,当前的 Q 向量只在这个步骤中被使用一次,用于和所有已缓存的 K 向量计算注意力分数。一旦这个步骤结束,这个 Q 向量就完成了它的使命,在后续的步骤中再也用不到了。

  2. K 和 V 是累积的:历史所有步骤的 K 和 V 向量在后续的每一个解码步骤中都会被重复使用。如果不缓存,我们在生成第 N 个 token 时,就需要为前 N-1 个 token 重新计算它们的 K 和 V,这造成了巨大的计算浪费。

向量是否缓存原因
K (Key) 历史所有 token 的 K 向量在后续每一步都会被新的 Q 查询。不缓存会导致大量重复计算。
V (Value) 历史所有 token 的 V 向量在后续每一步的注意力加权求和中都会被使用。
Q (Query) 每个 token 的 Q 向量仅在当前解码步骤中使用一次,之后便失效。缓存它只会浪费显存,毫无益处。
http://www.hskmm.com/?act=detail&tid=31514

相关文章:

  • 为什么笔记本电脑突然变得很卡?固态硬盘突然变慢是什么原因?
  • 用 Uni-app 开发 C3 继续教育题库系统:静态资源导入、响应式交互与考试逻辑实现全解析
  • 2025年上海律师服务最新权威推荐榜:经侦律师,民事/刑事律师,经济/婚姻律师,法务律师,负债律师事务所专业解析
  • 2025 年永磁电机厂家推荐台州市台成机电,单相永磁电机,三相永磁电机,变频永磁电机,稀土永磁电机,直流永磁电机,无刷永磁电机,风机永磁电机,节能永磁电机,高效永磁电机公司推荐
  • 2025年实验室净化/手术室净化/洁净室工程厂家最新权威推荐榜:专业建设与无尘车间装修一站式解决方案
  • 深入理解 `itertools`:分类解析常用函数 (Effective Python 第36条) - 教程
  • linux配置环境变量
  • assert的基本用法
  • 1688代发铺货规格匹配设置
  • 2025年整平机厂家最新推荐排行榜,精密整平机,数控整平机,自动整平机,板材整平机源头厂家专业选购指南
  • task2
  • KiloCode 与 Claude Code 在长上下文文件写入操作中的稳定性差异深度解析
  • 2025年机械加工厂家最新权威推荐榜:钣金/焊接/零件/非标自动化/精密金属加工,专业定制与技术创新实力解析
  • 2025年10月15号随笔
  • Ubuntu20.04安装NVIDIA显卡驱动、CUDA Toolkit、cuDNN步骤(二) - 指南
  • java基础8-ArrayList
  • 两个用于从B站下载视频的Shell脚本
  • 2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头厂商深度解析
  • P3800 Power 收集和单调队列优化dp小总结
  • 微信群机器人接口
  • 2025 年杭州品牌策划公司机构推荐榜:餐饮品牌策划/家电品牌策划聚焦实战力与适配性,这家杭州本土机构值得关注
  • 2025 年土工格栅厂家推荐榜:聚焦工程适配与品质保障,优选山东大成工程材料有限公司
  • 2025年液压阀块厂家最新权威推荐榜:液压阀/阀块加工/阀块零件机加工专业制造商,技术实力与市场口碑深度解析
  • logging模块用法
  • 软件服务行业,被玩坏了的阿米巴
  • 实用指南:WordPress提速指南:Memcached+Super Static Cache+CDN缓存网站内容
  • AI元人文中价值原语博弈系统的理论建构与实践意义探析
  • LGP3201 [HNOI 2009] 梦幻布丁 学习笔记
  • 2025年石头纸设备/吹塑机厂家最新权威推荐榜:环保石头纸、碳酸钙石头纸、固废石头纸及挤出吹塑机、注射吹塑机、半导体清洗液瓶子吹塑机专业选购指南
  • AI技术新突破:图像编辑与浏览器智能体