【LLM】大模型推理加速 KV-Cache

news2024/9/20 0:59:51

目录

  • 模型推理过程
  • KV Cache原理
  • KV Cache的存储

模型推理过程

在了解KVCache之前,我们需要知道Transformer类大模型的推理过程。
对于LLM进行一次前向传播也就是生成一个token的过程可以被分解成以下步骤:

  • 文本 T i n p u t T_{input} Tinput经过Tokenizer后得到n个Token,即 { T 1 , T 2 , . . . , T n } \{T_1,T_2,...,T_n\} {T1,T2,...,Tn}
  • Token经过嵌入层后得到Token Embedding { x 1 0 , x i 0 , . . . , x n 0 } \{x_1^0,x_i^0,...,x_n^0\} {x10,xi0,...,xn0},其中0代表第0层, x x x是D维向量
  • Token Embedding 经过L层变换之后,得到 { x 1 L , x i L , . . . , x n L } \{x_1^L,x_i^L,...,x_n^L\} {x1L,xiL,...,xnL}
  • generation阶段,将最后一层的最后一个Token Embedding即 x n L x_n^L xnL取出,与lm_head中的vocabulary Embedding { e 1 , e 2 , . . . , e V } \{e_1,e_2,...,e_V\} {e1,e2,...,eV}进行运算,得到概率 { p 1 , p 2 , . . . , p V } \{p_1,p_2,...,p_V\} {p1,p2,...,pV},最后从概率采样中选择一个产生新的 T n + 1 T_{n+1} Tn+1

流程如图所示
在这里插入图片描述
如果我们一直用 T [ 1 , i ] T_{[1,i]} T[1,i]去生成 T i + 1 T_{i+1} Ti+1也是可行的,但很容易发现一个问题,Token Embedding中 [ 1 , i ] [1,i] [1,i]这部分的值是不需要重新计算的。

我们发现每次计算 T i + 1 T_{i+1} Ti+1时,只需要额外计算 x i 0... L x_{i}^{0...L} xi0...L的值就可以了。

在这里插入图片描述

KV Cache原理

当我们有了 { x 1 l , x 2 l , . . . , x n l } \{x_1^l,x_2^l,...,x_n^l\} {x1l,x2l,...,xnl}的数据,再加上新来的 x n + 1 l x_{n+1}^l xn+1l计算 x n + 1 l + 1 x_{n+1}^{l+1} xn+1l+1的计算量只是一次attention query。

我们只关注 x n + 1 l + 1 x_{n+1}^{l+1} xn+1l+1
s i = ( W Q x n + 1 l ) T ( W K x i l ) , 1 ≤ i ≤ n + 1 s_i = (W_Qx_{n+1}^l)^T(W_Kx_i^l),1≤i≤n+1 si=(WQxn+1l)T(WKxil),1in+1

y h = ∑ i = 1 n + 1 s i ∑ j = 1 n + 1 e j W V x i l , 1 ≤ i ≤ n + 1 y_h=\sum_{i=1}^{n+1}\frac{s_i}{\sum_{j=1}^{n+1}e_j}W_Vx_i^l,1≤i≤n+1 yh=i=1n+1j=1n+1ejsiWVxil,1in+1

x n + 1 l + 1 = C o n c a t 1 H y h x_{n+1}^{l+1}=Concat_{1}^Hy_h xn+1l+1=Concat1Hyh

其中 W Q / K / V W_{Q/K/V} WQ/K/V是QKV的投影矩阵,H是多头自注意力中head的个数。中间省略了dot product、layernorm、feed forward等步骤。

过程如图片所示。图片来源
在这里插入图片描述
在每次计算过程中得到的中间值 W K x i l W_Kx_{i}^l WKxil W V x i l W_Vx_{i}^l WVxil,将它们保存下来,就得到了K Cache和V Cache。

KV Cache的存储

KV Cache的总大小是2nHD,其中n是token数量,H是head数量,D是 x i l x_i^l xil的维度。
目前有三种解决方案:

  • 分配一个最大容量的缓冲区,但需要提前知道最大的token数量。
  • 动态分配缓冲区大小,类似vector的方式。
  • 将数据拆散,按最小单元格存储,用一份元数据记录每一块数据的位置。

最后一种方式也就是现在常用的PageAttention,也是vllm的核心技术。

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

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

相关文章

数据结构与算法分析引论1

1.解决问题的算法有很多,但是在输入不同的情况下,不同算法之间的差异也很大,我们总是追求一个更快、更有效的方法。比如说普通的依次查找和二分查找,两者的差异就很大。我们使用大O表示法来表示算法的速度。依次查找就是O(n)&…

MATLAB 自定义生成平面点云(可指定方向,添加噪声)(48)

MATLAB 自定义生成平面点云(可指定方向,添加噪声)(48) 一、算法介绍二、算法步骤三、算法实现1.代码2.效果一、算法介绍 通过这里的平面生成方法,可以生成模拟平面的点云数据,并可以人为设置平面方向,平面大小,并添加噪声来探索不同类型的平面数据。这种方法可以用于…

UDS诊断中的NRC

我总结了一张表格:详细解释了NRC的分布情况和NRC的触发条件 1:基本概念 NRC 全称Negative Response Code(否定响应代码),是指示uds诊断中的,指示否定响应的原因 例如:0x22 服务 request 报文 0x618 03 22 F1 34 0…

