高效流式大语言模型(StreamingLLM)——基于“注意力汇聚点”的突破性研究

论文地址:https://arxiv.org/pdf/2309.17453
github地址:https://github.com/mit-han-lab/streaming-llm

1. 研究背景与挑战

随着大语言模型(LLMs)在对话系统、文档摘要、代码补全和问答等领域的广泛应用,如何高效且准确地处理长序列生成成为亟待解决的问题。然而,现有LLMs在流式应用(如多轮对话)中面临两大主要挑战:

挑战一:解码阶段内存消耗巨大

  • 问题描述: Transformer架构的LLMs在解码阶段会缓存所有先前token的键值对(KV),导致内存消耗随序列长度呈二次增长,显著增加了解码延迟。

    • 图示说明: 如下图1(a)所示,密集注意力机制(密集注意力)需要存储所有token的KV,导致时间复杂度为 O ( T 2 ) O(T^2) O(T2),且缓存大小随文本长度增加而增加。当文本长度超过预训练长度时,性能会下降。

    图1:StreamingLLM与现有方法的对比
    图1:StreamingLLM与现有方法的对比。

挑战二:模型对长文本的泛化能力有限

  • 问题描述: 现有模型在处理超过预训练时设定的注意力窗口长度的序列时,性能会显著下降。
    • 图示说明: 如下图1(b)所示,窗口注意力机制(窗口注意力)仅缓存最近一定数量的token的KV,虽然在推理过程中效率较高,但一旦序列长度超过缓存大小,性能会急剧下降。

2. 现有方法的局限性

  • 窗口注意力:
    • 优点: 内存使用恒定,解码速度稳定。
    • 缺点: 一旦序列长度超过缓存大小,性能会崩溃。例如,移除第一个token的KV会导致模型性能大幅下降。
  • 滑动窗口重计算:
    • 优点: 在长文本上表现良好。
    • 缺点: 由于在上下文重计算中需要进行二次注意力计算,其时间复杂度为 O ( T L 2 ) O(TL^2) O(TL2),导致速度非常慢,不适用于实际流式应用。

3. 注意力汇聚点现象的发现与解释

为了解决窗口注意力的局限性,研究人员观察到一个有趣的现象:注意力汇聚点(Attention Sink)

3.1 注意力汇聚点现象
  • 现象描述: 自回归LLMs会分配大量注意力分数给初始token,无论其与语言建模任务的语义相关性如何。

    • 图示说明: 如下图2所示,在Llama-2-7B模型中,初始token在所有层和注意力头中均获得了较高的注意力分数。

    图2:Llama-2-7B模型中平均注意力logits的可视化
    图2:Llama-2-7B模型中平均注意力logits的可视化。

  • 原因分析:

    • SoftMax函数的特性: SoftMax函数要求所有上下文token的注意力分数之和为1。因此,即使当前查询在许多先前token中没有强匹配,模型仍然需要将这些不必要的注意力值分配到某些token上。
    • 初始token的全局可见性: 由于自回归语言建模的性质,初始token对所有后续token都是可见的,这使得它们更容易被训练成为注意力汇聚点,捕获不必要的注意力。
3.2 注意力汇聚点对模型性能的影响
  • 实验验证:

    • 将前四个token替换为换行符,模型仍然会显著关注这些初始换行符。
    • 重新引入这些初始token后,语言建模的困惑度(perplexity)恢复到与原始初始token相当的水平。
    • 结论: 初始token的绝对位置比其语义价值更重要。
  • 对窗口注意力的影响:

    • 移除初始token的KV会导致SoftMax函数分母发生显著变化,导致注意力分数分布偏离正常推理设置,从而导致模型性能下降。

4. StreamingLLM的提出与创新

基于上述分析,研究人员提出了StreamingLLM,一种高效的框架,使LLMs能够处理无限长度的文本,而无需任何微调。

4.1 StreamingLLM的核心思想
  • 利用注意力汇聚点: StreamingLLM利用注意力汇聚点具有高注意力值的特点,通过保留它们,可以将注意力分数分布保持在接近正常的水平。

  • 具体方法:

    • 保留注意力汇聚点token的KV: 仅保留少量初始token(例如4个)的KV作为注意力汇聚点。
    • 结合滑动窗口KV: 将注意力汇聚点token的KV与滑动窗口的KV结合起来,以锚定注意力计算并稳定模型性能。

    图4:StreamingLLM的KV缓存
    图4:StreamingLLM的KV缓存。

4.2 StreamingLLM的优势
  • 高效性:

    • 与滑动窗口重计算基线相比,StreamingLLM实现了高达 22.2 × 22.2\times 22.2×的速度提升。
  • 稳定性:

    • 如下图3所示,StreamingLLM在处理长达20K tokens的文本时,其困惑度与重计算基线几乎一致,证明了其稳定性能。

    图3:StreamingLLM在20K tokens文本上的语言建模困惑度
    图3:StreamingLLM在20K tokens文本上的语言建模困惑度。

  • 可扩展性:

    • StreamingLLM使包括Llama-2、MosaicML、MPT、Falcon和Pythia在内的模型能够可靠地建模高达400万tokens的文本,甚至更多。
