You Only Cache Once:YOCO 基于Decoder-Decoder 的一个新的大语言模型架构

这是微软再5月刚刚发布的一篇论文提出了一种解码器-解码器架构YOCO,因为只缓存一次KV对,所以可以大量的节省内存。

以前的模型都是通过缓存先前计算的键/值向量,可以在当前生成步骤中重用它们。键值(KV)缓存避免了对每个词元再次编码的过程,这样可以大大提高了推理速度。

但是随着词元数量的增加,KV缓存占用了大量GPU内存,使得大型语言模型的推理受到内存限制。所以论文的作者改进了这一架构:

YOCO是为自回归建模而设计的,例如大型语言模型(llm)。所提出的解码器-解码器架构有两部分,即自解码器和交叉解码器,如下图所示

2个解码器架构

YOCO采用L块堆叠,其中前L/2层为自解码器,其余模块为交叉解码器,自解码器和交叉解码器都遵循与Transformer类似的块(即,交叉注意力和FFN)。

自解码器与交叉解码器的区别在于它们各自的注意力块不同,自解码器使用高效的自注意机制(例如,滑动窗口注意力)。而交叉解码器使用全局交叉注意力来关注自解码器输出产生的共享KV缓存。

自解码器:

以词元嵌入X0作为输入,计算中间向量表示M = X * u /²

这里的ESA(·)表示自注意力实现,SwiGLU(X) = (swish(XWG)⊙XW1)W2,其中的 LN(·)使用RMSNorm。

还在自注意力中使用了mask(遮蔽掉后面的内容),这个自注意力的模块在推理时的内存占用是 O(1),即KV缓存数为常数。

交叉解码器:

自解码器的输出X * u /²产生交叉解码器的全局KV缓存K, V:

其中,WK,WV∈Rd×d为可学习权重。

交叉解码器层在自解码器之后堆叠,获得最终输出向量XL。KV缓存{K}、{V}被所有L/2交叉解码器模块重用:

其中Attention(·)是标准的多头注意力,Wˡᵩ∈Rd×d为可学习矩阵。

交叉注意也应用了mask,并且使用分组注意力,进一步节省了KV缓存的内存消耗,在获得Xᴸ后,使用softmax分类器执行下一个词元的预测

推理的优势

1、节省GPU内存

下表比较了transformer和YOCO的存储复杂度,其中N、L、D分别为序列长度、层数和隐藏维数

全局KV缓存被重用,并且只需要恒定的缓存,数量为O (N + CL),其中N为输入长度,C为常数(如滑动窗口大小),L为层数。这样对于长序列,CL远小于N,因此只需要大约O(N)个缓存,就是论文名字说的 “只缓存一次”。相比之下,Transformer解码器在推理期间必须存储N × L个键和值,与Transformer解码器相比,YOCO大约为缓存节省了L倍的GPU内存

2、减少预填充时间

下图显示了YOCO 推理时的并行编码和逐个解码输出。

如上图所示,由于交叉解码重用了自解码的输出,使得预填充可以在不改变最终输出的情况下提前得到结果,从而大大加快了预填充阶段。

自解码器的选择

1、门控保留率

门控保留(gRet,又名gRetNet或RetNet-3)通过数据依赖的门控机制增强了保留,从而在序列建模中同时实现了训练并行性、良好的性能和较低的推理成本。该方法统一了并行、递归和块递归计算范式

并行表示的门控保留率定义为:

其中W,Wₖ,Wᵥ∈Rd×d和Wγ∈Rd×1是可学习的权重,并且温度项τ鼓励γ到1以更好地记忆

2、递归表示

门控保持的输出等价于并行表示,可以循环计算。对于第n个时间步长,通过以下方式获得输出:

其中Q K V γ和并行表示的定义是一样的

3、分段递归表示

分段表示是循环表示和并行表示的统一形式。给定块大小B,输出以块为单位计算,计算分为块内部分和跨块部分设[i]为第i个块,即x[i] = x(i−1)B+1,····,xiB,则第i个块计算为:

其中Ri是第i块的中间态,β总结了数据控制的衰变γ。

4、多头门控保留

与多头注意[VSP+17]和多尺度保留类似,作者对每个头部应用门控保留,并将输出组合在一起:

其中WG,WO∈Rd×d是可学习的矩阵,GroupNorm对每个头进行规范化,swish gate应用于增加非线性

5、滑动窗口的注意力

滑动窗口注意将注意范围限制为固定的窗口大小C,在推理过程中,KV缓存复杂度可以从O (N)降低到O ©,即内存占用是恒定的,而不是随着序列长度的增加而增加。与多头自注意力类似,可以通过以下方式计算滑动窗口注意的输出:

这里的WQ,WK,WV,WO∈Rd×d为可学习矩阵,窗口因果掩码B控制每个查询只关注距离小于C

