LLM系列:KVCache及优化方法

前言

Transformer encode-base模型,推理和训练过程高度统一(差异仅仅是否存在反向),而decoder-base模型(如GPT、LLama2),推理与训练差异性比较大:

  • 自回归推理
  • 全量prompt+增量token
  • KV Cache

KV Cache

如下以GPT2结构第i层推理过程为例,分析KV Cahche计算过程,其中WQi,WKi,WVi,WOi,Wupi,WdowniW_Qi,W_Ki,W_Vi,W_Oi,W_{up}i,W_{down}iWQi​,WKi​,WVi​,WOi​,Wupi​,Wdowni​表示第i层decoder权重矩阵。

全量prompt阶段

第i层输入xix^ixi([b,s,h]),self-attention块 xKi,xVi,xQix_Ki,x_Vi,x_Q^ixKi​,xVi​,xQi​([b,s,h])

KV Cahche计算:

xKi=xi⋅WKi([b,s,h])x_K^i = x^i \cdot W_K^i([b,s,h])xKi​=xi⋅WKi​([b,s,h]) xVi=xi⋅WVi([b,s,h])x_V^i = x^i \cdot W_V^i([b,s,h])xVi​=xi⋅WVi​([b,s,h])

第i层attention、mlp计算:

xQi=xi⋅WQi([b,s,h])x_Q^i = x^i \cdot W_Q^i([b,s,h])xQi​=xi⋅WQi​([b,s,h])

xouti=softmax(xQixKiTh)⋅xVi⋅WOi+xi([b,s,h])x_{out}i=softmax(\frac{x_Qi{x_Ki}T}{\sqrt{h}})\cdot x_V^i \cdot W_O^i + x^i ([b,s,h])xouti​=softmax(h​xQi​xKi​T​)⋅xVi​⋅WOi​+xi([b,s,h])

xi+1=fgelu(xouti⋅Wupi)⋅Wdowni+xouti([b,s,h])x{i+1}=f_{gelu}(x_{out}i \cdot W_{up}^i) \cdot W_{down}^i + x_{out}^i ([b,s,h])xi+1=fgelu​(xouti​⋅Wupi​)⋅Wdowni​+xouti​([b,s,h])

增量token阶段

增量推理时,当前生成词在第i层表示ti([b,1,h])t^i ([b,1,h])ti([b,1,h]),推理时执行:更新KV Cache和计算第i层输出。

更新KV Cahce:

xKi←Concat(xKi,ti⋅WKi)([b,s+1,h])x_K^i \leftarrow Concat(x_K^i, t^i \cdot W_K^i) ([b,s+1, h])xKi​←Concat(xKi​,ti⋅WKi​)([b,s+1,h]) xVi←Concat(xVi,ti⋅WVi)([b,s+1,h])x_V^i \leftarrow Concat(x_V^i, t^i \cdot W_V^i) ([b,s+1, h])xVi​←Concat(xVi​,ti⋅WVi​)([b,s+1,h])

第i层计算过程:

tQi=ti⋅WQi([b,1,h])t_Q^i = t^i \cdot W_Q^i ([b,1,h])tQi​=ti⋅WQi​([b,1,h]) touti=softmax(tQixKiTh)⋅xVi⋅WOi+ti([b,1,h])t_{out}^i = softmax(\frac{t_Qi{x_Ki}^T}{\sqrt{h}})\cdot x_V^i \cdot W_O^i + t^i ([b,1,h])touti​=softmax(h​tQi​xKi​T​)⋅xVi​⋅WOi​+ti([b,1,h])

ti+1=fgelu(touti⋅Wupi)⋅Wdowni+touti([b,1,h])t{i+1}=f_{gelu}(t_{out}i \cdot W_{up}^i) \cdot W_{down}^i + t_{out}^i ([b,1,h])ti+1=fgelu​(touti​⋅Wupi​)⋅Wdowni​+touti​([b,1,h])

KV Cache缓存机制如图:

image.png

KV Cache显存分析

KV cache的峰值显存占用大小: b(s+n)∗h∗l∗2∗2=4blh(s+n)b(s+n)∗h∗l∗2∗2=4blh(s+n)b(s+n)∗h∗l∗2∗2=4blh(s+n),输入序列长度s,输出序列长度n,第一个2表示k/v cache,第二个2表示fp16占用2个字节,transformer模型的层数为l,隐藏层维度为h。

以GPT3(175B)为例分析KV Cache与模型参数大小,GPT3模型weight占用350GB(FP16),层数l=96,维度h=12888。

bss+nkv cache(GB)kv cache/weight
4409675.50.22
1640963020.86
64409612083.45

