探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)KV缓存

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)

KV缓存

在推理的每一步中,只对模型输出的最后一个标记感兴趣,因为已经有了之前的标记。然而,模型需要访问所有先前的标记来决定输出哪个标记,因为它们构成了它的上下文(或“提示”)。
这是一种使模型在推理过程中对已经看到的标记进行更少计算的方法。解决办法就是KV缓存!

在Transformer的推理过程中, 增量且顺序地获取查询向量。将其乘以 Key 向量即可得到每个 token 与先前生成的 token 及其自身的注意力矩阵。然后,在取softmax之后, 乘以值向量以获得自注意力分数。最后有另一个输出投影矩阵,用于转换下一组多头注意力层的注意力分数。这个计算重复多次,然后得到词汇表中所有单词的概率分布
在这里插入图片描述
在上图中, 可以看到Transformer的推论。标记 TOKEN 1 到 TOKEN 4 按顺序出现,因为注意力计算 TOKEN 4 取决于所有先前的标记。

  • 在紫色矩阵中, 可以看到 Q 和 K 矩阵乘法随着注意力矩阵一起增长,但 K 和 V 值矩阵对于所有先前的标记保持相同。另外,如图所示, 不需要已经计算出的注意力分数(需要注意的是, 可能需要波束搜索来获得它们,但这里 只考虑贪婪采样),所以 可以扔掉它们。深紫色矩阵实际上为零,因为它是因果矩阵,因此第一个标记从不关注第四个标记,并且它们被屏蔽。

  • 因此 可以缓存 K 和 V 矩阵,因为它们不会改变。但是, 无法缓存 Q 矩阵。这是因为 Q 矩阵随着每个新标记而变化。查询矩阵是标记正在查找的内容,键矩阵是标记包含的内容,值矩阵是当前标记和前一个标记是否对词汇表中的标记感兴趣。

  • 此外,可以借助电影数据库来理解查询(query)、键(key)和值(value)的概念。假设你想看一部能让你发笑,并且最后有一个“谁是凶手”环节的电影(这是查询)。那么首先,我们会在数据库中查询一部能让我们发笑的电影,这将是一部喜剧片(这是键)。然后,我们会得到一系列喜剧电影的推荐(这是值)。在那之后,电影数据库会获取到电影应该是“谁是凶手”类型或属于惊悚片类型的信息。然后,电影数据库将寻找喜剧和惊悚类型的电影(这是更新后的键),并且借助之前缓存的喜剧电影推荐,我们可以搜索那些同时也是惊悚片的电影(值)。
    因此, 可以缓存喜剧类型和所有喜剧电影推荐,以便当新信息出现(惊悚类型)时, 可以缩小搜索范围并提高效率。

KV 缓存对于高效推理至关重要,因为 增量存储键和值矩阵并缓存它们,以便可以更快地计算未来的注意力分数。

