Mamba解读(FlashAttention,SSM,LSSL,S4,S5,Mamba)

  • Sequence model
  • Scale and Efficiency
    • FlashAttention
      • Motivation
      • Method
      • FlashDecoding
    • Mamba
      • State-Space Models(SSM)
      • Selective State Space Models(Mamba)

Sequence model

seq2seq任务将 输入序列 x ( t ) x(t) x(t) 映射为 输出序列 y ( t ) y(t) y(t),其中序列可以是离散的(如文本),也可以是连续的(如音频)。在大多数情况下我们使用离散的(连续序列可以经过采样得到离散序列)
在这里插入图片描述

常见序列建模任务seq2seq架构:

RNN:无限的context window,输入seq长度为N,内存占用 d ( d < < N ) d(d<<N) dd<<N

  • Training: O ( N ) O(N) O(N),不可并行训练。
  • Inference:对每个增加的token的推理时间恒定。
    在这里插入图片描述

在这里插入图片描述

Transmformer:有限的context window,输入seq长度为N,内存占用 N 2 N^2 N2

  • Training: O ( N 2 ) O(N^2) O(N2),可并行训练,使用self-attention。
  • Inference: O ( N ) O(N) O(N),对每个增加的token的推理时间会平方增加(如增加第N个token,需要将其和前N-1个token进行计算)。

在这里插入图片描述

因此我们希望构造一个Model可以实现:

  • 像Transformer一样可并行训练,又可以像RNN一样线性缩放到长序列。
  • 同时在推理时,像RNN一样,对每个增加的token,增加的推理时间恒定。

这就引出了State Space Model (SSM)!

Scale and Efficiency

Model的Scale Law在最近几年展现出巨大的涌现能力,随之而来的挑战就是Efficiency效率问题。两个解决方案是,FlashAttentionMamba

在这里插入图片描述

FlashAttention

Motivation

Transformer由Endoer组成(Attention+MLP),根据Attention的原理,Attention scalessequence length N N N的平方 O ( N 2 ) O(N^2) O(N2),加倍sequence length意味着4倍的推理时间和内存占用。
在这里插入图片描述

对于Modeling long sequence contextGPU内存读写是制约Attention计算效率的瓶颈,FlashAttention可以减少GPU内存读写,同时支持更长的sequence tokens交互:可以实现更快、更长上下文的Transformer。现在已经广泛应用于各大深度学习库,如Torch、Hggingface等。
在这里插入图片描述

在FlashAttention之前,已经有很多算法,尝试解决Modeling long sequence问题:核心思路都是提出近似N^2的Attention操作,损失一些Attention的质量,来提升计算速度。但工业界训练LLM时,并不认可这些花哨的近似方法,原因如下:(1)这些理论上的加速Attention的方法使得模型质量更差;(2)这些方法,只是在理论上减少了浮点数运算,但不减少GPU的IO,真正的瓶颈是Attention中large matrix的IO速度,并不会真正的加速计算和节省GPU内存!
在这里插入图片描述

Method

为了解决GPU内存读写引发的Attention效率问题,我们必须了解硬件:(下图是GPU的成千上万个SM计算单元中的一个)

在这里插入图片描述

  • HBM是高带宽存储器,即GPU的内存(GPU Memory)。数据处理速度慢,但存储空间大。
  • Compute是GPU的计算组件,用于执行矩阵乘法/加法等。
  • SRAM是GPU的Cache,用于HBMCompute之间的数据缓存。数据处理速度快,但存储空间小。

GPU工作时:①data传入HBM,②data从HBM传入SRAM和Compute进行运算,③result再写回HBM。问题在于HBMSRAM的传输速度很慢

在这里插入图片描述

FlashAttention的核心思想减少GPU中HBM和SRAM之间的内存读写(Tiling 和 Recomputation)

  • Softmax Tiling:将Q K V分块,从HBM送入SRAM计算Attention(使用ReScaling技巧得到Local分块计算的正确Attention结果,否则Softmax除的那个系数将是错误的)。
    在这里插入图片描述

  • Backward Recomputation:backward计算梯度时需要forward时Attention输出的计算结果。但我们forward后不存储attn_matrix,只存储softmax除的系数,而是在backward时重新计算attn_matrix。因为重新计算is cheap,GPU读写is expensive! 因此即使计算量增加了,但总体速度还是提升了。
    在这里插入图片描述