根据上述数据,随着batch增大和长度增大,KV Cahche开销快速增大,甚至超过模型参数本身。

LLM的窗口长度不断增大,KV Cahche开销随之不断增大,优化KV Cahche非常必要。

KV Cache优化方法

总结典型KV Cache优化手段如下。

1 共用KV Cache(MQA和GQA)

MQA(Multi Query Attention)多查询注意力是MHA多头注意力的变体。两者主要区别是MQA中不同头共享一组KV,每个头只保留查询参数Q。KV矩阵只有一份,大幅减少内存。 由于MQA改变注意力机制结构,模型需要从训练开始就支持MQA,或通过对已训练好的模型微调支持MQA,仅需约5%的原始数据量即可达到不过效果。Falcon、SantaCoder、StarCoder 等在内很多模型都采用了MQA机制

# Multi Head Attention
self.Wqkv = nn.Linear(     # Multi-Head Attention 的创建方法
    self.d_model,
    3 * self.d_model,     # Q、K和V 3 个矩阵, 所以是 3 * d_model
    device=device
)
query, key, value = qkv.chunk(3, dim=2)      # 每个 tensor 都是 (1, 512, 768)

# Multi Query Attention
self.Wqkv = nn.Linear(       # Multi-Query Attention 的创建方法
    d_model,
    d_model + 2 * self.head_dim,    # 只创建Q的头向量,所以是 1* d_model, 而K和V不再具备单独的头向量, 所以是 2 * self.head_dim
    device=device,
)
query, key, value = qkv.split(
    [self.d_model, self.head_dim, self.head_dim],    # query -> (1, 512, 768), key   -> (1, 512, 96), value -> (1, 512, 96)
    dim=2
)

GQA (Grouped Query Attention,分组查询注意力),介于MHQ和MQA之间的折中方案。按查询头Q分组,每个组共享一个K和V。表达能力与推理性能兼顾。

MHA、MQA与GQA原理:

image.png

MQA与GQA性能对比:

image.png

2 窗口优化

image.png

3 量化与稀疏

通过量化与稀疏压缩 KV cache的显存消耗。

  • 稀疏方法 典型稀疏方式:

image.png

结果显示,KV cache稀疏到只有原来20%时仍然可以保持很高精度。

image.png

4 存储与计算优化

FlashDecoding 是在FlashAttention基础上对inference的优化,主要分三步:

(1)长文本下将KV分成更小且方便并行的chunk
(2)对每个chunk的KV,Q和他们进行之前一样的FlashAttention获取这个chunk的结果
(3)对每个chunk的结果进行reduce gif图如下:

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

公司电脑文件防泄密软件系统——天锐绿盾 | 透明加密、防泄密系统

天锐绿盾是一款专业的企业信息安全防护软件,旨在防止公司内部文件的泄露。它提供了多种功能来保护敏感数据,确保企业信息的安全。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天锐绿盾的主…

[Java基础揉碎]网络相关概念

目录 网络通信 网络 ip地址 ​编辑 域名 ​编辑 网络协议 TCP和UDP 网络编程比较重要的的InetAddress类 Socket ​编辑 tcp字节流编程 案例一 案例二​编辑 案例三 网络上传文件 ​编辑​编辑 ​编辑 netstat tcp网络通信客户端也是通过端口和服务端进行通讯的…

输入失调电流是什么?

输入失调电流与输入补偿电流概念一样(input offset current):同相减去反相输入端偏置电流的差值。这是由生产工艺导致同相与反相端的电流大小方向都会有所不同。 第一种情况:同相输入端减去反相输入端 第一种情况:同相…

Elasticsearch 为时间序列数据带来存储优势

作者:来自 Elastic Martijn Van Groningen, Kostas Krikellas 背景 Elasticsearch 最近投资了对存储和查询时间序列数据的更好支持。存储效率一直是关注的主要领域,许多项目取得了巨大的成功,与将数据保存在标准索引中相比,可以节…

耐用充电宝有哪些?优质充电宝到底选哪个?良心推荐!

在电量即生产力的现今时代,如何为移动设备寻找一位最佳的伴侣呢?一款耐用、优质的充电宝无疑是你的不二之选。今天我们将带您揭开市场隐藏的一面,揭示哪些充电宝品牌真正代表了耐用与品质的标杆。让我们一起深入了解并选购最适合自己的充电宝…

MFC绘图

文章目录 消息组成消息的作用获取消息翻译消息常见消息WM_DESTROYWM_SYSCOMMAND 消息循环的阻塞发送消息字符串资源加速键资源GDI绘图对象-画笔位图绘制文本绘制字体模式对话框动态库特点线程创建线程 互斥事件信号量 消息组成 窗口句柄消息ID消息的两个参数消息产生的时间消息…

