【AI学习】Mamba学习(十八):S6的硬件感知设计

上一篇Mamba的文章提到,S6 models这个名称的由来是:S4 models with a selection mechanism and computed with a scan。

所以,S6模型首先是选择机制:先前模型的一个关键限制对选择性复制和归纳等重要合成任务不够适用,所以设计选择机制,将SSM参数参数化为输入的函数。这允许模型过滤掉无关信息,并无限期地记住相关信息。
引入选择机制后,就需要硬件感知算法:所有先前的SSM模型必须是时间和输入不变的,才能实现计算效率;为了计算效率,引入选择机制后,就需要通过硬件感知算法克服了这一点,该算法使用扫描而不是卷积来递归计算模型。

选择机制相对容易理解。而对于S6模型的硬件感知设计,尤其是所谓的并行扫描,看论文没有看清楚,查了相关博客,再进行一下梳理。

硬件感知设计:并行扫描(parallel scan) + Flash Attention

并行扫描,同时还需要借鉴Flash Attention的方式,整体见图一,可以看到哪些处理在GPU SRAM中,哪些在HBM(高带宽内存)。
朴素的递归计算使用了O(BLDN) FLOPs,而卷积计算使用了O(BLD log(L)) FLOPs,前者具有较低的常数因子。因此,对于长序列和不太大的状态维度N,递归模式实际上可以使用更少的FLOPs。
这里的挑战就是,递归的顺序性导致计算效率低和大量的内存使用。需要像卷积模式一样的并行出来,但是因为不是时不变系统,卷积核随着输入在变,没法使用卷积的并行方式,文章给出了并行扫描的方式。
主要思路是利用现代加速器(GPU)的特性,在内存层次结构中更有效的级别中具体化状态h。特别是,大多数操作(除了矩阵乘法)都受到内存带宽的限制。这包括扫描操作,使用内核融合来减少内存IO的数量,与标准实现相比,可以显著加速。

具体来说,不是在HBM中加载数据大小为(B,L,D,N)的输入(A,B),而是直接将SSM参数(∆,A,B,C)从慢速HBM加载到快速SRAM中,在SRAM中进行离散化和递归,然后将数据大小为(B,L,D)的最终输出写回HBM。
在这里插入图片描述
图1:(概述)结构化SSM通过更高维的潜在状态h(例如N=4)独立地将输入x的每个通道(例如D=5)映射到输出y。先前的SSM通过需要时间不变性的巧妙替代计算路径来避免实现这种大的有效状态(DN,乘以批量大小B和序列长度L):(Δ,𝑨,𝑩,𝑪)参数在整个时间内是恒定的。我们的选择机制增加了与输入相关的动态,这也需要一个谨慎的硬件感知算法,只在GPU内存层次结构的更有效级别中实现扩展状态。

并行扫描

针对并行扫描,主要看了两篇博客。

第一篇博客

不使用卷积的并行扫描,具体是怎样操作?
参考这篇文章:https://jackcook.com/2024/02/23/mamba.html

Mamba 的涉及非常快速的 RNN 模式训练。递归与扫描算法(也称为前缀和)非常相似。 要计算前缀和,需要采用一个输入数组[x1,x2,x3,…,xn]并返回一个输出数组,其中每个元素是该项与之前项之和。 换句话说,输出的第一个元素将是x1,则第二个元素将为x1+x2,第三个x1+x2+x3等。 示例如下所示。
在这里插入图片描述
然后画出在 RNN 模式下更新 Mamba 隐藏状态的过程:
在这里插入图片描述
如果我们必须正式化前缀和,可以将其写出如下方程:
在这里插入图片描述
这个方程形成一个递归:在每个步骤中,通过将先前存储的值添加到当前输入来计算新值。 现在,再次看一下更新 Mamba 隐藏状态的递归。
在这里插入图片描述
虽然计算前缀和本质上似乎是连续的,但实际上有高效的并行算法来完成这项任务! 在下图中,我们可以看到一个并行前缀和算法,其中每条垂直线代表数组中的一个项目。
在这里插入图片描述
来看看这个算法是有效的:选择任何垂直线,从顶部开始,然后向下,将每个添加项追溯到数组的前几个项目。 当到达底部时,就有行左侧所有项目的总和。 例如,可以看到,在将第一个元素添加到开头的第二个元素之后,数组的第三个元素在末尾接收第二个元素的附加值。 因此,在并行扫描完成时,第三个元素包含第一个、第二个和第三个元素的总和。
如果在单个线程中运行这个算法,没有并行性,那么它比我们只按顺序将值相加需要更长的时间。 但 GPU 有很多处理器,允许高度并行计算。 因此,我们可以大致计算这个前缀求和(或扫描)操作O(logn)时间!
因此,Mamba 的作者意识到,如果想在 RNN 模式下高效训练,可以使用并行扫描。