FlashAttention-2FlashAttention-1 的基础上进行了并行优化,将speed和sequence length都提升了2倍。

在这里插入图片描述

FlashDecoding

当我们做Long squence的Attention时,仅仅用FlashAttention分块计算,KV Cache可能依然非常的长(包含history context),而Q非常的短(只有几个tokens)。因此我们使用FlashDecoding按照seq_len维度进行划分KV,和FlashAttention一样分块计算,只是分的块更加细粒度了,这样可以进一步提升GPU的并行处理能力。
在这里插入图片描述

Mamba

虽然FlashAttention可以优化Transformer的速度和内存占用,但Transformer本质仍然是 O ( N 2 ) O(N^2) O(N2)的模型(N是sequence length),FlashAttention没有从本质降低计算量,在推理时依然需要保持KV Cache,这是令人头疼的。因此我们希望从本质出发,去寻找一个更加优秀的结构,去替代Attention:

在这里插入图片描述

  • RNN:可以处理无限的sequence lengthsequence length就是timestep大小),训练慢(需要沿着sequence length逐个计算,每个token计算都进行一次backword),推理快(每个timestep的隐藏状态可以重用,可并行)。

在这里插入图片描述
在这里插入图片描述

相较于Attention,RNN的优点是在推理生成每个token输出时,只需要考虑之前的隐藏状态和当前的输入。 它可以防止重新计算所有先前的隐藏状态,而这正是 Attention 所做的。缺点:快速遗忘。如最后一个隐藏状态在生成名称“Maarten”时,可能不再包含有关单词“Hello”的信息。 随着时间的推移,RNN 往往会忘记信息,因为它们只考虑先前的一个状态。
在这里插入图片描述

  • Attention:不能处理无限长度(存储/时间和sequence length成平方关系 O ( N 2 ) O(N^2) O(N2)),训练快(只需要一次矩阵乘法,可并行),推理慢(需要计算每个注意力权重)。

在这里插入图片描述
缺点: 当生成下一个标记时,即使我们已经生成了一些前面的标记,我们也需要重新计算整个序列的Attention。
在这里插入图片描述

  • SSM:可以处理无限长度( O ( N ) O(N) O(N)),训练快,推理快。由state equation状态方程output equation输出方程组成。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

State-Space Models(SSM)

在这里插入图片描述

state equation状态方程:矩阵A和矩阵B分别控制着 当前状态 h ( t ) h(t) h(t) 和 输入 x ( t ) x(t) x(t) 如何影响状态的变化到 h ′ ( t ) h'(t) h(t)
在这里插入图片描述
output equation输出方程:描述了状态 h ( t ) h(t) h(t) 如何转换为输出 y ( t ) y(t) y(t)的一部分 (通过矩阵C),以及输入 x ( t ) x(t) x(t)如何影响输出 y ( t ) y(t) y(t)(通过矩阵D)
在这里插入图片描述

上述的A,B,C,D都是可学习的参数

将上述的两个方程整合在一起,得到了如下的结构:
在这里插入图片描述
让我们逐步了解一般技术,以了解这些矩阵如何影响学习过程:

step1:假设我们有一些输入信号 x(t),该信号首先乘以矩阵 B,该矩阵描述了输入如何影响系统。
在这里插入图片描述
step2:更新后的状态(类似于神经网络的隐藏状态)是一个包含环境核心“知识”的潜在空间。 我们将状态与矩阵 A 相乘,矩阵 A 描述了所有内部状态如何连接,因为它们代表了系统的底层动态。(您可能已经注意到,矩阵 A 在创建状态表示之前应用,并在状态表示更新后更新)
在这里插入图片描述
step3:然后,我们使用矩阵 C 来描述如何将状态转换为输出。
在这里插入图片描述
step4:最后,我们可以利用矩阵 D 提供从输入到输出的直接信号。 这通常也称为跳跃连接。
在这里插入图片描述这两个方程共同旨在根据观测数据预测系统的状态。 由于输入预计是连续的,因此 SSM 的主要表示是连续时间表示。

