软硬件去耦合是计算机系统结构中非常重要的设计方法论。简单来理解,即软件研发人员不需要考虑底层硬件如何设计;而硬件开发人员则只需要遵循一定指令集规范,并不用担心兼容性,也不用考虑上层软件开发问题。多年以来,软硬件去耦合确保了通用计算机体系结构的快速发展。而之所以能够做到软硬件去耦合,其背后的原理便是“图灵机与计算理论”。

那么类脑计算,要超越甚至替代冯·诺依曼模型和传统计算机,是否也需要做到软硬件去耦合?该用什么方法实现?这些问题对类脑计算的研究和开发意义重大。

针对这些问题,在第二届北京智源大会“智能体系架构和芯片”专题论坛上,智源学者、清华大学张悠慧做了题为“软硬件去耦合的类脑计算系统设计与思考”的专题报告。

张悠慧,清华大学计算机系研究员,博导,主要从事计算机体系结构,包括处理器设计、类脑计算芯片与基础软件、高性能计算等方向的研究;曾担任多个国际/国内学术会议程序委员会委员及期刊编委;在NATURE、ASPLOS、MICRO、NIPS、DAC等期刊/会议上发表论文近70篇;是国家科技进步二等奖、国家级教学成果二等奖、教育部科技进步一等奖获得者。

张悠慧在演讲中首先介绍了类脑计算的起源、应用与发展等研究背景,并分析了以类脑芯片为核心的软硬件和基于“通用”类脑计算开发框架(语言)系统两种类脑计算研究的现状,以及探讨了如何从传统计算机的发展中汲取经验,采用软硬件去耦合、软硬件协同设计等多种方法论,来探索符合类脑计算与神经形态器件特色的设计方法论,最后,张悠慧简述了通用类脑计算当前研究的最新进展和下步工作重点。

整理:智源社区 王光华,贾伟

一、研究背景:类脑计算的起源、应用与发展

类脑计算或者神经形态计算的历史比较悠远。神经形态计算的鼻祖之一,加州理工的Carver Mead教授在1990年提出“神经形态计算”这个词,并将其定义为“采用以模拟器件仿真生物神经系统的VLSI来实现大规模并行的自适应计算系统”[1]。

图1:加州理工Carver Mead教授

但这个概念提出的初衷,并不是为了做AI或神经网络计算等,主要是为了追求计算效能。因为传统数字架构,一条指令执行时,需要经过译码、数据传输等一系列操作再进行计算,其“耗能不单是这个计算本身的,而是执行整个计算流程所消耗的总能量”,效能不高。而生物系统的计算效能比数字计算系统计算效能高几个数量级。所以,当时的有识之士,便开始借鉴生物神经网思想,用以提升计算效能。这里主要包括两点:一是使用基本的物理现象作为计算的原语,类似于模拟计算的方法。二是,采用类似Spiking这样的模拟相对值而不是数字的绝对值来进行信息表述。这两点是生物系统能效优势的根本原因,对于提升计算效能具有非常重要的启示。

图2:类脑计算所支持的各类应用[2]

张悠慧介绍,类脑计算应用目前比较侧重于AI。根据综述文章[2],类脑计算目前所支持的主要应用是神经网络形式的,但是也有越来越多的工作在探索利用类脑计算实现非神经网络应用。主要包括两种,一种是以神经网络的形式解决图计算、计算优化等非AI的问题;另一种是问题形式、表述形式、解决形式等非神经网络形式的,比如利用脉冲神经网络构建通用计算框架。

但2016年的《Nature》文章提到:类脑计算作为后摩尔时代极具潜力的发展方向之一,不能把类脑计算应用只局限于AI,要放宽一点。

图3:引领类脑计算的技术浪潮[5]