实验结果

作者通过增加训练词元的数量来训练一个3B大小的YOCO语言模型。然后与基于transformer的语言模型进行比较。

与LM Eval Harness上的OpenLLaMA-v2-3B、StableLMbase-alpha-3B-v2和StableLM-3B-4E1T进行比较结果如下:

跨端任务的实验结果表明,YOCO与Transformer语言模型取得了相当的结果,同时在训练方面具有可扩展性。

Llama Transformer、带门控的YOCO (YOCOgRet)和带滑动窗口注意力的YOCO (YOCOSWA)使用相同的训练数据和设置训练不同规模(160M、400M、830M、1.4B、2.7B、6.8B、13B)的语言模型。Transformer架构增强了Llama的改进,如RMSNorm、SwiGLU和消除偏差。

与llama优化架构相比,YOCO在160M到13B的范围内获得了相当的性能,这表明YOCO在模型尺寸方面可以有效地扩展。YOCOgRet优于Transformer和YOCOSWA是因为注意力和混合架构,它们的归纳偏差往往是相互补充的。

将YOCO-3B的上下文长度扩展到1M标记,并对长上下文模型在检索和语言建模任务上进行评估。

YOCO- 3b - 1m以近乎完美的精度通过了“Needle-In-A-Haystack”测试,表明YOCO具有较强的长上下文建模能力

下表报告了N needles的精度。N = 1为参考单针检索,N > 1为多针检测。评估以128K长度进行,因为大多数以前的长上下文模型都是用这个长度进行调优的。

YOCO-3B-1M可以用一半的模型尺寸达到相当的性能。与MiniCPM-128K和ChatGLM3-128K相比,YOCO-3B-1M也优于这些语言模型。

下表显示了累积平均负对数似然(NLL)作为上下文长度的函数

NLL随序列长度的增加而降低,表明YOCO可以有效地利用远程依赖进行语言建模。

推理的优势

将YOCOgRet与Transformer进行比较

1、GPU内存

推理内存消耗由模型权重、中间激活和KV缓存三部分组成。

随着上下文长度的增加,KV缓存成为主要的内存瓶颈,而模型权重消耗恒定的内存,表明YOCOgRet减轻了激活成本和KV缓存内存占用。下图显示了Transformer和YOCO在不同长度上的推理内存,由此得出使用YOCO可以显著降低内存成本的结论

下图显示了不同模型大小的每个词元的KV缓存的GPU内存消耗

由于YOCO只缓存一层全局键值对,所以它需要的内存比Transformer大约少L倍。

在预填充阶段,模型并行地对输入进行编码。下图显示了不同长度的预填充延迟,即给定输入提示符在生成第一个结果之前的编码时间

Transformer的时间呈二次增长,而YOCO的时间呈线性增长。即使对于较短的输入长度,例如32K, YOCO仍然可以加速2.87倍

吞吐量表示模型每秒可以处理多少词元,包括预填充时间和生成时间下图显示了Transformer和YOCO在改变上下文长度时的推理吞吐量。

YOCO实现了更高的跨上下文长度的吞吐量。

总结

论文提出了一种用于大型语言建模的解码器-解码器体系结构(YOCO)。与Transformers相比,YOCO具有更好的推理效率和竞争性能。实验结果表明,在各种设置下,YOCO在大型语言模型上取得了良好的效果,即扩大训练词元数量,扩大模型大小,将上下文长度扩大到1M词元。分析结果还表明,YOCO将推理效率提高了几个数量级,特别是对于长序列建模

论文地址:

https://avoid.overfit.cn/post/90e0bd170644476cbccabb039e7105ae

作者:SACHIN KUMAR

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

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

相关文章

全学科知网普刊征稿中!即日提交,月内即可见刊!

在当前的学术环境下,论文发表的压力日益增大。当您需要评职称、申请学位、结项课题或完成其他有期限的学术要求时,快速发表普刊能够确保您及时满足这些需求,提升您的职业竞争力,为您的职业发展需求打下坚实基础。 我处普刊现积极…

我的全新官网

科技语者-探索未来的语言和沟通 (chgskj.cn) 另外我还开放了一个网站科技语者-介绍页 (null.fit)

Java反射(含静态代理模式、动态代理模式、类加载器以及JavaBean相关内容)

目录 1、什么是反射 2、Class类 3、通过Class类取得类信息/调用属性或方法 4、静态代理和动态代理 5.类加载器原理分析 6、JavaBean 1、什么是反射 Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得…

java基础之面向对象的思想

一、面向对象和面向过程的编程思想对比 面向过程:是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的(自己干活)。 面向对象:是一种以对象为中心的编程思想,通过指挥对象实现具体的…

智慧生活:AI工具如何改变我们的工作与生活