电脑物理磁盘空间不足?试试这5种清理和优化方法!

随着我们使用电脑的时间越来越长,物理磁盘空间可能会逐渐变得捉襟见肘。当你的电脑提示磁盘空间不足时,不要慌张,这里有五种方法可以帮助你清理和优化电脑,释放宝贵的存储空间。 1. 卸载不常用的程序和游戏 许多用户在安装软件和…

机器学习基础——模型评估与选择(部分)

目录 一、前言:误差与拟合 (一)经验误差 (二)过拟合、欠拟合 二、评估方法 (一)评估总体的思路 (二)如何划分训练集和测试集 1.留出法 2.k折交叉验证 3.自助法 …

程序员35岁真的就是危机吗?

前言 35岁被认为是程序员职业生涯的分水岭,许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长,技术更新换代的速度会使得资深程序员难以跟上;而另一些人则认为,丰富的经验和深厚的技术积累是年轻程…

knife4j/swagger救援第一现场

1、前方来报,测试环境springboot项目无法启动,现场如下: Error starting ApplicationContext. To display the auto-configuration report re-run your application with debug enabled. [ERROR] 2024-03-20 12:54:42,718 --main-- [org.spr…

一键跳过开屏广告,这下舒服了

现在的app开屏广告越来越过分了,不小心摇一摇翻转就点开广告了。 今天分享个强大的自动跳过广告https://github.com/gkd-kit/gkd,李跳跳替代品,下载地址在公众号后台对话框回复 广告 玩转互联网达人 苏生不惑备用号,分享各种黑科…

【Godot4自学手册】第二十九节使用Shader来实现敌人受伤的闪白效果

在Godot 4中,Shader是用来为材质提供自定义渲染效果的程序。材质可以应用于MeshInstance、CanvasItem和ParticleEmitter等节点。Shader可以影响顶点的变换、片段(像素)的颜色,以及光照与物体的交互。 在Godot中,Shader…

HTML基础:8个常见表单元素的详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端程序媛。 后台回复“前端工具”可免费获取开发工具,持续更新。 今天来说说 HTML 表单。它是用于收集用户输入信息的元素集合。例如文本框、单选按钮、复选框、下拉列表等。 用户经常填写的表…

海外媒体软文发稿:谷歌关键词优化细分人群成功案例,突破海外市场!

海外媒体软文发稿:谷歌关键词优化细分人群成功案例,突破海外市场! 引言 在全球化的时代,海外市场对于企业的发展至关重要。而在海外市场中,互联网媒体的作用不可忽视。本篇教程将介绍如何通过谷歌关键词优化细分人群…

西井科技与安通控股签署战略合作协议 共创大物流全新生态

2024年3月21日,西井科技与安通控股在“上海硅巷”新象限空间正式签署战略合作框架协议。双方基于此前在集装箱物流的成功实践与资源优势,积极拓展在AI数字化产品、新能源自动驾驶解决方案和多场景应用,以及绿色物流链等领域的深度探索、强强联…

2024.3.23

1、使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否…

鸿蒙应用开发-录音并使用WebSocket实现实时语音识别

功能介绍: 录音并实时获取RAW的音频格式数据,利用WebSocket上传数据到服务器,并实时获取语音识别结果,参考文档使用AudioCapturer开发音频录制功能(ArkTS),更详细接口信息请查看接口文档:AudioCapturer8和…

如何推进制造业数字化转型?《制造业数字化转型白皮书》分享给你

分享一份《制造业数字化转型白皮书》给你,希望对你有所帮助! 内容较长,防止后续找不到,建议先收藏! 变局:数字经济浪潮“不期而至” 中国制造何去何从? VUCA(不稳定 Volatile、不确…

超详细SpringMVC源码剖析

整体流程图 1.自定义视图(63~66) 视图解析过程 1.先到DispatcherServlet中央控制器, 根据视图解析的 优先级 执行对应的 视图解析器 Nullable protected View resolveViewName(String viewName, Nullable Map<String, Object> model,Locale locale, HttpServletReque…

美团面试一面凉经

1.自我介绍 2.科研项目提问 没咋准备&#xff0c;说的有点没逻辑 3.问论坛项目 为什么用Redis实现登录&#xff1f;能不能用其他方式实现&#xff1f; 1、Redis 具备高性能 假如用户第一次访问 MySQL 中的某些数据。这个过程会比较慢&#xff0c;因为是从硬盘上读取的。将…

Springboot+vue的企业质量管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的企业质量管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

堆排序(六大排序)

前面博客已经分享过堆的知识了&#xff0c;今天我们来分享堆排序。 堆排序 堆排序(Heapsort)是指利用堆积树&#xff08;堆&#xff09;这种数据结构所设计的一种排序算法&#xff0c;它是选择排序的一种。它是通过堆来进行选择数据。 ★★★需要注意的是排升序要建大堆&#…

公众号超牛鼻的爆文仿写机器人,原创三篇只需6分钟,篇篇是爆文基因

大家好&#xff0c;我是大胡子&#xff0c;专注于RPA提效​&#xff0c;今天就介绍一款公众号超牛鼻的爆文仿写机器人​。 和以前的公众号爆文机器人不太一样&#xff0c;以前的爆文机器人需要手动插入图片、添加封面、插入话题&#xff0c;然后今天这个机器人就完全解决这几个…