那么类脑计算的未来会怎么样?2020年初有一篇文章[5]指出,类脑计算可能引领下一波Computer Engineering的浪潮。目前,GPU驱动了第一阶段浪潮,第二个阶段将是ASIC加速器,而第三阶段可能就是神经形态计算。图灵奖得主John L. Hennessy和 David A. Patterson在2018年的图灵报告[3]里也提到,未来10年是重新定义计算机体系结构的10年。目前体系结构因发展路径的多样性,将带来体系基础结构创新的重大契机,逐步会有越来越多的非冯处理器崛起,包括神经形态处理器,基于量子力学规律的处理器等[4]。

二、现状分析:

专用芯片 vs “通用”框架(语言)

张悠慧介绍,目前已经有很多种类的类脑芯片开发,比如,斯坦佛大学Neurogrid团队和滑铁卢大学NEF团队合作的Braindrop;英特尔的Loihi;以及TrueNorth、SpiNNaker、BrainScales等。

这些类脑芯片大多以软硬件协同设计为主,各芯片提供了自己特有的软硬件接口以及工具链。好处是端到端的设计对于适配的应用而言效率比较高;不足之处则是纵向设计,把上层应用和下层系统软硬件等绑定在一起,导致缺乏应用的可移植性,降低开发的效率,开发人员不得不面对底层硬件暴露的约束。

图4:Braindrop[6]

与Loihi等系统相比,Braindrop做得比较灵活。Loihi等系统对外提供的编程原语是基于神经元、神经元突触、神经网络这个层次。而Braindrop则是利用滑铁卢大学的NEF框架,在功能级上提出的编程原语。用户可以将认知计算函数描述成为一个非线性的微分方程系统,并且与底层硬件是无关的、去耦合的,然后通过NEF将每个方程转换成一组物理上的神经元,并映射到模数混合的芯片上。但它的问题在于当进行设计的时候,软硬件的所有层次都要协同设计,底层硬件设计也要严格遵循理论框架,它的上、下层耦合度很高,只是耦合到了NEF框架里去了。

图5:TrueNorth[7]

TrueNorth是基于认知计算编程语言Corelet进行应用开发的。硬件基础单元是TrueNorth中的神经形态基元模型,包括神经元计算模型、突触模型及其扩展,通过一个或多个神经元配置互联实现基本功能的函数。通过Corelet编程,软件工具链采用分而治之策略,将一个复杂算法分解为简单算法,反复分解直至变换为一个神经突触核所能完成的计算,这时候形成神经形态网络层面的基础单元以及单元的连接。实际上,这种方法也同样把硬件底层的基础单元暴露给了上层开发者。

图6:Loihi神经元计算硬件流水线[8]

Loihi对外提供一系列编程原语,用于脉冲神经网络拓扑描述的神经元间室模型、突出模型、突出踪迹、描述SNN动力学的神经元模型以及突出学习规则。如图6,实际上该硬件流水线基本是对照SNN的仿真模型实现的,计算神经学中仿真神经元计算怎么做,Loihi便把它用硬件实现。相当于Loihi把神经网络模拟里的软件流水线硬件固化,形成基本功能单元再暴露给上层的开发人员。首尔大学基于Loihi结构进行了拓展[9],支持SNN的各类学习算法,这些算法主要是基于STDP或者STDP衍生的众多算法,首尔大学分析了多种算法并归纳出更多原语进行扩展支持。但不管怎样,还是把底层的原语直接暴露给上层。

现在很多研究越来越往通用框架演进,目的则是提供一种高层次的编程抽象,实现与具体芯片无关的统一开发框架,使底层硬件规则约束能够对应用开发透明。好处在于较高层次的抽象能够屏蔽硬件细节,提高可移植性和开发效率。但目前的问题在于,芯片底层缺乏一致的硬件接口,仍存在一对一的移植工作。现在很多采用开放社区与标准化方案鼓励大家做相关工作,比如,美国国家实验室2019年做的Fugu项目就是其中典型案例[10]。它试图提供一个通用开发平台,研究人员不需要大量背景知识就能开发应用程序,开发框架通过开源社区的方式去做,将具体应用、脉冲神经网络算法设计、以及神经形态硬件平台的具体细节分离开来,形成三个层次。框架最高层的目标人群是科学计算或者应用开发人员,他们对自己领域很熟但是不熟悉神经网络计算方法;中间层用户比较熟悉神经网络计算,用神经网络实现功能、提供函数,但是不熟悉硬件平台;第三层用户是硬件平台专家开发人员,能够优化和裁剪针对特定硬件的神经网络算法。从公开文献看目前该项目还没有支持某一款特定的芯片,仍然是用模拟器进行替代。