PGConf.dev 2024 |@PGer 你的问题已出海,来看看 Tom Lane 如何回复?

2024 PostgreSQL 开发大会(pgconf.dev)于5月8日在温哥华召开。瀚高IvorySQL发起留言互动活动——#PGConf.dev 2024数据世界因你不同#,已将部分用户想问的问题传递到PGConf.dev现场。 与会的大佬们对每一个问题都给予了认真的回复和解答。来看…

ABB机器人修改IO信号的具体方法介绍

ABB机器人修改IO信号的具体方法介绍 具体步骤可从参考以下内容: 导出IO配置文件 打开【控制面板】-【配置】-【I/O System】-【文件】-【‘EIO’另存为】,就可以保存IO配置文件【EIO.cfg】用RobotStudio软件打开EIO.cfg文件在软件界面,鼠标右击,选择【I/O信号数据编辑器】选…

Flutter 实现dispose探测控件

文章目录 前言一、什么是dispose探测控件?1、通常情况2、使用dispose探测控件 二、如何实现1、继承StatefulWidget2、定义dipose回调3、定义child4、重载Dispose方法5、build child 三、完整代码四、使用示例1、基本用法2、设置定义数据 总结 前言 开发flutter一般…

单片机多个中断源时的设计思路,(51为例)工作寄存器R0-R7

51单片机中四组工作寄存器(R0-R7) 参考 可以看出每个工作寄存器区有8个字节即为R0-R7,当不指定使用哪个工作寄存器区的时候默认0区。其他工作区作为普通的RAM使用。特殊功能寄存器中有可以位寻址和不能位寻址的区域 下面文字引用 通过修改…

晶泰科技即将登陆港交所:三年亏近55亿,二级市场信心待考

《港湾商业观察》黄懿 有着“AI制药”之称的深圳晶泰科技有限公司(以下简称,晶泰科技;02228.HK)即将登陆港交所。 据日前消息,晶泰科技于2024年6月4日至6月7日招股,拟全球发售股份1.87373亿股&#xff0c…

ES8.13 _bulk报错Malformed content, found extra data after parsing: START_OBJECT解决

在使用elaticsearch8.13.0使用批量创建索引时,根据谷粒中说的es7.9方法去批量操作请求: http://127.0.0.1:9200/shop/_doc/_bulk 注意1:设置header为Content-Type:application/x-ndjson,否则请求报错: {"error": &qu…

LeetCode | 2022.将一维数组转变为二维数组

这道题思路比较简单,比较容易想到的是先判断m和n构成的二维数组在形式上是否可以由原来的数组转变而成,若不可以返回空数组,若可以直接用一个二重循环遍历一遍即可,时间复杂度 O ( n 2 ) O(n^2) O(n2) class Solution(object):de…

史上最全,呕心沥血总结oracle推进SCN方法(六)

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享。前面介…

tmux 移植到ARM板端运行环境搭建

tmux源码下载: Home tmux/tmux Wiki GitHub 依赖的库代码下载: libevent: ncurses: 第一步:将以上三个代码解压放在同一个目录下,逐个编译 1. cd ./libevent-2.1.12-stable ./configure --host"arm-nextvp…

北斗位置服务管理平台

平台简介 一直想做一款后台管理系统,同时可以管理人,车,物品,猫,狗,牛羊等一切可以移动的室外事物进行集中化管理,最初的需求聚焦——谁在哪儿! 系统框架是基于当前最常用的RuoYi框架…

68页 | 2024体育赛事网络安全保障实践蓝皮书(免费下载)

以上是资料简介和目录,如需下载,请前往星球获取:

短剧片源火爆,千金难求好剧源

前言 在当今快节奏的生活中,短剧以其精悍的篇幅、吸睛的剧情和便捷的观看方式,异军突起,吸引了大量观众的关注和喜爱。这些短剧不仅让人们在忙碌的间隙轻松娱乐,更以其高潮迭起的情节设计,让观众在短时间内便能体验到…

“百变换装师”之证照之星

拍证件照是一件很麻烦的事吗?证件照编辑是一件复杂的事吗?只有专业人员才能对证件照进行编辑吗?以前可能是,但今天小编将给大家分享一个证件照编辑软件证照之星,它将使每一个人都能具备简单的证件照编辑技能。 证照之星…

Failed to start gdm.servide - GNOME Display manager

启动虚拟机时,卡在Failed to start gdm.servide - GNOME Display manager不动。 解决方法: 1.重新启动Ubuntu,在进度条未结束之前,长按shift直到界面跳转到选项菜单。 2.选择第二个,按enter进入 3.选择最新版本(后面…