文章目录 📑前言一、常用AI工具:便利与高效的结合1.1 语音助手1.2 智能推荐系统1.3 自然语言处理工具 二、创新AI应用:不断突破与发展2.1 医疗诊断AI2.2 智能家居2.3 无人驾驶技术 三、AI工具在人们生活中的应用和影响3.1 生活方式的变化3.2 …

搭建本地yum仓库

步骤 找个地方存你的rpm包 #我创建了一个rpm文件夹存放我的rpm包 makdir -p /opt/repo/rpmcreaterepo 这个很重要,一定要安装 # 我的能连外网,所以直接yum安装,你的自己想办法 yum install createrepo -y创建repodata 安装了createrepo后…

SOA构架介绍

1.SOA定义 SOA面向服务的架构是一种计算机环境设计、开发、部署和管理离散模型的方法,SOA中所有的功能都被定义成立独立的服务,所有的服务通过总线(ESB)或者流程管理连接。这种松耦合的结构使得服务器在交互的过程中无需考虑双方内部细节&am…

RocketMQ(一)

作用 1. 限流削峰 2. 异步解耦 组成 Producer:消息的发送者,生产者;举例:发件人 Consumer:消息接收者,消费者;举例:收件人 Broker:暂存和传输消息的通道&#xff1…

矩阵稀疏扫描 - 矩阵

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、Java代码五、测试用例提示 前言 本人最近再练习算法,所以会发布一些解题思路,希望大家多指教 一、题目描述 如果矩阵中的许多系数都为零,那么该矩阵就是稀…

Rust编程语言的特点及其适合做什么

Rust编程语言的特点 Rust是一门系统级编程语言,它有如下特点。 1. 类C的语言语法 Rust的具体语法和C/C类似,都是由花括号限定代码块,还有一样的控制流关键字,例如if、else、while和for。然而,也并非所有的C或者C关键…

Scratch四级:第07讲 编程数学02

第07讲 编程数学02 教练:老马的程序人生 微信:ProgrammingAssistant 博客:https://lsgogroup.blog.csdn.net/ 讲课目录 常考的数学问题项目制作:“求最大公约数”项目制作:“求最小公倍数”项目制作:“早餐…

RAG讲解

现有的LLM已经具备了理解、生成、逻辑和记忆能力,RAG(Retrieval Augmented Generation)则是为其套上外挂,使LLM能够访问训练数据来源之外的权威知识库,并生成领域特定的内容,而无须重新训练模型。 RAG的优势 经济高效&#xff1a…

Meilisearch使用过程趟过的坑

Elasticsearch 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。 所以,对于中小型项目来说…

opencompass实践

参考教程 https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md 下载opencompass,配置必要的环境之后,解压下载的数据集 cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/ unzip OpenCompassData-co…

如何远程操作服务器中的Python编译器并将运行结果返回到Pycharm

文章目录 一、前期准备1. 检查IDE版本是否支持2. 服务器需要开通SSH服务 二、Pycharm本地链接服务器测试1. 配置服务器python解释器 三、使用内网穿透实现异地链接服务器开发1. 服务器安装Cpolar2. 创建远程连接公网地址 四、使用固定TCP地址远程开发 本文主要介绍如何使用Pych…

RPA正常跑,cmd输入cookies跑不出来,如何解决??

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

SQL-递归查询

运行环境: Mysql8以上,递归查询功能在8以上版本被正式引入 一、SQL递归查询的概念 递归指的是通过调用函数或过程或自身来解决问题的方法,常用于一些具有规律性循环的操作。SQL递归查询是基于一组初始数据,通过递归查询&#xf…

机器人系统ros2-开发实践06-将静态坐标系广播到 tf2(Python)-定义机器人底座与其传感器或非移动部件之间的关系

发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如,最容易推断激光扫描仪中心框架中的激光扫描测量结果。 1. 创建包 首先,我们将创建一个用于本教程和后续教程的包。调用的包learning_tf2_py将依赖于geometry_msgs、pyth…

【机器学习】集成学习在信用评分领域实例

集成学习在信用评分领域的应用与实践 一、引言二、集成学习的概念与原理三、集成学习在信用评分中的应用实例四、总结与展望 一、引言 在当今金融数字化快速发展的时代,信用评分成为银行、金融机构等评估个人或企业信用风险的重要工具。然而,单一的信用评…

WebRTC 中的 ICE 实现

WebRTC 中的 ICE 实现 WebRTC 中的 ICE 实现Candidate 种类与优先级ICE 策略P2P 连接完全锥型 NATIP 限制锥型 NAT端口限制锥型 NAT对称型 NATNAT 类型检测如何进行 NAT 穿越 网络中继TURN 协议中转数据WebRTC 使用 TURN 协议STUN/TURN 服务器的安装与部署 WebRTC 中的 ICE 实现…