三、当前进展:

通用计算机启示下的类脑计算研究

图7:解耦合的系统设计

张悠慧认为,基于通用处理器的计算机系统层次结构采用的是非常典型的软硬件去耦合的设计方法,这将给予我们方法论上的启示。

总体思路,如图7所示,也是采用软硬件去耦合的系统设计,但在应用和芯片之间引入了软件编程模型、硬件执行模型两层抽象。软件编程模型提供给软件开发人员使用,不需要关心底层硬件的规格与约束,把这些交给硬件执行模型处理,在两层之间通过“编译器”进行编译转换。

以神经网络计算为例,上层的编程模型是数据流或者计算图的编程模型,下层的硬件执行模型也可以看作是数据流,但是,它的原语和规模都是受限的。关键的问题是要把两者进行等价转换。

张悠慧介绍,他们团队在2016年便提出了解耦合系统原型[11],主要通过神经网络的冗余来容忍硬件层面的约束,实现了在类脑硬件具有精度、连接度、函数类型等约束的情况下上层模型到下层模型的自动转换;利用神经网络的冗余性和容错性,通过去除一定的冗余性之后降低精度来匹配硬件约束。该工作支持“天机一代”芯片约束下的“编译”。

2018年,张悠慧团队进一步做了神经网络编译器[12]。这包括两个方面,一是对硬件执行模型的形式化定义,引入点积和非线性函数两个硬件基本算子,二是实现严格硬件约束下的神经网络模型转换,即把神经网络转换为约束条件下等价的网络。因为软件神经元和硬件神经元能力不一样,转换成硬件神经元以后规模可能需要膨胀,以规模换取能力实现精度损失可控。

在工作[12]的基础上,张悠慧团队做了架构设计与映射工具[13]。[12]说明方案是可行的,还需要进一步研究该方案的效率。基于所需的基本原语,他们提出基于忆阻器的可重构神经网络芯片架构(FPSA),证明了方案的高效性与可实现性。整体上是遵从RISC设计思想,简化硬件设计利用忆阻器高效实现两个原语,上层各种各样软件的灵活性通过编译器实现。同时,引入FPGA可重构路由,解决传统BUS和NOC无法匹配忆阻器高速计算的通信瓶颈问题。

图8:动态图软硬件模型

张悠慧团队还把相关工作拓展到动态计算图[14],即在软件编程模型和硬件执行模型当中使用控制流来支持动态图,使其功能更加完整。动态计算图中包括多个静态计算图,在软件编程模型里根据输入的不同动态调用静态图来执行。底层硬件很大程度上借鉴了FPGA的设计,利用可编程的逻辑单元来实现控制流,即硬件上控制器选择不同的分支来完成不同的执行路径。

图9:FPSA系统栈

FPSA系统栈如图9。最上层是包含各种张量的动态计算图,即各种各样有控制的、不受限制的神经网络操作,通过神经网络编译器编译成等价的仅包括控制流本身和硬件支持的几个核心原语的动态计算图。核心原语目前主要有两个,一个是点积,一个是非线性函数。然后再通过神经网络映射器,把硬件执行模型进一步转化为包含核心原语计算、缓存和控制逻辑的网表,即计算逻辑、计算调度、数据移动和暂存等,最后直接复用FPGA的功能实现相关的布局布线。