在这里插入图片描述

Mamba 基础讲解【SSM,LSSL,S4,S5,Mamba】
Mamba复现与代码解读

Selective State Space Models(Mamba)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
S4将整个history_context总结为一个fixed_context,而Mamba提出的Selective机制,依然存储整个history_context,但选择将部分history_context总结为一个fixed_context
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

每日两题 / 1.两数之和 49.字母异位词分组(leetcode热题100)

1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 暴力解法&#xff1a; O ( N 2 ) O(N^2) O(N2)遍历数组&#xff0c;找两个数相加为target O ( N ) O(N) O(N)解法&#xff1a;将所有数排序&#xff0c;并记录这些数的下标&#xff0c;双指针从左右向中间走。指向的两数…

吴恩达深度学习笔记:深层神经网络(Deep Neural Networks)4.1-4.4

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第四周&#xff1a;深层神经网络(Deep Neural Networks)4.1 深层神经网络&#xff08;Deep L-layer neural network&#xff09;4.2 前向传播和反向传播&#xff08;Forward and backward pro…

vscode 重命名很慢或失败 vscode renames are slow

网上问题&#xff0c; 插件问题&#xff08;我遇见的排除&#xff0c;不是&#xff09;被其他程序占用问题&#xff0c;&#xff08;我这边是这个&#xff09; 解决方案&#xff1a; 打开【资源管理器】&#xff0c;使用火绒 或其他软件&#xff0c;查看文件夹 or 文件 被哪个…

智慧公厕系统3.0有哪些新功能呢

随着科技的不断进步&#xff0c;智慧公厕系统也在不断升级和完善。最新推出的智慧公厕系统3.0&#xff0c;集成了一系列创新功能&#xff0c;为城市公共卫生设施管理带来了全新的体验和便利。让我们一起来看看智慧公厕系统3.0有哪些新功能吧。 1、云端管理平台&#xff1a;智慧…

家用洗地机哪个牌子好?四大热销机型推荐,值得推荐!

随着科技的进步&#xff0c;洗地机在日常生活中能够帮助人们省时省力地打扫卫生&#xff0c;但市面上出现了各种各样的洗地机&#xff0c;好坏参差不齐&#xff0c;选择一个好品牌的洗地机非常重要&#xff0c;因为它们有着可靠的质量保证。那市面上如此众多的洗地机品牌&#…

8×8点阵数码管显示驱动/大电流数码管驱动IC-VK16K33C SOP20

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK16K33C 封装形式&#xff1a;SOP20 概述 VK16K33C是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片&#xff0c;内部集成有数据锁 存器、键盘扫描、LED 驱动模块等电路。数据通过I2C通讯接口与MCU通信。SE…

为什么电脑越用越慢!

电脑随着时间推移逐渐变慢是一个常见的现象,其背后涉及多种原因。以下是导致电脑运行速度变慢的几个主要因素: 系统资源消耗增加 软件更新与新增应用:随着软件版本的更新和新应用程序的安装,它们往往对硬件资源的需求更高,尤其是对处理器、内存和硬盘的要求。这些新软件可…

Java毕业设计 基于SpringBoot vue流浪动物救助网站

Java毕业设计 基于SpringBoot vue流浪动物救助网站 SpringBoot 流浪动物救助网站 功能介绍 首页 图片轮播 动物领养/捐赠 留言 论坛 发布帖子 公告信息 商品信息 添加购物车 立即购买 寻宠请求 购物车 注册登录 个人中心 余额充值 收货地址 动物收藏 动物领养审核 商品订单 …

6AV6643-5CB10-0BN0触摸屏

6AV6643-5CB10-0BN0触摸屏 6AV6643-5CB10-0BN0触摸屏 6AV6643-5CB10-0BN0触摸屏 商品编号(市售编号) 6AV6643-5CB10-0BN0 产品说明 SIMATIC MP 277 8" 触摸屏 多功能面板带剩磁存储器 7.5" TFT 显示屏 6MByte 项目组态存储器 可项目组态&#xff0c;利用 W…