def repeat_kv(x: torch.Tensor, n_rep: int)-> torch.Tensor:batch_size, seq_len, n_kv_heads, head_dim = x.shapeif n_rep == 1:return xelse:return (# (B, seq_len, n_kv_heads, 1, head_dim)x[:, :, :, None, :].expand(batch_size, seq_len, n_kv_heads, n_rep, head_dim).reshape(batch_size, seq_len, n_kv_heads * n_rep, head_dim))

KV 缓存的一些问题

KV缓存一般存储在连续的内存中。如果有多个并行请求,那么它们需要单独存储,这会浪费内存,并可能导致 OOM(内存不足)错误。而且,每个请求的提示几乎相同(特别是像“你是一个有用的助手…”这样的系统提示),因此一次又一次地将它们存储在连续的内存中效率很低。
在这里插入图片描述

  • 静态模型权重消耗了近 65% 的 VRAM 内存,而 KV 缓存则消耗了近 30%,因为它会因多个请求而增大且内存使用效率低下。并且,如果将 KV 缓存存储在连续的内存中,那么在一些服务之后需要将其取消分配以适应最近的 KV 缓存

  • 如果想要生成具有一些初始响应的并行多个响应,那么需要为每个生成的响应单独存储它们在连续的内存中,这会浪费很多空间。此外,使用诸如束搜索(beam search)这样的高级技术时,会根据生成的的未来累积概率来选择最有可能的。在这里,需要回溯并关闭一些路径,因此对于束搜索中的每个方向,如果分配了一个新的连续内存,那么它将消耗大量内存,效率很低。

  • GPU在矩阵乘法方面已经变得非常擅长,但这些系统的记忆仍然有限,因此受内存限制。KV缓存可以帮助,因为它可以帮助更快地获取键和值矩阵以进行计算。但在内存有限的情况下,需要提出更好的内存管理方法。

系列博客

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(一)
https://duanzhihua.blog.csdn.net/article/details/138208650
探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(二)
https://duanzhihua.blog.csdn.net/article/details/138212328

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6176.shtml

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

相关文章

07 - 步骤 javaScript代码

简介 JavaScript 代码是通过 JavaScript 脚本步骤来执行 JavaScript 脚本的一种方式。这允许用户在 Kettle 的数据流程中使用 JavaScript 编写自定义的脚本逻辑,用于数据处理、转换、计算等操作。 使用 场景 我需要在数据流加一个字段 createTime 当前时间&…

《有限元分析及应用》《有限元分析基础教程》-曾攀-清华大学|pdf电子书+有限元分析及应用视频教程(全85讲) 曾攀、雷丽萍 ​​​+课件PPT

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

找不到msvcr110.dll的多种解决方法,轻松解决dll问题

在日常使用计算机的时候,突然提示:“由于找不到msvcr110.dll,无法继续执行代码”。这个错误通常发生在运行某些程序时,系统无法找到所需的动态链接库文件。这个问题可能会给用户带来困扰,但是不用担心,下面…

QT:输入类控件的使用

LineEdit 录入个人信息 #include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QString>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 初始化输入框ui->lineEdit…

stm32f103zet6_串口实现-DHT11-tim1(定时)

1思路 1打开时钟 1.1使用定时器实现us级的计时 1.2在打开串口 1,3在DHT11驱动中修改引脚 stm32cudeMX 配置 1打开时钟 2打开串口 3打开tim1(定时器) 4生成代码 代码设置 1导入DHT11库(tim.h是定时器的文件系统自动生成的) DHT11.c #include "dht11.h" #inc…

真香!剪映专业版VIP,解锁限制功能!

01 软件介绍 剪映专业版采用更直观更全能易用的创作面板&#xff0c;让专业剪辑变得更简单高效&#xff0c;为更多人提供畅爽的专业剪辑体验&#xff0c;让更多人享受视频创作的乐趣! 剪映专业版引入强大黑罐头素材库&#xff0c;支持搜索海量音频、表情包、贴纸、花字、特效…

TCP协议在物联网中的实战

一、TCP协议介绍 网上对TCP协议介绍众多&#xff0c;本人按照自己的理解简单介绍一下。 TCP&#xff08;Transmission Control Protocol&#xff0c; 传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输控制层通信协议。 1.1 协议机制 1.1.1 三次握手 &…

使用LwIP实现TCP Client通信(基于STM32F407)

目录 概述 1 功能介绍 1.1 代码框架 2.2 搭建系统 2 TCP Client功能实现 2.1 代码实现 2.2 具体代码 3 功能测试 3.1 测试功能描述 3.2 运行代码 测试代码下载地址&#xff1a; stm32-f407-dm9161-LwIP-tcp-client资源-CSDN文库 概述 本文主要介绍使用STM32F407和…

【多变量控制系统 Multivariable Control System】(1)DSM:术语、基本公式和MATLAB仿真【新加坡南洋理工大学】

说明&#xff1a; 题目版权归校方所有&#xff0c;仅供学习和参考使用。 DSM Control DSM Direct Synthesis Method Process Model Closed-Loop Transfer Function 基本公式 &#xff08;1&#xff09;输入、输出关系 &#xff08;2&#xff09;控制器表示 MatLab仿真…

【navicat】oracle library is not loaded 问题复现和解决方案

问题原因&#xff1a;客户端oci版本安装错误&#xff0c;navicat需要64位的oci,但是使用32位的oci。 解决方案&#xff1a;官网下载64位oci进行配置。本次演示的解决多了splplus&#xff0c;其实不必要安装也能运行。 首先判断是否数据库已经打开 尝试使用splplus连接数据库 1…

JavaScript中的Math对象方法、Date对象方法

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f31f;Math对象方法&#x1f344;1 Math静态属性&#x1f344;2 Math…

【c++】继承学习(一):继承机制与基类派生类转换

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章我们来学习继承部分 目录 1.继承的概念和定义继承的定义继承基类成员的访问方式变化 2.基类和派生类对象赋值转换3.继承中的作用域 1.继承的概念和定义 …

Costas-Barker序列模糊函数仿真

文章目录 前言一、Costas 序列二、Barker 码三、Costas-Barker 序列模糊函数仿真1、MATLAB 核心代码2、仿真结果①、Costas-Barker 模糊函数图②、Costas-Barker 距离模糊函数图③、Costas-Barker 速度模糊函数图 四、资源自取 前言 Costas 码是一种用于载波同步的频率调制序列…

基于Ollama+AnythingLLM轻松打造本地大模型知识库

随着人工智能技术的快速发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;已成为自然语言处理领域的重要工具。然而&#xff0c;这些模型的运行通常需要大量的计算资源和复杂的部署流程。为了解决这个问题&#xff0c;Ollama应运而生&#xff0c;成为了一个高效的本地大…

学浪的缓存怎么导出来

学浪的缓存导出问题困扰着许多用户&#xff0c;备份和管理数据变得至关重要。在数字化时代&#xff0c;保护和利用数据是企业和个人不可或缺的需求。在这篇文章中&#xff0c;我们将深入探讨学浪缓存导出的方法&#xff0c;为您解决疑惑&#xff0c;让您轻松掌握数据的安全与便…

237基于matlab的偏振态仿真

基于matlab的偏振态仿真&#xff0c;不同偏振态下光强计算。本仿真软件可以仿真波片对偏振光的相位调制过程。用户可以通过改变波片的类型&#xff0c;波片长轴与 X 轴的夹角&#xff0c;起偏器透光与 X 轴的夹角&#xff0c;检偏器透光轴与 X 轴的夹角等参数&#xff0c;来观察…

毫米波雷达原理(含代码)(含ARS548 4D毫米波雷达数据demo和可视化视频)

毫米波雷达原理 1. 传统毫米波雷达1.1 雷达工作原理1.2 单目标距离估计1.3 单目标速度估计1.4 单目标角度估计1.5 多目标距离估计1.6 多目标速度估计1.7多目标角度估计1.7 总结 3. FMCW雷达数据处理算法4. 毫米波雷达的目标解析(含python代码)5. ARS548 4D毫米波雷达数据demo(含…

docker学习笔记3:VmWare CentOS7安装与静态ip配置

文章目录 一、安装CentOS71、下载centos镜像2、安装二、设置静态ip三、xshell连接centos本专栏的docker环境是在centos7里安装,因此首先需要会安装centos虚拟机。 本篇博客介绍如何在vm虚拟机里安装centos7。 一、安装CentOS7 1、下载centos镜像 推荐清华源,下载如下版本 …

GPU虚拟化和算力隔离探讨

1. 术语介绍 术语 全称 说明 GPU Graphics Processing Unit 显卡 CUDA Compute Unified Device Architecture 英伟达2006年推出的计算API VT/VT-x/VT-d Intel Virtualization Technology -x表示x86 CPU&#xff0c;-d表示Device SVM AMD Secure Virtual Machine …

RabbitMQ入门教学(浅入浅出)

进程间通信 互联网的通讯时网络的基础&#xff0c;一般情况下互联网的资源数据对储存在中心服务器上&#xff0c;一般情况下个体对个体的访问仅限于局域网下&#xff0c;在公网即可完成资源的访问&#xff0c;如各种网站资源&#xff0c;下载资源&#xff0c;种子等。网络通讯…