在前端,张悠慧团队做了基于GPU的高性能脉冲神经网络开发与仿真平台[15],它支持被广泛应用的SNN的开发语言——PyNN。针对SNN行为的稀疏性、事件驱动等特征,他们采用了细粒度神经网络表示与执行模式,以及带时间戳的稀疏矩阵存储等方法进行特殊优化。使得其性能比现有最新的基于GPU的SNN模拟器要快很多。

图10:BSIM工作流

图10是BSIM工作流,最上层给开发人员使用,并且屏蔽了硬件的细节,开发人员可以定义模型进行预处理,将网络各种层次连接起来,最后通过编译生成GPU上的执行程序。同时,它还支持不同的底层硬件神经元和突出模型,方便进行功能验证。作为类脑计算编程、编译与运行时系统,目前该平台支持GPU集群异构计算并提供认知计算功能单元、算子库、开发接口。

四、下一步研究:通用类脑计算?

张悠慧认为,当前在类脑计算领域,不管是各家基于芯片构建的系统,还是意图通用的、去耦合的软硬件系统栈都面临的问题是:各平台都有自己不同的开发接口、编程接口,各用各的。

所以从长远来看,我们需要一个解决方案能够应对多个平台。因此希望未来硬件接口能够稳定下来,开发出相同(或者兼容)的接口。

通用计算机系统在这方面做得比较好,软硬件去耦合的计算机层次结构是经典计算机迅猛发展的体系结构基础,这是通用计算机几十年来快速发展背后体系结构方面的逻辑。

如果类脑计算要超越或替代冯·诺依曼模型,我们不能总基于归纳法进行软硬件体系结构的设计,因为这种方法未来无法满足新的应用,并且存在软硬件绑定的问题。

五、总结

张悠慧的报告,让我们体会到:传统计算机系统的软硬件去耦合的层次化设计思想是IT技术得以飞速发展的体系结构基础;目前类脑计算的系统和芯片,虽然具体类型有所不同但都比较侧重于端到端的软硬件协同设计方法,缺乏能将算法、芯片和器件等不同领域技术和需求有机结合起来的软硬件系统栈设计;因此,我们需要进一步从传统的通用计算系统的成功思路中汲取经验,既要形似,也要神似!

另外,演讲结束后,中科院计算所研究员、智源首席科学家陈云霁对演讲内容进行了提问,我们也将张悠慧的回答整理给大家。

Q&A

Q:作为计算机研究者来说,通用性和完备性非常重要,这正是像图灵机这样具有通用性完备性的模型,使得我们今天研究的是计算机,而不仅仅是一个计算器。第一个问题,中间层和TVM的差别是什么?

A:从在系统中的位置和作用来说,它们是类似的。不同在于,第一,TVM主要支持DNN,我们这边更倾向于做SNN。第二,我们目前正在做的工作是想提出一套硬件原语,从理论上确保这个硬件原语从神经系统计算层面来说是足够的。我们目前做了这么一个简单的原型系统,能够证明带来三个好处:1)如果硬件能够实现这套原语的话,理论上确保软件模型和硬件模型的等价;2)至少理论上可以使得底层的类脑硬件能够支持通用的计算;3)我们这种设计将来引入新的系统评测维度,一般系统讲应用性能和硬件开销之间的Tradeoff,我们引入了近似粒度,能够容忍怎样的Error。这是一个三角关系。

Q:我想请教一个问题,我自己感觉在深度学习发展里面有这样一个问题,一开始在学术界应用相对少一些它会显得比较干净规整,但是一旦进入工业界之后,很多“肮脏的东西”就会往上跑。比如我们看现在比较大规模的深度神经网络,比如自然语言处理里面的BERT,或者图像检测里面的Faster R-CNN,仅仅说是向量内机(点积)和非线性激活函数就感觉hold不住了。目前SNN在工业上的实际部署相对来说比较少一些,您能否预测SNN未来进入大规模工业应用会不会有这样的问题出现?