R语言绘图 | 散点小提琴图

原文链接&#xff1a;R语言绘图 | 散点小提琴图 本期教程 写在前面 本期的图形来自发表在Nature期刊中的文章&#xff0c;这样的基础图形在日常分析中使用频率较高。 获得本期教程数据及代码&#xff0c;后台回复关键词&#xff1a;20240405 绘图 设置路径 setwd("You…

【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)

目录 题目描述思路及实现方式一&#xff1a;动态规划法思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式二&#xff1a;中心扩展法思路代码实现Java版本C语言版本Python3版本 复杂度分析 总结相似题目 标签(题目类型)&#xff1a;回文串、动态规划 题目描述 给定一…

【C++】unordered 系列关联式容器

文章目录 1. unordered 系列关联式容器2. unordered_map2.1 unordered_map 的文档介绍2.2 unordered_map 的接口说明 3. unordered_set4. 在线 OJ 1. unordered 系列关联式容器 在 C 98 中&#xff0c;STL 提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可…

mybatis(4) 代理机制以及小技巧

mybatis 1、 问题2、使用3、#与$3.1 例子3.2什么情况下必须使用${} 4、别名机制5 、Mapper配置6、配置模板文件7、使用自动生成的主键 1、 问题 在上一篇mybtis的web项目中&#xff0c;我们最后有一个问题没有解决&#xff0c;就是dao的实现类&#xff0c;其代码很类似&#x…

Mybase 8.x 下载安装试用详细教程(Windows)

一、软件介绍 MyBase是一款本地笔记软件&#xff0c;它能够帮助你管理和组织大量的信息。 二、下载安装 下载&#xff1a;点我去下载页面 Mybase 软件目前主要实现了两种版本&#xff1a;Mybase Desktop (桌面版) 和 Mybase Server (网络版)&#xff1a; 桌面版软件运行于 …

零售行业数字化广告评价标准 - 《IAB/MRC零售(广告)测量指南》

IAB/MRC零售&#xff08;广告&#xff09;测量指南 --- 最新标准&#xff0c;2024年1月发布 目录 1出台此标准的目的是什么&#xff1f;2标准宗旨3本标准的主要关键领域4为什么这对品牌和零售商很重要5能给零售媒体中小型玩家带来什么机会&#xff1f;6评价零售媒体效果的最…

金仓数据库Kingbase的数据库开发管理工具KStudio连接乱码

背景&#xff1a; 金仓数据库V8R6&#xff0c;KStudio在Windows10上运行&#xff0c;JDK8 问题&#xff1a; 使用客户端连接数据库时&#xff0c;提示信息乱码&#xff0c;首选项设置字符集不管用&#xff0c;具体如下图所示&#xff1a; Before&#xff1a; After&#xff1…

【CPA考试】2024注册会计师报名照片尺寸要求解读及手机拍照方法

随着2024年注册会计师考试的临近&#xff0c;众多会计专业人士和学生都开始准备报名参加这一行业的重要考试&#xff0c;报名时间为4月8日至4月30日。报名过程中&#xff0c;一张符合要求的证件照是必不可少的。本文将为您详细解读2024年注册会计师考试报名照片的尺寸要求&…

sfml sdl2 windows vscode 调试和coderunner插件运行

链接库写在编译链接命令里&#xff0c;如果没有使用到不会加入到生成的可执行文件里。所以tasks.json可以这样写&#xff0c; {"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C: g.exe 生…

GlusterFS分布式文件系统

一、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选&#xff0c;根据需要选择使用)组成。没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能、可靠性和稳定性 二、GlusterFS特点 2.1 扩展性和高性能 Glu…

结合 linux 0.11 源码分析为什么 fork 函数会返回两个值

#&#xff08;1&#xff09;学习资料是这些书 以及赵炯博士的完全剖析。谢谢这些大师与网上优秀的文章。 #&#xff08;2&#xff09;看 linux 0.11 源码是 sourceinlight 4.这里附上一个安装包。 由本图可知&#xff0c; main 函数对 fork 函数的调用。 fork 函数实际是定…