4.3 预训练中加入Sink Token的改进
  • 问题: 现有模型通常使用多个初始token作为注意力汇聚点,而不是仅使用一个。

  • 解决方案:

    • 在所有训练样本的开头添加一个可学习的占位符token(Sink Token)作为专门的注意力汇聚点。
  • 实验结果:

    • 如下图7所示,添加Sink Token后,模型在所有层和注意力头中均会一致地关注Sink Token,有效收集冗余注意力。
    • 如下图6所示,添加Sink Token不会对模型收敛和后续性能产生负面影响。
    • 如下图5所示,使用Sink Token训练的模型在流式应用中的困惑度更低,仅需添加Sink Token即可实现稳定的流式性能,而无需其他初始token。

    图7:有无Sink Token的模型在平均注意力logits上的可视化
    图7:有无Sink Token的模型在平均注意力logits上的可视化。

5. 实验结果与分析

5.1 长文本语言建模
  • StreamingLLM在处理长达400万tokens的文本时,其困惑度保持稳定,证明了其在各种LLM家族和规模下的有效性。
5.2 预训练中加入Sink Token的效果
  • 预训练中加入Sink Token不会损害模型性能,并且在流式应用中表现更佳。
5.3 流式问答任务
  • StreamingLLM在模拟真实世界聊天设置的流式问答任务中表现良好,精度与单样本基线相当,而窗口注意力方法由于输入长度超过缓存大小而导致精度较低。
5.4 消融研究
  • 初始token数量: 引入四个初始token作为注意力汇聚点足以,添加更多token对性能提升有限。
  • 缓存大小: 增加缓存大小并不总是能降低语言建模困惑度,表明这些模型可能没有充分利用其接收到的上下文。
5.5 效率结果
  • StreamingLLM的解码速度随缓存大小线性增长,而滑动窗口重计算基线的解码延迟呈二次增长。StreamingLLM实现了高达 22.2 × 22.2\times 22.2×的加速,同时保持了与重计算基线相似的内存占用。

6. 结论与展望

  • 结论: StreamingLLM通过引入注意力汇聚点,使LLMs能够高效处理无限长度的文本,解决了现有方法在流式应用中的局限性。
  • 未来方向:
    • 进一步研究如何更好地利用缓存中的上下文信息。
    • 探索如何将StreamingLLM与上下文扩展技术相结合,以进一步提高模型性能。

7. 总结图示

图5:StreamingLLM在超长文本上的语言建模困惑度
图5:StreamingLLM在超长文本上的语言建模困惑度。

图10:滑动窗口重计算基线与StreamingLLM的每token解码延迟和内存使用对比
图10:滑动窗口重计算基线与StreamingLLM的每token解码延迟和内存使用对比。

8. 附加说明

  • 应用场景: StreamingLLM特别适用于流式应用,如多轮对话、实时助手等。
  • 局限性: StreamingLLM不扩展模型的上下文窗口或增强其长期记忆能力,不适用于需要长期记忆和广泛数据依赖的任务。
  • 社会影响: StreamingLLM提高了LLMs的效率,使其在教育、医疗和客户服务等领域更具可访问性,但同时也带来了生成错误信息和有偏见内容的风险,需要谨慎使用。

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

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

相关文章

学习数据结构(2)空间复杂度+顺序表

1.空间复杂度 (1)概念 空间复杂度也是一个数学表达式,表示一个算法在运行过程中根据算法的需要额外临时开辟的空间。 空间复杂度不是指程序占用了多少bytes的空间,因为常规情况每个对象大小差异不会很大,所以空间复杂…

【测试】UI自动化测试