A:我觉得肯定会有这样的问题出现,去耦合和Codesign永远是相辅相成的。理想情况下,基石是去耦合的,通过提供一系列原语来实现。同时,针对特定应用而言,还要通过Codesign在去耦合基础上去提升性能和效率,我相信将来系统肯定是这么一个混合式系统,包括传统计算机也是这样的,完备性是个基石,但是Codesign是提升效能的关键,所以我们可能会针对不同应用需求去扩展做Codesign。

点击阅读原文,进入智源社区参与更多讨论。

参考文献

[1] C. Mead.Neuromorphic electronic systems. Proceedings of the IEEE, 1990, 78(10):1629-1636.

[2] Schuman C D , Potok T E , Patton R M , et al. A Survey of Neuromorphic Computing and Neural Networks in Hardware[J]. 2017.

[3] John L. Hennessy, David A. Patterson. A New Golden Age for Computer Architecture. Communications of the ACM, February 2019.

[4] Kathleen E. Hamilton,et al. Accelerating Scientific Computing in the Post-Moore’s Era. ACM Transactions on Parallel Computing. 2020.

[5] Jack D. Kendall, Suhas Kumar. The building blocks of a brain-inspired computer. Applied Physics Reviews 7, 011305 (2020).

[6] “Braindrop: A mixed-signal neuromorphic architecture with a dynamical systems-based programming model. Proceedings of the IEEE,  2019”.

[7] A. Amir et al., Cognitive computing programming paradigm: A Corelet Language for composing networks of neurosynaptic cores, IJCNN 2013.

[8] Lin C K , Wild A , Chinya G , et al. Programming Spiking Neural Networks on Intel Loihi[J]. Computer, 2018.

[9] E. Baek et al., FlexLearn: Fast and Highly Efficient Brain Simulations Using Flexible On-Chip Learning, MICRO 2019

[10] James B. Aimone, William Severa, Craig M. Vineyard. Composing neural algorithms with Fugu. International Conference on Neuromorphic Systems. 2019.

[11] Yu Ji, et al. “NEUTRAMS: Neural network transformation and co-design under neuromorphic hardware constraints”.

[12] Yu Ji, et al. “Bridge the Gap between Neural Networks and Neuromorphic Hardware with a Neural Network Compiler”.

[13] Yu Ji, et al. “FPSA: A Full System Stack Solution for Reconfigurable ReRAM-based NN Accelerator Architecture”.

[14] Y. Ji, Z. Liu and Y. Zhang, "A Reduced Architecture for ReRAM-based Neural Network Accelerator and Its Software Stack".

[15] P. Qu, Y. Zhang, et al, "High Performance Simulation of Spiking Neural Network on GPGPUs".

