KeyFormer:使用注意力分数压缩KV缓存

news2024/12/17 9:39:44

Keyformer: KV Cache Reduction through Key Tokens Selection for Efficient Generative Inference

202403,发表在Mlsys

Introduction

优化KV cache的策略,主要是集中在系统级别的优化上,比如FlashAttention、PagedAttention,它们能够优化KV缓存的访问,但是没有减少缓存的读取。即使有MQA、GQA这样,能够真正减少缓存访问量的技术,也是需要在预训练阶段就用上。

有些其他丢弃不重要KV的方式,比如滑动窗口(下图b),它会限制模型捕获全面语义的能力

基于某些token比其他token更有意义的观察,Keyformer提出了一种丢弃不重要token的KV的方式。下图是这种方法和其他方法的对比。

具体来说,观察到90%的注意力权重会集中到关键token的小子集上。这些token对于LLM理解上下文至关重要,但可能超出了滑动窗口注意力的范围。

Keyformer引入了一种混合注意力方法,如上图(d)所示,它在生成下一个token时结合了最近的token和前面的关键token。

实验表明,Keyformer在与H2O等方法相比,有显著改进。这是因为Keyformer在识别关键标记时考虑了被丢弃标记的重要性,而不同于H2O仅基于注意力分数来识别“重头标记”。这句话有点难懂,还看不出来和H2O相比有什么优势

具体步骤

  • 在生成过程中,Keyformer 会在prefill阶段丢弃掉 n - k 个 token,保持 k 个 token 用于后续处理,从而避免显存的过度扩展。

  • 为了适应丢弃 token 后可能出现的挑战,Keyformer 引入了logits 正则化,即通过向未归一化的 logits 添加噪声来增强模型的鲁棒性。这可以帮助模型在推理时识别关键的 token,即使某些上下文信息缺失。

  • Keyformer 选择使用 Gumbel 分布 来进行 logits 调整。Gumbel 分布有一个很好的特性,即它倾向于描述一组样本中的最大值,因此非常适合用于识别关键 token。也就是给归一化前的logits添加Gumbel分布的噪声。

  • Keyformer有一个大小为w的滑动窗口,用于保留最近的w个token。因此每次decode用到的KV就是k-w个关键token的KV和w个最近token的KV

  • 针对每一个token,有一个分数函数:

    其中是温度,和解码采样一样,温度越高越平均,温度越低越不平均;是Gumbel噪声;就是token的注意力分数。这个分数函数用来衡量token对当前解码的重要程度

  • 这个注意力分数每次decode都累积

这个方法需要在显存中一直保存所有的KV缓存,只不过是在计算时只取部分缓存。没有减少显存占用,但减少了访存和计算。

实验部分

baseline:以full attention作为golden标准,目标是达到它的99%-99.9%;以滑动窗口注意力和H2O这两种方法进行比较。

实验从两个方面进行比较,一个是使用了多少比例的KV缓存,能够达到可接受的正确率;另一个是和baseline相比,吞吐量上有多少提升

正确率的实验结果:

横坐标百分之多少,表示保留了百分之多少的KV缓存。显示使用了70%的缓存,就能达到使用全部缓存的99%的效果。

在吞吐量提升的实验上,由于前面实验表明H2O如果只使用50%缓存的情况下,准确率是明显不如keyformer的;因此为了公平起见,就将keyformer设置为保留50% cache,而H2O保持90% cache。

那么显然keyformer的吞吐量会高于H2O

还做了消融实验,主要是这几点:

  1. 计算每个token得分时,是对每个层进行累积分数还是每个层各保留一个分数:结果表明,每个层各保留一个分数的准确率更高

  2. 位置编码使用原始文本中的位置进行编码,还是使用丢弃非关键token后的位置进行编码:前者更好

  3. 不同正则化方式的影响,比较了无正则化、恒定数正则化、高斯正则化和Gumbel正则化,发现高斯正则化还不如不使用正则化,而显然是Gumbel正则化分数最高

  4. 滑动窗口大小在比例为20%-30%时效果最好

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

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

相关文章

