mamba模型原理解读

本文主要讲解我对于2023年提出的mamba模型的理解和解读,mamba模型的提出为transformer模型存在的计算效率低下,需要大量时间运行程序提出了解决方案。提高了模型的运行效率和计算效率。我主要是根据下面这篇文章入手:

1.mamba模型是通过堆叠多个mamba block而来。Mamba模块是一种结合了H3块和Gated MLP块特点的简化设计,通过重复Mamba块而不是交替使用其他模块来实现高效计算,并在设计中引入了SSM和现代激活函数,从而增强了模型的表现能力。 Mamba模块如下图所示:

由上图可以看出,mamba模型最重要的部分是SSM状态空间模型。mamba模型说设计的SSM如下图所示:

h_t-1:是前一步的隐状态。h_t:是当前的隐状态。x_t:是当前的输入。y_t:是当前的输出。

SSM 以独立的方式将输入x_t的每个通道(例如 D = 5)映射到高维潜在状态h(例如N = 4),然后再输出y_t。模型将输入向量x的每个通道独立地映射到输出向量,通过一个高维的潜在状态h进行转换。Projection(投影模块):用于将输入x_t映射到不同的通道。Selection Mechanism(选择机制):该机制负责动态选择基于输入的状态更新,这需要一个硬件感知算法来保证计算的高效性。

ssm的离散化是启发式门控机制的原则基础。离散化具体过程主要采用zero-order hold (ZOH) 零阶保持法,具体原理如下:

参数矩阵A、B_t、C_t、Δ_t:
A:状态转移矩阵。
B_t:控制输入到状态转换的影响。
C_t:控制状态到输出的转换。
Δ_t:离散化参数,用于表示时间不变性。

 

图片展示了一种结合状态空间模型(SSM)和选择机制(Selection)的算法,标为“Algorithm 2: SSM + Selection (S6)”。下方是算法的详细结构和其解释:

 

2.mamba模型另外一个重要思想是利用一个硬件加速方法提高计算速度。由于上述变化对模型的计算提出了技术挑战。所有先前的 SSM 模型都必须是时间和输入不变的,这样才能提高计算效率。为此,本文作者采用了一种硬件感知算法,通过扫描而不是卷积来计算模型,但不会将扩展状态具体化,以避免在 GPU 存储器层次结构的不同级别之间进行 IO 访问。由此产生的实现方法在理论上(与所有基于卷积的 SSM 的伪线性相比,在序列长度上呈线性缩放)和现有硬件上都比以前的方法更快(在 A100 GPU 上可快达 3 倍)。

硬件感知的状态扩展:这部分说明了如何通过选择机制引入基于输入的动态,使得状态扩展在 GPU 内存层次结构中更高效地实现。

主要思想是利用现代加速器(如GPU)的特性,将状态ℎ仅在内存层次结构中更高效的级别上进行物质化。特别地,大多数操作(除了矩阵乘法)都受到内存带宽的限制。包括扫描操作,使用内核融合来减少内存IO的数量,从而相比标准实现显著加快速度。具体来说,与其在GPU高带宽内存(HBM)中准备大小为(ℬ, ℒ, ℴ, ℕ)的扫描输入(A, B),直接从较慢的HBM加载SSM参数(Δ, A, B, C)到快速的SRAM,在SRAM中执行离散化和递归,然后将大小为(ℬ, ℒ, ℴ)的最终输出写回HBM。为了避免顺序递归,观察到尽管它不是线性的,但仍然可以使用工作高效的并行扫描算法进行并行化。还必须避免保存中间状态,这些状态对于反向传播是必要的。仔细应用重新计算的经典技术来减少内存需求:中间状态不存储,而是在反向传递中从HBM加载到SRAM时重新计算。因此,融合选择扫描层的内存需求与采用FlashAttention的优化Transformer实现相同。
完整的选择性SSM层和算法如图1所示。

解读:

内存效率提升:通过利用GPU的快速内存(SRAM)进行计算,只在需要时才使用高带宽内存(HBM),从而大大减少了内存带宽限制带来的瓶颈。
内核融合:通过将多个操作融合成一个内核,减少了内存IO的次数,从而提高了计算效率。
并行化:尽管扫描操作本质上是递归的,但可以通过并行扫描算法来实现并行化,从而提升速度。
重新计算技术:在反向传播过程中,不存储中间状态,而是在需要时重新计算中间状态,从而显著减少内存需求。
性能对标:这种优化使得选择性扫描层的内存需求与使用FlashAttention的优化Transformer实现相当。

参考博文:

1.Mamba模型底层技术详解:与Transformer的区别在哪里?

2.MAMBA介绍:一种新的可能超过Transformer的AI架构

3.文章的mamba模型源代码

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

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

相关文章

STM32人工智能检测-筛选机器人

前言 本文描述了一种使用STM32进行机器人筛选的办法。筛选对象是我的粉s,删选办法是瞪眼法。 问题现象 每次当我的STM32 向外界发出一篇新的的报文,总能在1H之内得到focus,格式如下 [title][body][tail]于是我对各个focus 我报文的对象进…

香港身份的好处有哪些?这3个福利卷得内地人都在申请香港身份!

截止近期数据,香港身份申请人数达到29万,可见香港魅力依旧! 我也是其中之一,去年才把香港优才临时身份卷下来的糖爸~ 我身边不少符合条件的朋友都想润去香港了,接近国际,又离家门近,谁不想去啊…

嵌入式技术学习——Linux环境编程(高级编程)——shell编程

一、shell编程的基础介绍 1.为什么要进行shell编程? 在Linux系统中,虽然有各种各样的图形化接口工具,但是shell仍然是一个非常灵活的 工具。 Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。 您可以通过使用shell使大量的任务自动化…

QTday5 2024-06-19

