超越GPT-4V,苹果多模态大模型上新,神经形态计算加速MLLM(二)

上文介绍基于MINOnets神经网络架构加速多模态大模型的策略,本文将以Spinnaker2多核神经网络芯片EGRU架构为起点,覆盖存内计算架构,介绍新型计算架构在加速大模型推理的作用。SpiNNaker 2是一个设计用于大规模异步处理的多核神经形态芯片,而EGRU的架构则旨在在保持竞争性任务性能的同时高效利用这种硬件存内计算架构类似人脑神经,在神经元内完成存储与计算的处理方式,区别于传统CPU,GPU架构,打破内存墙,减少数据来回搬运,成为AI时代新一代算力架构。

基于EGRU架构的Spinnaker 2

SpiNNaker2是一款专为大规模事件驱动和异步处理设计的加速器。这款芯片由152个处理单元(PEs)组成,它们通过一个片上网络(NoC)进行互联。每个处理单元都配备了一个Arm M4f处理器核心、128 kB的静态随机存取存储器(SRAM),以及用于执行指数运算、随机数生成和乘累加(MAC)操作的专用加速器。芯片上总共有19 MB的SRAM,并且配备了2 GB的低功耗双数据速率4(LPDDR4)内存。

在单个芯片内部,处理单元之间的通信可以通过直接内存访问(DMA)实现,允许直接访问其他处理单元的本地内存。每个处理单元内的DMA单元支持大批量数据传输,且不会影响处理器的正常工作。当处理器的本地内存指定位置被写入数据,或者DMA指令执行完成时,处理器会接收到中断信号。这种设计使得实现完全基于事件触发、稀疏通信和异步操作的神经网络成为可能。

而实现这种可能的核心是基于EGRU架构,EGRU是一种最近提出的基于事件的神经网络架构,他的处理过程类似于人类大脑处理信息的过程;我们的大脑是一个超级复杂的信息处理系统,当某些事情发生时,比如听到一个声音或者看到一个动作—我们的大脑就会开始工作,处理这些信息。但如果没什么特别的事情发生,我们的大脑就不会那么活跃。EGRU就是这样一个模仿大脑工作原理的计算模型,它只在必要时处理信息。

使用EGRU架构处理的任务:

1,语言建模:在这个任务中,EGRU模型被用来预测序列中的下一个单词。模型通过学习单词的嵌入表示,并使用Softmax函数来预测下一个单词的概率分布。

模型通过计算最终EGRU层的输出向量和字典中所有单词嵌入向量之间的点积相似度,来估计序列中下一个单词的概率。应用于这些值的Softmax函数作为条件分布 p 的估计。

2.手势识别:在这个任务中,EGRU模型结合CNN来处理由事件相机记录的手势数据。模型首先使用CNN来提取特征,然后使用EGRU层来处理这些特征,最终预测手势的类别。

我们的模型由一个CNN特征提取头部和两个各包含256个单元的EGRU层组成。

EGRU架构并行式处理方法:

EGRU架构在大模型训练推理任务加速上,可以采用以下方法,数据预处理:对于要处理的数据优先进行特征提取,调试等,以减小输入的数据内存;使用动态稀疏性:模型运行时只有一小部分内存被激活,可以减少计算量和内存使用;开发并行化算法:输入矩阵乘法,循环矩阵乘法和逐点运算可以同时进行;

A. 在单个处理元素上实现EGRU模型

在SpiNNaker2芯片的单个处理元素上安装最简单的EGRU模型。作为EGRU算法的一部分,需要执行三个操作:1) 输入矩阵乘法;2) 循环矩阵乘法;3) 逐点运算。对于单个处理元素的实现,我们可以简单地顺序执行这些操作。由于所有结果都存储在本地内存中,因此不需要数据传输。尽管SpiNNaker2上有一个乘累加(MAC)加速器,但在此应用中不必使用,以充分利用EGRU的动态稀疏性。

B. 并行化方法

由于任何现实的模型,包括我们更大的EGRU模型,都不会小到足以安装在单个处理元素上,因此我们需要将网络分割并放置在多个处理元素上。分割了的网络将神经元放置在不同的处理元素上,这种方法减少了网络内部所需的通信和同步。单个处理元素上神经元的输出决定了该处理元素的输出。而在输出后,需要传递到EGRU层中的其余单元。每个处理元素在接收到这样的传递后,将所有其他处理元素的输出与本地存储的单元的输出连接起来,形成下一个循环输入。如图1所示,这种传递是通过在处理元素之间发送内部NoC(网络芯片)数据包来实现的。

图1:单个PE运算模型

算法1:单个PE运算算法

C. 数据集和预处理

1) 语言建模:模型在WikiText-2数据集上进行训练和验证。文本被标记化并分成长度为70的序列。嵌入向量被预先计算并转移到LPDDR4内存中。