清华大学张悠慧:超越冯·诺依曼模型,实现软硬件去耦合的类脑计算(附视频)相关推荐

  1. 《自然》重磅:清华团队首次提出“类脑计算完备性”,智源学者张悠慧等为共同一作...

    8月初,清华大学施路平团队基于研究成果,类脑计算芯片"天机芯"第二代的论文登上<自然>(Nature)杂志封面,实现了中国人工智能领域<自然>论文零突破. ...

  2. 清华张悠慧:AI时代,「图灵完备」之后,「类脑计算完备」如何设计?

    智源导读:2021年6月1日,清华大学计算机系研究员.类脑计算研究会成员张悠慧,在北京智源人工智能大会智能体系架构与芯片论坛做了题为"类脑计算系统基础软件研究"的报告.报告首先简要 ...

  3. 清华类脑计算成果再登Nature:张悠慧施路平团队出品,有望打破冯诺依曼瓶颈...

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 清华类脑计算研究成果,再登Nature. 新研究的关键词是:类脑计算.新计算机系统框架.通用人工智能(AGI). 它的重要性,在于有希望打 ...

  4. 基于人脑神经元与神经信息交流机制的类脑计算模型研究

    基于人脑神经元与神经信息交流机制的类脑计算模型研究 摘 要:在当下社会人工智能发展得如火如荼,但在发展火热的背后,以深度学习为代表的传统人工智能算法已经到达瓶颈期,所需的巨大的数据样本和和计算资源使研 ...

  5. 打破冯·诺依曼结构,中国的类脑计算芯片已实现量产

    灵汐科技类脑芯片KA200亮相北京科技周 5月22日至28日,为期7天的中国2021年全国科技活动周暨北京科技周主场活动在北京中关村国家自主创新示范区展示中心启动,本次活动受到各级领导高度重视,中共中 ...

  6. 【linux系统编程】理解冯•诺依曼体系结构

    冯•诺依曼体系结构 Von Neumann Architecture 正文开始@Assassin 目录: 冯•诺依曼体系结构 1. 冯•诺依曼模型: 2. 冯•诺依曼体系结构推导: 3. 设备的工作原 ...

  7. 【历史上的今天】6 月 30 日:冯·诺依曼发表第一份草案;九十年代末的半导体大战;CBS 收购 CNET

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 6 月 30 日.众所周知,电影发展中一个重要步骤是彩色电影于 1930 年左右引入市场,而在 19 ...

  8. 计算机系统概论输入输出,计算机系统概论笔记-4-冯·诺依曼模型

    由约翰·冯·诺伊曼于1946年提出的"冯·诺伊曼模型"(又称"冯·诺伊曼体系结构") 4.1基本部件 计算机的运行需要两个前提: 一是任务描述,即描述所要完成的 ...

  9. 模拟冯.诺依曼计算机

    (值此中秋佳节之际,祝愿天下所有为理想奋斗着.努力着.梦想着的人心想事成) 道指令不但可以模拟图灵机.元胞自动机.神经元.基因等的工作过程,还可以模拟冯.诺依曼计算机,现在要利用道指令编制模拟冯.诺依 ...

最新文章

  1. 数据结构之希尔排序图文详解及代码(C++实现)
  2. matlab r2012a win10,vs2010和Matlab R2012a 混合编程
  3. DBUtils连接池,websocket
  4. 五一重装WinXP操作系统所遇问题的解决
  5. 开源的SIP协议栈 PJSIP
  6. java mvc上传文件进度_java相关:springMVC+ajax实现文件上传且带进度条实例
  7. go 判断切片是否存在某元素_Golang基础之切片
  8. python判断水仙花数
  9. Expression Blend实例中文教程(12) - 样式和模板快速入门Style,Template
  10. java按钮鼠标_我想用java做一个鼠标永远点不到button的应用,下面这个程序的错误在哪?...
  11. Java毕业设计(项目课程)大全
  12. 网易 产品策划( 杭州研究员) 笔试题解
  13. c语言关键字code什么意思,C语言中的32个关键字分别是什么意思?
  14. uniapp使用艺术字
  15. C语言程序设计(郝斌)
  16. ezuikit-js萤石云
  17. React 全新文档上线!
  18. 笔记本安装固态涉及到的注意事项
  19. **视频会议设备连接注意事项**
  20. ios 新浪微博网页登陆分享 {error:userinfoerror pos:5}

热门文章

  1. 安装 并且使用_房子装地暖还是墙暖暖气?使用过的人建议这样去选择!
  2. bdm导入mysql_vs 2010下使用水晶报表Crystal Reports
  3. bool类型返回值_Python 到底是强类型语言,还是弱类型语言?
  4. 如何调整按钮里的文字的位置android_UI设计中按钮场景分析
  5. c语言怎么倒计时,如何在c语言程序中插入一个倒计时命令?
  6. python sort函数key_Python:s.sort([cmp[, key[, reverse]]])
  7. Java为什么会有默认的背景色_java – 为什么我的背景颜色不会在JFrame中...
  8. java ajax jquery分页插件_JQueryPagination分页插件,ajax从struts请求数据
  9. mysql表文件被删_mysql表物理文件被误删的解决方法
  10. mysql8.0 zip安装教程