作业要求&#xff1a; 1.思维导图 2.整理代码&#xff1a;TCP服务器 作业1&#xff1a;思维导图 作业2&#xff1a;整理代码 运行代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QList>…

Python 迭代器与生成器

迭代器 迭代器&#xff08;Iterator&#xff09;是一个可以记住遍历的位置的对象&#xff0c;该对象包含值的可计数数字&#xff0c;在Python当中&#xff1a;迭代器是实现迭代器协议的对象&#xff0c;它包含方法__iter__() 和 __next__() __iter__()方法 作用&#xff1a;…

Java语法糖写法

一、函数式接口 1、Function函数式接口&#xff1a;有一个输入参数&#xff0c;有一个输出 2、断定型接口&#xff1a;有一个输入参数&#xff0c;返回值只能是布尔值&#xff01; 3、Consumer 消费型接口&#xff1a;只有输入&#xff0c;没有返回值 4、Supplier供给型接口&a…

目标检测讲解

环境准备 pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple图片读取&画框 from skimage import io import matplotlib.pyplot as plt import matplotlib.patches as mpss io.imread(dogs.jpg)_, ax plt.subplots(ncols1, nrows1, figsize(6, 6))…

关于Java

关于Java Java语言关于并发JVM调优工具写在最后 Java语言 Java语言作为当下主流开发语言&#xff0c;其面向对象的开发模式以及一次编译多次运行&#xff0c;跨平台运行以及自动的垃圾回收机制可以说是给开发者节省了很大的时间用于逻辑功能的开发&#xff0c;那么在开发过程中…

通信系统的最佳线性均衡器(1)---维纳滤波线性均衡

本篇文章是博主在通信等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对通信等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在通信领域笔记&#xff1a;…

windows cmd bat 批处理脚本找到监听端口并并杀掉进程 nestat -ano

echo off rem 终止正在监听在端口8888上的进程 rem tokens5 表示第五个token for /f tokens5 %%p in (netstat -ano ^| findstr 8888) do ( set pid%%p ) echo xxxx %pid% rem xxxx TCP [::]:8888 [::]:0 LISTENING 2720 taskkill /pid %pid% /f if %errorlevel% equ 0 ( echo …

ARM功耗管理框架之PPU

安全之安全(security)博客目录导读 思考&#xff1a;功耗管理框架&#xff1f;SCP&#xff1f;PPU&#xff1f;LPI&#xff1f;之间的关系&#xff1f;如何配合&#xff1f; 目录 一、功耗管理框架中的PPU 二、PPU的结构与连接关系 三、PPU操作模式和电源模式及其之间的转…

如何准备大模型面试:迈向成功职业道路的关键一步

前言 在当今日新月异的科技领域中&#xff0c;大模型技术正以其卓越的智能和无限的可能性&#xff0c;吸引着越来越多的企业和求职者。面对大模型领域的职位面试&#xff0c;如何充分准备&#xff0c;展现自己的专业能力和潜力&#xff0c;成为了每位求职者关注的焦点。本文将…

SK投屏助手:电脑控制手机,游戏与App轻松畅玩

SK投屏助手让您将手机画面完美投射至电脑屏幕&#xff0c;而且不止于此&#xff01;现在&#xff0c;您可以利用电脑反向控制手机&#xff0c;轻松操作各种游戏和应用程序。无论是在家中放松还是在工作中提高效率&#xff0c;SK投屏助手都能成为您的得力助手。立即体验无缝连接…

微服务必备容器化技术

文章目录 docker介绍与安装及上手应用什么是容器化技术&#xff1f;为什么需要学习docker&#xff1f;如何理解dockerdocker下载与安装docker的基础组成docker体验 dockerfile介绍并创建go-zero环境容器docker的基础组成从容器构建属于go环境的容器基于dockerfile构建go容器镜像…

没有名为 keras.preprocessing 的模块

估计是因为版本原因 我安装的是 3.3.3版本 >>> import keras >>> print(keras.__version__) 3.3.3 keras.preprocessing.image 将 keras.preprocessing.image 改为 from keras_preprocessing.image 之后报image_type啥的错误&#xff0c;后面查找之后…

java问题解决: IDEA java 警告 源发行版 17 需要目标发行版 17

效果图 问题原因 jdk和你实际安装的jdk不匹配 解决问题 1.点击File -->Project Structure–>Project 修改这两处 2. 在Project Structure–>Modules中的红框位置都要调整对应版本 3、点击File–>settings–>java compile将对应框的版本修改成对应版本即可–改…

运算放大器(运放)缓冲器(跟随器)电路

运算放大器(Operational Amplifier) 运算放大器(Operational Amplifier)是一种差分放大器&#xff0c;具有高输入电阻、低输出电阻、高开放增益&#xff08;开环增益&#xff09;&#xff0c;并具有可放大输入引脚与-输入引脚间的电压差的功能。 设计目标 输入输入输出输出频…

揭开AI大模型的神秘面纱:一文看懂GPT-4的核心技术

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术迅猛发展&#xff0c;特别是AI大模型的崛起&#xff0c;给人们的生活和工作带来了深远的影响。作为其中的佼佼者&#xff0c;GPT-4备受瞩目。那么&#xff0c;GPT-4的核心技术究竟是什么&#xff1f;它是如何运作的&a…

Chrome插件开发入门:手把手教你创建第一个扩展

问题背景 最近&#xff0c;客户发布了一个新的任务 —— 开发一个Chrome插件。之前没有这方面的开发经验&#xff0c;准备想学习一下这块的内容&#xff0c;我发现网上的大多数视频都是几年前的&#xff0c;开发版本都是基于MV2&#xff0c;当前谷歌已经开始使用MV3&#xff0…

python使用哪种数据库

MySQL 是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关…