2) DVS(动态视觉传感器):我们将DVS原始事件时间通过25毫秒的时间窗口进行分箱,然后使用最大池化层将其缩小到32×32像素。数据集经过预处理,并使用CNN头部提取特征。提取的特征存储在LPDDR4内存中。

对输入数据进行预处理,如特征提取、降采样和序列化,以减少模型的输入尺寸。

通过这些处理方法,EGRU模型能够有效地支持大型模型的计算,同时保持模型的性能和准确性。这些方法使得EGRU能够处理大规模的数据集和复杂的时间序列预测任务,以降低算力能耗。

存内计算-神经网络运算

大模型的内存访问在能量和吞吐量方面是一个关键的瓶颈,传统内存一次只访问一行,无法通过传统的数字加速方法来解决,这促使了存内计算的发展,存内计算一次可以访问多行,并直接输出结果。将存内计算处理模式类比为神经元,每个“神经元”都是一个计算单元,接收N个输入x/n并在输入和可调权重w之间执行MAC操作。在这里,nr,re1,…R,其中R代表第1层的神经元总数,因此该层的输出维数也是R。值得注意的是,每一层的N必须等于前一层的N。在每个神经元中求和后,应用非线性函数·)产生输出激活al。对于下一层,激活作为输入,因此a→xn=r)。尽管图示了三层,但最终的输出层生成的激活.1通常对应于输出分类决策,例如,基于最高值的输出实现多类推理。

图2:深度神经网络运算

基于 NOR Flash 的卷积神经网络量化

以下介绍基于 NOR Flash 存储器实现的存内计算推理,Nor Flash阵列实现模拟乘法的原理结合浮栅单元的存储特点,以实现 4 位(即网络正向传播时只存在精度为 4 位的计算)的卷积神经网络模型,采用基于动态阈值调整的量化方法。这个方法主要涉及神经网络量化时的参数(权值 w 和偏置 b)以及激活函数的不同量化方案。

参数量化: 在训练过程中,采样浮点参数的阈值多次,以改变缩放因子,使得量化的映射更加精确。通过动态调整阈值,可以更好地适应不同参数的取值范围,提高量化的准确性。

激活函数的量化: 针对激活函数,引入可学习的参数,在 ReLU(Rectified Linear Unit)激活函数中,使激活的量化可以根据实际情况在反向传播过程中不断更新,以提高量化精度。这样的调整可以根据网络的训练过程中动态变化的激活值来调整量化的参数,以适应不同的输入情况。

这种基于 NOR Flash 阵列和浮栅单元的量化方法可以在训练过程中动态地调整阈值和参数,以适应不同的神经网络结构和输入数据的变化,提高量化的精度,同时降低模型的计算和存储开销。这种动态的量化方法有望在实际的卷积神经网络模型中取得更好的性能。

目前,NOR Flash存内计算芯片技术相对较成熟,并已于2021年实现量产。美国的Mythic和国内的知存科技都推出了基于NOR Flash的存内计算芯片产品。

Mythic M1076芯片: Mythic推出了M1076芯片,这款芯片采用NOR Flash存内计算技术,具有嵌入式AI推理能力,适用于各种端侧设备,如摄像头、传感器和边缘计算设备等。

知存科技WTM2101芯片: 知存科技推出了WTM2101量产SoC芯片,该芯片基于NOR Flash存内计算技术,具有边缘AI计算能力,适用于智能摄像头、智能家居等场景,实现了高效的本地AI处理。

存内计算模拟人脑处理模式,数据直接输入直接在存储器内存储并计算后直接输出,同时多个神经元并行处理的模式,提升了计算的效率。

综上所述,神经形态计算通过模拟大脑的工作方式,结合EGRU模型的动态稀疏性和存内计算架构技术,能够显著提升大模型的计算效率,同时降低能耗,这对于当前和未来的人工智能应用具有重要意义。

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

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

相关文章

openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置

文章目录 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置267.1 操作步骤 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置 本章节主要介绍openGauss数据库内核基于鲲鹏服务器和openE…

T3BI T3BI RS-232通讯操作指南与培训PPT课件

T3BI T3BI RS-232通讯操作指南与培训PPT课件

Python连接Oracle数据库问题解决及Linux服务器操作知识

背景说明 最近在做一个视频分析的项目,然后需要将视频分析的数据写入到oracle数据库,直接在服务器上测试数据库连接的时候出现了这个bug提示,自己通过不断的研究探讨,最终把这个问题成功进行了解决,在这里进行一下记录…

701强连通分量(python)

看见题目知道时间复杂度不超过(mlogm)。 这题用强连通分量 Tarjan 算法,强联通:对于任意两个点u和v,u可以到达v,v也可以到达u。这题需要考虑有重边,自环,同样别忘记可能会有两个点u…

Linux 操作系统编译器、静态库、动态库