3.9 网际控制报文协议ICMP

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言1 ICMP报文的封装2 ICMP差错报告报文的类型3 不应发送ICMP差错报告报文的情况4 常用的ICMP询问报文类型5 ICMP的应用 前言 网际控制报文协议(ICMP&#xff09…

东北大学《2024年839自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《东北大学839自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题

百度智能云千帆AppBuilder升级,百度AI搜索组件上线,RAG支持无限容量向量存储!

百度智能云千帆 AppBuilder 发版升级! 进一步降低开发门槛,落地大模型到应用的最后一公里。在千帆 AppBuilder 最新升级的 V1.1版本中,企业级 RAG 和 Agent 能力再度提升,同时组件生态与应用集成分发更加优化。 • 企业级 RAG&am…

就业相关(硕士)

一、嵌入式 1.机器人行业 1.1 大致情况 要做机器人行业,主要技术栈是运动控制、深度学习、强化学习、具身智能等,主要求职方向有运动控制算法工程师和机器人算法工程师等等。大致薪资在30w到50w不等,主要看方向(双211&#xff…

Selenium操作指南

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 大家好,今天带大家一起系统的学习下模拟浏览器运行库Selenium,它是一个用于Web自动化测试及爬虫应用的重要工具。 Selenium测试直接运行在…

OpenCV相机标定与3D重建(11)用于在图像上绘制世界坐标系的三条轴函数drawFrameAxes()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从姿态估计绘制世界/物体坐标系的轴。 cv::drawFrameAxes 是 OpenCV 库中的一个函数,用于在图像上绘制世界坐标系的三条轴&#xff0…

spring学习(XML中定义与配置bean(超详细)。IoC与DI入门spring案例)

目录 一、配置文件(XML)中定义与配置bean。 (1)bean的基础配置。(id、class) (2)bean的别名配置。 1、基本介绍。 2、demo测试。 3、NoSuchBeanDefinitionException! (3)…

Docker容器编排与Docker Compose

1. Docker Compose介绍与基础概念 Docker Compose是一个用于定义和运行多容器Docker应用的工具。通过Compose,用户可以用YAML文件来定义多个容器的服务、网络、存储等配置,并通过一个命令来启动、停止和管理这些容器。它简化了多容器应用的管理&#xf…

鸿蒙项目云捐助第七讲鸿蒙App应用的首页推荐模块布局的实现

鸿蒙项目云捐助第七讲鸿蒙App应用的首页推荐模块布局的实现 最后设置首页的推荐模块,参考模板如下图所示。 一、首页热门推荐模块的实现 对于热门推荐模块,先有上面的小标题栏,这里的标题栏也有一个小图标,首先从“百度图库”中…

MySQL八股-MVCC入门

文章目录 当前读(加锁)快照读(不加锁)MVCC隐藏字段undo-log版本链A. 第一步B.第二步C. 第三步 readview MVCC原理分析RCA. 先来看第一次快照读具体的读取过程:B. 再来看第二次快照读具体的读取过程: RR隔离级别 当前读…

基于单片机的无绳跳绳设计

基于单片机设计了一款无绳跳绳,采用传感器代替了绳子的摆动,从而实现了模拟跳绳的功能。其研究的方法是:以单片机作为这次设计的核心,它的外围包含有传感器模块、按键模块、显示模块、语音播报模块及电源模块等。本设计采用STM32芯…

【图像处理】利用numpy实现直方图均衡、自适应直方图均衡、对比度受限自适应直方图均衡

直方图均衡化是一种在图像处理技术,通过调整图像的直方图来增强图像的对比度。 本博客不利用opencv库,仅利用numpy、matplotlib来实现直方图均衡、自适应直方图均衡、对比度受限自适应直方图均衡 直方图均衡 包括四个流程 计算图像RGB三通道的归一化直…

Azure Function流式返回

最近用azure function做了一个api和llm交互,需要流式返回。但是默认不支持流返回,搜索了一下。记录。 官方文档:https://techcommunity.microsoft.com/blog/azurecompute/azure-functions-support-for-http-streams-in-python-is-now-in-prev…

【软件工程】简答题系列(一)(山东大学·软院考试专属)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

WebGIS城市停水及影响范围可视化实践

目录 前言 一、相关信息介绍 1、停水信息的来源 2、停水包含的相关信息 二、功能简介 1、基础小区的整理 2、停水计划的管理 三、WebGIS空间可视化 1、使用到的组件 2、停水计划的展示 3、影响小区的展示 4、实际效果 四、总结 前言 城市停水,一个看似…

数据结构,链表的简单使用

任意位置删除&#xff1a; void Any_Del(LinkListPtr h,int a)//任意删 {if(NULLh||a>h->len){printf("删除失败");}LinkListPtr ph;for(int i0;i<a-1;i){pp->next;}LinkListPtr p2p;p2p2->next;p->nextp->next->next;free(p2);p2NULL;h-&g…

组织空转数据(人类+小鼠)

空间转录组&#xff08;Spatial Transcriptomics&#xff09;是一种新兴的高通量基因组学技术&#xff0c;它允许我们在组织切片中同时获取基因表达信息和细胞的空间位置信息。其可以帮助我们更好地理解细胞在组织中的空间分布和相互作用&#xff0c;揭示组织发育、器官功能和疾…

人工智能增强的音频和聊天协作服务

论文标题&#xff1a;AI-enabled Audio and Chat Collaboration Services 中文标题&#xff1a;人工智能增强的音频和聊天协作服务 作者信息&#xff1a; Emil P. Andersen, Norwegian Defence Research Establishment (FFI), Kjeller, NorwayJesper R. Goksr, Sindre E. Ha…

【操作系统1】一篇文章便可入门操作系统

操作系统 (Operating System,OS)是一种系统软件&#xff0c;它负责管理计算机的硬件和软件资源。它的主要任务是组织和调度计算机的工作&#xff0c;并分配资源给用户和其他软件。操作系统为用户和软件提供了方便的接口和环境。它是计算机系统中最基本的软件之一。 一、操作系…

51c嵌入式~单片机~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、STM32代码远程升级之IAP编程 IAP是什么 有时项目上需要远程升级单片机程序&#xff0c;此时需要接触到IAP编程。 IAP即为In Application Programming&#xff0c;解释为在应用中编程&#xff0c;用户自己的…