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

为什么Transformer推理需要做KV缓存

一、我们先来回忆一下在transformer中KV在哪里出现过,都有什么作用?

α的计算过程:

这里引入三个向量:

图中的q为Query,用来匹配key值

图中的k为key,用来被Query匹配

图中的Value,是用来被进行加权平均的

这一步我们知道α就是K与Q的匹配程度,匹配程度越高则权重越大。

Wq、Wk、Wv这三个参数矩阵都需要从训练数据中学习

二、为什么要使用KV缓存

使用KV缓存是为减少生成token时候的矩阵运算。

        因为在transformer中文本是逐个token生成的,每次新的预测会基于之前生成的所有token的上下文信息,这种对顺序数据的依赖会减慢生成过程,因为每次预测下一个token都需要重新处理序列中所有之前的token。

        比说我们要预测第100个token,那么模型必须使用前面99个token的信息,这就需要对这些token做矩阵运算,而这个矩阵运算是非常耗时的。所以KV缓存就是为了减少这种耗时的矩阵运算,在推理过程中会把键和值放在缓存中,这样模型就可以在后续生成token的时候,直接访问缓存,而不需要重新计算

三、KV缓存具体是怎么实现的?

这两张图分别是有缓存和没有缓存的情况

因为是第一个token,所以有没有缓存计算过程没有差别

      接下来到第二个token时,可以看到紫色标出的就是缓存下来的key和value,在没有缓存的情况下KV都要重新计算。如果做了缓存就只需要把历史的KV拿出来,同时只计算最新的那个token的KV再拼接成一个大矩阵就行了。

对比一下,有缓存的计算量明显减少了一半

那后面的token一样,每次历史计算过的键和值就不用重新计算了,这样就极大减少了self attention 的计算量,从序列长度的二次方直接变成了线性

http://www.xdnf.cn/news/4032.html

相关文章:

  • 2025年游戏行业DDoS攻防指南:智能防御体系构建与实战策略
  • 【C++】类和对象(一)
  • 【FreeRTOS-时间管理】
  • 0-1背包问题基础概念
  • 家政平台派单系统设计与实现详解
  • transformer读后感
  • Linux系统编程--基础指令(!!详细讲解+知识拓展)
  • 位运算题目:按位与为零的三元组
  • 代码训练营day56图论岛屿数量与面积
  • LIO-SAM笔记(三)适配Livox 激光雷达
  • CSS兼容性:挑战与策略
  • 新Blue引擎启动M2提示该授权文件已经到期怎么解决?
  • 第五节:图像基本操作-图像读取、显示与保存
  • 拆解GCN(Graph Convolutional Network)单层迭代公式
  • 基于MicroPython的ESP32开发
  • YOLOv8 标签透明化与可视化优化指南
  • 两次解析格式化字符串 + 使用SQLAlchemy的relationship执行任意命令 -- link-shortener b01lersCTF 2025
  • C语言|函数的递归调用
  • 智算中心建设方案和前景分析
  • RHCE 第二次作业
  • LeetCode 热题 100 118. 杨辉三角
  • boke luntan shop edu自动化脚本
  • 民宿管理系统5
  • WidowX-250s 机械臂的简单数字孪生案例
  • 【NLP】 31. Retrieval-Augmented Generation(RAG):KNN-LM, RAG、REALM、RETRO、FLARE
  • 【渗透测试】Web服务程序解析漏洞原理、利用方式、防范措施
  • C++进阶之——多态
  • 【C++项目实战】日志系统
  • WEB表单和表格标签综合案例
  • win10启动项管理在哪里设置?开机启动项怎么设置