1、编辑器 1.1、vim的安装 指令:sudo apt-get install vim 1.2 vim的使用 格式:vim 文件名 如果文件存在,只打开,文件不存在,创建并打开 vim的4中模式: 命令模式,插入模式,底行模…

Excel数据处理:高级筛选、查找定位、查找函数(VLOOKUP)

高级筛选 先去选中筛选区域 如果筛选的条件在同一行那么就是且的关系 如果筛选的条件不在同一行那么就是或的关系 查找定位空值 使用VLOOKUP函数

渗透测试入门教程,从零基础入门到精通(非常详细)

目录 什么是渗透测试 渗透测试的重要性 渗透测试的前置技能 开始入门学习路线 什么是渗透测试 渗透测试,通常被视为模拟黑客的一种安全评估行为,其目的在于全面挖掘目标网站或主机的潜在安全漏洞。与真实的黑客攻击不同,渗透测试旨在发现…

Spring定时器 Cron表达式的用法

前言 Cron表达式是一种用于描述定时任务执行时间的字符串格式,这种表达式基于时间字段来定义任务应该在哪些时间点执行,通常包含六个或七个用空格隔开的字段,分别代表秒、分钟、小时、日期、月份和星期(年份是可选的)…

系统架构最佳实践 -- 相关JAVA架构

1. java 类加载器架构 2. JVM 架构 3. Java 技术体系 4. 线程运行架构 5. Java 体系(编译与运行)结构 6. JMS 技术架构 7. JMX 技术架构 8. Spring 架构 9. Hibernate 架构 10. ibatis 架构 11. Struts2 架构 12. Struts1 架构 13. JBPM 14. EJB 技术架构…

万字总结!Docker简介及底层关键技术剖析

本文首发在个人博客上:万字总结!Docker简介及底层关键技术剖析 Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#x…

滚动条详解:跨平台iOS、Android、小程序滚动条隐藏及自定义样式综合指南

滚动条是用户界面中的图形化组件,用于指示和控制内容区域的可滚动范围。当元素内容超出其视窗边界时,滚动条提供可视化线索,并允许用户通过鼠标滚轮、触屏滑动或直接拖动滑块来浏览未显示部分,实现内容的上下或左右滚动。它在保持…

补档 -- 测试的分类(1)

最近有很多人私信我说: 灰灰你什么时候写测试分类阿, 本来我要开始肝性能测试的, 我一看, 奥, 之前摸鱼忘写了, 所以这里补档(叶问指着一边笑.jpg). 总览 标红的需要注意一下. 为什么要对软件测试进行分类? 软件测试是软件生命周期的一个重要环节, 具有较高的复杂性, 对于软…

排序 “叁” 之交换排序

目录 1. 基本思想 2.冒泡排序 2.1 基本思想 2.2 代码示例 2.3 冒泡排序的特性总结 3.快速排序 3.1 基本思想 🌵hoare版本 🌵挖坑法 ​编辑 🌵前后指针版本 ​编辑 3.2 快速排序优化 🌻三数取中法选key 3.4 快速排序…

如何在群晖NAS部署office系统办公服务并实现无公网IP远程编辑文件

文章目录 本教程解决的问题是:1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是: 1.Word,PPT,Excel等重要文件存在本地环境,如何在编…

Umi.js:登录之后需要手动刷新权限菜单才能渲染

在使用Umi.js开发后台管理页面时,用户登录之后,总是需要手动刷新一次页面,才能够拿到全局状态/权限信息。 问题描述 结合使用umi/plugin-layout和umi/plugin-access,登录进入页面,配置的权限菜单未渲染,需…

javaWeb项目-大药房管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、Java语言简介 Ja…

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录 一、检查服务是否开启 找到 【Docker Desktop Service】,然后,启动他; 你也可以直接设置为“自动” 找到服务,右键》属性》启动类型:自动》点击…

三. TensorRT基础入门-TensorRT简介

目录 前言0. 简述1. 什么是TensorRT2. TensorRT的工作流介绍3. TensorRT的一些限制总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习课程第三章—TensorRT 基础入门&#xf…

三、Flask模型基础

ORM 创建模型 # exts.py:插件管理 # 扩展的第三方插件 # 1.导入第三方插件 from flask_sqlalchemy import SQLAlchemy # ORM插件 from flask_migrate import Migrate # 2. 初始化 db = SQLAlchemy() # ORM migrate = Migrate() # 数据迁移 # 3. 和app对象绑定 def init_ex…

kafka实验部署

一、前期准备 二、kafka实验 在zookeeper后继续进行操作 2.1 为ndoe1、node2、node3作出部署 2.1.1 解压kafka压缩包(node1举例) 2.1.2 操作 将解压后的kafka移动到kafka,进入到kafka下的config中,复制文件 2.1.2.1 编辑server.pr…