长期更新,建议关注收藏点赞! 目录 概论WEB环境搭建Selenium APPAppium 概论 使用工具和代码执行用例。 什么样的项目需要自动化? 需要回归测试、自动化的功能模块需求变更不频繁、项目周期长(功能测试时长:UI自动化测…

IoTDB 2025 春节值班与祝福

2025 春节快乐 瑞蛇迎吉庆,祥光映华年,2025 春节已近在眼前。社区祝福 IoTDB 的所有关注者、支持者、使用者 2025 新年快乐,“蛇”来运转! IoTDB 团队的春节放假时间为 2025 年 1 月 27 日至 2 月 4 日,1 月 25 日、26…

想品客老师的第七天:闭包和作用域

闭包之前的内容写在这里 环境、作用域、回收 首先还是数据的回收问题,全局变量一般都是通过关闭页面回收的;而局部变量的值不用了,会被自动回收掉 像这种写在全局里的就不会被主动回收捏: let title 荷叶饭function fn() {ale…

如何在IDEA社区版Service面板中管理springboot项目

1、开启service仪表盘 2、在service仪表盘中,添加启动类配置项,专业版是SpringBoot 、社区版是application。 3、控制台彩色日志输出 右键启动类配置项,添加虚拟机参数 -Dspring.output.ansi.enabledALWAYS

网盘资源查找工具---AI功能

01 软件介绍 这是一款融入了ai技术的网盘搜索神器,可以让你更快,更精准的找到自己需要的文件,不管你是找影视,音乐,还是找软件或者学习资料都可以,欢迎前来使用。 02 功能展示 该软件非常简洁&#xff…

【2025年数学建模美赛E题】(农业生态系统)完整解析+模型代码+论文

生态共生与数值模拟:生态系统模型的物种种群动态研究 摘要1Introduction1.1Problem Background1.2Restatement of the Problem1.3Our Work 2 Assumptions and Justifications3 Notations4 模型的建立与求解4.1 农业生态系统模型的建立与求解4.1.1 模型建立4.1.2求解…

FPGA 使用 CLOCK_LOW_FANOUT 约束

使用 CLOCK_LOW_FANOUT 约束 您可以使用 CLOCK_LOW_FANOUT 约束在单个时钟区域中包含时钟缓存负载。在由全局时钟缓存直接驱动的时钟网段 上对 CLOCK_LOW_FANOUT 进行设置,而且全局时钟缓存扇出必须低于 2000 个负载。 注释: 当与其他时钟约束配合…

蓝桥杯3518 三国游戏 | 排序

题目传送门 这题的思路很巧妙,需要算出每个事件给三国带来的净贡献(即本国士兵量减其他两国士兵量)并对其排序,根据贪心的原理累加贡献量直到累加结果不大于0。最后对三国的胜利的最大事件数排序取最值即可。 n int(input()) a …

【redis初阶】redis客户端

目录 一、基本介绍 二、认识RESP(redis自定的应用层协议名称) 三、访问github的技巧 四、安装redisplusplus 4.1 安装 hiredis** 4.2 下载 redis-plus-plus 源码 4.3 编译/安装 redis-plus-plus 五、编写运行helloworld 六、redis命令演示 6.1 通用命令的…

LLM - 大模型 ScallingLaws 的设计 100B 预训练方案(PLM) 教程(5)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145356022 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scalin…

HttpClient学习

目录 一、概述 二、HttpClient依赖介绍 1.导入HttpClient4依赖 2.或者导入HttpClient5依赖 3.二者区别 三、HttpClient发送Get请求和Post请求测试 (一)通过HttpClient发送Get请求 (二)通过HttpClient发送Post请求 一、概述 HttpClient是 Apache 软件基金会提供的一…

开源先锋DeepSeek-V3 LLM 大语言模型本地调用,打造自己专属 AI 助手

DeepSeek-V3是一个强大的混合专家 (MoE) 语言模型,总共有 671B 个参数。为了实现高效的推理和经济高效的训练,DeepSeek-V3 采用了多头潜在注意力机制 (MLA) 和 DeepSeekMoE 架构,这些架构在 DeepSeek-V2 中得到了彻底的验证。此外&#xff0c…

喜报丨迪捷软件入选2025年浙江省“重点省专”

根据《浙江省经济和信息化厅 浙江省财政厅关于进一步支持专精特新中小企业高质量发展的通知》(浙经信企业〔2024〕232号)有关要求,经企业自主申报、地方推荐、材料初审以及专家评审等程序,浙江省经济和信息化厅发布了2025年浙江省…

Golang Gin系列-8:单元测试与调试技术

在本章中,我们将探讨如何为Gin应用程序编写单元测试,使用有效的调试技术,以及优化性能。这包括设置测试环境、为处理程序和中间件编写测试、使用日志记录、使用调试工具以及分析应用程序以提高性能。 为Gin应用程序编写单元测试 设置测试环境…

深度学习 Pytorch 单层神经网络

神经网络是模仿人类大脑结构所构建的算法,在人脑里,我们有轴突连接神经元,在算法中,我们用圆表示神经元,用线表示神经元之间的连接,数据从神经网络的左侧输入,让神经元处理之后,从右…

Arduino大师练成手册 --控制 OLED

要在 Arduino 上使用 U8glib 库控制带有 7 个引脚的 SPI OLED 显示屏,你可以按照以下步骤进行: 7pin OLED硬件连接 GND:连接到 Arduino 的 GND 引脚。 VCC:连接到 Arduino 的 5V 引脚。 D0(或 SCK/CLK)…

CVE-2024-23897-Jenkins任意文件读取漏洞复现

content Jenkins是什么CVE-2024-23897总结修复建议 Jenkins是什么 Jenkins是一人基于Java开发的、可扩展的持续集成引擎,用于持续、自动地构建/测试软件项目,可以监控一些定时执行的任务。 官网文档: Jenkins是一款开源 CI&CD 软件&…

Lua 环境的安装

1.安装Lua运行环境 本人采用的是在windows系统中使用cmd指令方式进行安装,安装指令如下: winget install "lua for windows" 也曾使用可执行程序安装过,但由于电脑是加密电脑,最后都已失败告终。使用此方式安装可以安…

基于微信小程序的网上订餐管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…