为什么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.mzph.cn/bicheng/80000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型面试】大模型(LLMs)高频面题全面整理(★2025年5月最新版★)

【大模型面试】大模型(LLMs)高频面题全面整理(★2025年5月最新版★) 🌟 嗨,你好,我是 青松 ! 🌈 自小刺头深草里,而今渐觉出蓬蒿。 本笔记适合大模型初学者和…

JAVA:使用 iTextPDF 处理 PDF 的技术详解

1、简述 iTextPDF 是一个功能强大的 Java PDF 库,可以用来创建、修改和处理 PDF 文档。通过它,我们可以完成如生成 PDF、读取 PDF 内容、添加水印、合并 PDF 等多种操作。本篇博客将详细介绍 iTextPDF 的使用方法,并提供一些实践样例,帮助开发者快速上手。 样例代码: htt…

模态与非模态窗口及使用时的数据交互

模态窗口使用exec()方法显示,会阻塞父窗口,直到对话框关闭; 非模态对话框允许同时操作主窗口和设置窗口,使用show()。 模态和非模态的主要区别在于用户能否与父窗口交互,非模态更适合需要频繁切换的场景。非模态窗口需…

Docker进入MySQL之后如何用sql文件初始化数据

关闭Docker-compose.yml里面所有容器 docker compose -f docker_compose.yml down后台形式开启Docker-compose.yml所有容器 docker compose -f docker_compose.yml up -d罗列出所有启动过的(包括退出过的)容器 docker ps -a进入指定容器ID内部 docke…

MAC 地址

MAC地址(Media Access Control Address)是指网络设备在数据链路层使用的唯一标识符,也称为硬件地址或物理地址。它用于标识设备之间的网络通信,是网络适配器(如网卡、Wi-Fi适配器等)的唯一标识。每个网络设…

Redis 7.0中5种新特性及实战应用

Redis 7.0引入了多项革命性的新特性,不仅在性能和可靠性方面有所提升,更在功能和使用体验上有了质的飞跃。本文将介绍Redis 7.0的五大关键新特性,可以根据实际情况利用Redis 7.0的强大功能,构建更高效、更可靠的应用系统。 特性一…

PHP实现PDF自动签名

技术要点:在PDF中找到一个固定锚点,在需要放置图片的地方找到测试出锚点对应的XY位 // 使用了poppler方法,其他PDF库在获取坐标方面有各种问题,他的安装是在Linux底层,比在PHP项目中用Composer安装的库看上去更稳定&a…

中达瑞和便携式高光谱相机:珠宝鉴定领域的“光谱之眼”

在珠宝行业中,真伪鉴定始终是核心需求。随着合成技术与优化处理手段的日益精进,传统鉴定方法逐渐面临挑战。中达瑞和推出的便携式高光谱相机,凭借其独特的“图谱合一”技术,为珠宝真假鉴定提供了科学、高效且无损的解决方案&#…

2025年渗透测试面试题总结-某战队红队实习面经(附回答)(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 某战队红队实习面经 个人经历与技术能力 2. HVV/攻防演练成绩 3. 上一个工作主要内容 4. 有意思的逻…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.1 描述性统计分析(均值/方差/分位数计算)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.1 描述性统计分析:均值、方差与分位数计算实战5.1.1 数据准备与分析目标数据集介绍分析目标 5.1.2 均值计算:从整体到分组分析总体均值计算加权均值…

npm下载插件无法更新package.json和package-lock.json文件的解决办法

经过多番查证,使用npm config ls查看相关配置等方式,最后发现全局的.npmrc文件的配置多写了globaltrue,去掉就好了 如果参数很多,不知道是哪个参数引起的,先只保留registryhttp://xxx/,试试下载&#xff0…

基于Anaconda的Pycharm环境配置

一、前提条件: 1、默认已安装完Anaconda,且创建虚拟环境,参见https://blog.csdn.net/XIAOWEI_JIN/article/details/147657029?spm1001.2014.3001.5501 2、已安装pycharm,下载链接见Pycharm官网,以下以PyCharm 2024.…

Word域操作记录(从1开始的毕业论文格式排版)

傻逼Word。 写在最前面 如果你的文章不包括:自动目录、交叉引用、自动题注。请关闭此页面。继续阅读本文是在浪费您用于跟格式如泥潭里缠斗的时间。 本文内容概述 从指导手册到毕设初稿 基于多级列表的自动目录生成方法 正片开始 关于文字 拿到毕设手册&#…

Linux中的web服务

什么是www www是world wide web的缩写,及万维网,也就是全球信息广播的意思 通常说的上网就是使用www来查询用户所需要的信息。 www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以Internet传递到世界各 处去。 当你连接w…

linux -c程序开发

目的是在linux中创建可执行的c语言程序的步骤 和gcc,make和git的简单运用 建立可执行程序的步骤: -1:预处理: --:头文件展开;--去掉注释;--宏替换;--条件编译 -2:编译 --:将预处理之后的c语言替换为汇编语言带阿米 --:语法分析,语义分析,代码生成 --:检查语法正确性并且优…

Netty 是一个基于 Java NIO 的高性能网络通信框架

Netty 是一个基于 Java NIO 的高性能网络通信框架,广泛应用于构建分布式系统、RPC 框架、即时通信系统等场景。它的核心设计目标是 异步、非阻塞、高可扩展性,其底层原理涉及 事件驱动模型、线程模型、内存管理 等关键技术。以下是 Netty 的核心原理和架…

UI 库 Ant Design 中的 Table 表格和分页器:快速实现数据展示和分页功能

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

Java实现堆排序算法

1. 堆排序原理图解 堆排序是一种基于二叉堆(通常使用最大堆)的排序算法。其核心思想是利用堆的性质(父节点的值大于或等于子节点的值)来高效地进行排序。堆排序分为两个主要阶段:建堆和排序。 堆排序步骤: …

【Hive入门】Hive安全管理与权限控制:审计日志全解析,构建完善的操作追踪体系

目录 引言 1 Hive审计日志概述 1.1 审计日志的核心价值 1.2 Hive审计日志类型 2 HiveServer2操作日志配置 2.1 基础配置方案 2.2 日志格式解析 2.3 日志轮转配置 3 Metastore审计配置 3.1 Metastore审计启用 3.2 审计事件类型 4 高级审计方案 4.1 与Apache Ranger…

力扣-hot100 (缺失的第一个正数)

41. 缺失的第一个正数 困难 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释&#xff…