就是说,对于递归 就只能单线程算, 就比较慢。其实加法具有结合律,先算前后都可以,就可以多线程并行计算,也就是所谓的并行扫描

第二篇博客

上面的博客还是说的不够明白,再看第二篇:
(https://www.zhihu.com/question/644981978/answer/3405813530)的分析。

这篇文章指出,加法服从结合率,可以通过调整运算次序,实现并行加速。但是,Mamba的情况复杂一些,需要定义一种新的运算:
在这里插入图片描述

所以,之前是串行扫描,从H0到H3需要串行计算。
在这里插入图片描述
根据上面的交换律,可以多个进程并行运算。
在这里插入图片描述
下面手动推导一下,针对状态H3的计算,进行展开如下:
在这里插入图片描述
根据上面定义的二元运算,展开如下:
先并行计算1、2项和3、4项,然后将这两组并行运算的结果再次进行二元运算,因为其实没有A0,展开获得的四项与上面的推导一致。
在这里插入图片描述

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

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

相关文章

Bug Fix 20241122:缺少lib文件错误

今天有朋友提醒才突然发现 gitee 上传的代码存在两个很严重,同时也很低级的错误。 因为gitee的默认设置不允许二进制文件的提交, 所以PH47框架下的库文件(各逻辑层的库文件),以及Stm32Cube驱动的库文件都没上传到Gi…

实现Excel文件和其他文件导出为压缩包,并导入

导出 后端&#xff1a; PostMapping("/exportExcelData")public void exportExcelData(HttpServletRequest request, HttpServletResponse response, RequestBody ResData resData) throws IOException {List<Long> menuIds resData.getMenuIds();List<Co…

4.4 JMeter 请求参数类型详解

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 参数&#xff08;键值对形式&#xff09;2 消息体数据&#xff08;JSON/XML 格式&#xff09;3 文件上传 前言 在使用 JMeter 进行接口测试时&#xff0c;常见的请求参数类型主…

【山大909算法题】2014-T1

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 为带表头的单链表类Chain编写一个成员函数Reverse&#xff0c;该函数对链表进行逆序操作&#xff08;将链表中的结点按与原序相反的顺序连接&#xff09;&#xff0c;要求逆序操作就地进行&#xff0c;不分配…

Apache OFBiz xmlrpc XXE漏洞(CVE-2018-8033)

目录 1、漏洞描述 2、EXP下载地址 3、EXP利用 1、漏洞描述 Apache OFBiz是一套企业资源计划&#xff08;ERP&#xff09;系统。它提供了广泛的功能&#xff0c;包括销售、采购、库存、财务、CRM等。 Apache OFBiz还具有灵活的架构和可扩展性&#xff0c;允许用户根据业务需求…

路由传参、搜索、多选框勾选、新增/编辑表单复用

前言&#xff1a; 记录添加运动员页面功能的具体实现 ①由赛事管理页面跳转时路由传参&#xff08;携带该页面表格中莫某条数据对应的赛事id到另一个页面&#xff09;&#xff1b; ②搜索框实时搜索&#xff1b; ③多选框勾选搜索&#xff1b; ④新增表单和编辑表单复用&a…

【11-20期】Java面试进阶:深入解析核心问题与实战案例

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 文章题目&#xff1a;Java面试进阶&#xff1a;深入解析11-20期核心问题与实战案例 摘要&#xff1a; 本篇…

Java后端如何进行文件上传和下载 —— 本地版

简介&#xff1a; 本文详细介绍了在Java后端进行文件上传和下载的实现方法&#xff0c;包括文件上传保存到本地的完整流程、文件下载的代码实现&#xff0c;以及如何处理文件预览、下载大小限制和运行失败的问题&#xff0c;并提供了完整的代码示例。 大体思路 1、文件上传 …

基于SpringBoot的工程教育认证的计算机课程管理系统【附源码】

基于SpringBoot的工程教育认证的计算机课程管理系统 效果如下&#xff1a; 系统登录页面 教师主页面 学生管理页面 课程信息页面 通知公告页面 学生课程管理页面 学生课程信息页面 研究背景 随着信息技术的快速发展&#xff0c;计算机课程管理系统的应用在教育领域变得愈发重…

适用于学校、医院等低压用电场所的智能安全配电装置

引言 电力&#xff0c;作为一种清洁且高效的能源&#xff0c;极大地促进了现代生活的便捷与舒适。然而&#xff0c;与此同时&#xff0c;因使用不当或维护缺失等问题&#xff0c;漏电、触电事件以及电气火灾频发&#xff0c;对人们的生命安全和财产安全构成了严重威胁&#xf…

如何编写一个 Vue 3 应用:模板插值示例

Vue.js 是一个渐进式的 JavaScript 框架&#xff0c;用于构建用户界面。在本篇博客中&#xff0c;我们将通过一个简单的示例来学习如何使用 Vue 3 创建一个基本的应用。这个示例将展示如何使用 Vue 的模板插值和事件处理来构建一个简单的点击计数器。 步骤 1: 准备工作 首先&…

PostgreSQL详细安装教程

#安装PostgreSQL的yum仓库 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm#安装PostgreSQL 15版本 sudo yum install -y postgresql15-server#初始化数据库&#xff08;若要自定义数据库存储目录…

uniapp中使用Mescroll实现下拉刷新与上拉加载项目实战

如何在UniApp中使用Mescroll实现下拉刷新与上拉加载 前言 下拉刷新和上拉加载更多成为了提升用户体验不可或缺的功能。UniApp作为一个跨平台的应用开发框架&#xff0c;支持使用Vue.js语法编写多端&#xff08;iOS、Android、H5等&#xff09;应用。Mescroll作为一款专为Vue设…

js:基础

js是什么 JavaScript是一种运行在客户端的编程语言&#xff0c;实现人机交互的效果 js只要有个浏览器就能跑 js可以做网页特效、表单验证、数据交互、服务端编程 服务端编程是前端人拿他们特有的后端语言node.js来干后端干的事情 js怎么组成 JavaScriptECMAScript(语言基…

Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

yum install 报错: Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 CentOS7的SCL源在2024年6月30日停止维护了。 当scl源里面默认使用了centos官方的地址&#xff0c;无法连接&#xff0c;需要替换为阿里云。 cd /etc/yum.repos.d/ 找到 CentOS-SCLo-scl.repo 和…

35 基于单片机的精确电压表DA-AD转换

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DAC0832和ADC0832检测电压&#xff0c;0到8.5V&#xff0c;设计复位电路 LED管显示实际稳压值&#xff0c;初始电压0 二、硬件资源 基于KEIL5编写C代码&#xff0c…

微信小程序2-地图显示和地图标记

一、index修改页面&#xff0c;让页面能够显示地图和一个添加标记的按钮。 index.wxml <scroll-view class"scrollarea" scroll-y type"list"><view class"index_container"><map id"map" style"width: 100%; h…

【一篇搞定配置】网络分析工具WireShark的安装与入门使用

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1.…

Python基础学习-11函数参数

1、"值传递” 和“引用传递” 1&#xff09;不可变的参数通过“值传递”。比如整数、字符串等 2&#xff09;可变的参数通过“引用参数”。比如列表、字典。 3&#xff09;避免可变参数的修改 4&#xff09;内存模型简介 2、函数参数类型 1&#xff09; def func() #无参…

深入理解注意力机制(Attention Mechanism)

在深度学习中&#xff0c;“注意力机制&#xff08;Attention Mechanism&#xff09;”是近年来的一个重要突破。它最初被提出用于处理自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;但如今已经广泛应用于计算机视觉、强化学习和其他领域。注意力机制赋予模型一种“…