【专栏:前沿进展】近年来,随着深度学习算法的广泛应用,人工智能(AI)方兴未艾,AI相关技术的应用也越来越丰富。伴随着AI发展一起到来的,则是对硬件性能要求的不断提升。时至今日,传统的CPU,甚至GPU已不能够满足深度学习算法所带来的运算效率需求,由此,人们开始设计各种新型的计算硬件,基于存内计算的计算硬件应运而生。
本文主要介绍了北京大学人工智能研究院研究员燕博南等人关于存内计算的研究,大致可以分为两个部分:一,纯硬件上如何设计Hardcore IP;二,基于Hardcore IP如何完成从硬件到软件的接口。

本文整理自青源Live第28期,视频回放:https://event.baai.ac.cn/activities/178

燕博南,北京大学人工智能研究院研究员。2014年于北京航空航天大学获得学士学位,2017年于匹兹堡大学获得电子工程硕士学位,2020年于杜克大学获得电子与计算机工程博士学位,研究领域包括:人工智能芯片的电路与系统及其设计自动化,新兴存储器与存内计算。已于国际知名期刊和会议上发表论文30余篇,其中包括发表在DAC、ICCAD、ISSCC、Symposium on VLSI Technology、IEDM、DATE等多个国际顶级会议的第一作者文章十余篇,担任IEEE T-ED、TCAD、TCAS-I、TVLSI等国际学术期刊以及DAC等国际学术会议的审稿人, CCF-DAC’2021的Special Session Chair,与DAC’2022存内/近存计算的TPC成员。
作者:燕博南
整理:牛梦琳
编辑:李梦佳
存内计算简介
近年来,随着深度学习算法的广泛应用,AI相关技术在各种规格的平台上的应用也越来越丰富。而深度模型在部署前需要预先进行训练,然后将待处理数据直接输入模型得到结果,运算时,这些AI算法会造成存储单元与计算单元之间大量的数据吞吐,因此需要进行相关加速。而传统的CPU,甚至GPU都不足以满足这样的性能需求,由此,人们开始设计各种新型的计算硬件。
这些硬件主要的应用原理是 Systolic Array(脉动列阵),在这种阵列结构中,芯片上的数据按预先确定的“流水线”在计算单元之间流动,这个过程中,所有的处理单元(PE)同时并行地对流经它的数据进行处理,因而它可以达到很高的并行处理速度。
通过研究发现,片上的数据读写(On-Chip Buffer)所需要的能量远低于与片外数据进行交互时所需的能量,为了减少能耗,人们希望尽量减少与片外的数据交互,基于存算一体化技术的计算硬件正是在这种背景下被设计出来。
一、什么是存内计算
传统的冯诺依曼体系包括存储单元和计算单元两部分:存储器保存程序和数据,计算单元负责数据的处理。运算时,数据在两个单元之间的流动所产生的延迟和能耗,是当前影响计算机总体性能和功耗的瓶颈因素。
近年来,存储器容量迅速增长,而存储器与计算单元之间的数据吞吐带宽增长有限,形成了冯诺依曼瓶颈(Von Neumann Bottleneck)。随着技术的进步,不断有新型架构出现,如近存计算(Near-Memory Computing),来尝试解决冯诺依曼瓶颈,而一种最为理想的架构则是存内计算(PIM)。
PIM(Processing-in-memory,也被称为In-memory Computing 或存内计算),指的是在存储器内部直接进行数据处理的技术。理想情况下,PIM可以有效消除存储单元与计算单元之间的数据吞吐,且不受能耗比重的制约,从而有效解决冯诺依曼瓶颈。随着内存价格的下降以及依赖固定计算模型的应用的大量出现,PIM越来越受到学界和工业界的重视。
为了实现存内计算,首先需要更新底层电路,以达到支持相应功能的目的。这是一个全新的领域。
二、存内计算的运行原理
目前比较流行的存内计算范式是——利用存内计算加速VMM(Vector-Matrix Multiplication)或GEMM(General Matrix Multiplication)运算。
具体的计算原理如下:

实际上,现有的许多技术都已经可以实现存内计算的基本原理,如SRAM,eDRAM,Flash等,而不同技术下的存内计算具有不同的特点,如SRAM-Based 的计算速度快,但Density较低。因此,需要设计不同的基础电路和硬件加以支持。
根据应用场景不同的需要,可以分为三个层次:

这三个层次与现有的存储技术相似,如,第一层级的SRAM,读写速度快,计算延时短,但是存储量级小;第二层级的非嵌入存储器,如RRAM和MRAM,读写速度稍慢,但存储量级变大,计算延时较短;而第三层级,如PCM,Flash,读写更慢,计算延时也更长,但相应的存储量级也是最大的。
要实现上述分级,硬件上,需要提高计算效率,以更少的功耗实现更高的性能;软硬件接口上,则需要提高硬件的可编程性,使编译人员也能享受到硬件性能提高带来的福利
硬核的设计
一、基于Level 1 PIM的硬件设计
基于SRAM读写速度快,Density相对较差的特性,从Read-out Circuit(电路)和Bitcell Array两个方面进行创新设计:在电路方面,设计新型高能读写电路;在Bitcell Array方面,利用基于6T SRAM的全数字设计,使得SRAM-Based存内计算能够适应更多的技术。不同于一般的PIM架构,燕博南等人的设计将计算接口与存储接口直接分开,输入(Input)在进入存储器后先与已经存储好的参数矩阵相乘,得到一个哈达玛积(Hadamard Product)。并通过电路完成先相乘后累加的VMM计算。
利用这个内部结构,可以针对现有的不同的滤波器(Filter),进行定制化的优化。如,输入的尺寸为32,滤波器的尺寸为3x3,可以在硬件上将中间的计算结果独立完成,即通过较好的并行度来更好地适应神经网络的操作,同时达到较高的空间利用率。

在进行利用率对比之后,可以发现,通过优化,芯片在时间与空间的利用率都达到了95%以上。
二、基于Level 2 PIM的硬件设计
RRAM 具有更高的Density,且调用之后数据不会消失,这一特点对设计基于片上RRAM进行存内计算的帮助很大。而在Read-out Circuits方面,由于现有的存内计算的模数转换器(ADC)相对面积较大,希望通过在芯片上放置更多简单小电路的方法,在保证性能的同时缩小ADC的面积。用Spiking-Based 计算电路代替传统的Current-Based ADC。这种计算电路可以收集输入的计算结果,并充入一个固定的电容,当达到一定阈值后,电容会释放电流,从而形成类似于神经脉冲的形式。由于电流越大,充电速度越快,导致形成pulse的频率不同,最后接计数器来完成数字的转换。
电路图原理如下:

通过对上述电路的建模和测试,发现模型与所需的计算吻合,所以这个电路是可用的。
对上述芯片进行测试,在150nm CMOS工艺节点,可以最终得到0.257pj/MAC 的能耗,说明模数转化效率非常高。
下面给出一个具体的芯片demo的视频:

另外,燕博南等人也进行了关于片上神经网络加速的研究工作,通过这些工作,希望能为“软件定义硬件”的思路实现硬件基础。
虽然目前存内计算已经有了一段时间的积累,但想完成存、算一体的集成系统,还有许多工作需要做,如是否可以利用单器件设备完成一个神经网络的计算等等。
存内计算的软着陆
对PIM的展望
内容中包含的图片若涉及版权问题,请及时与我们联系删除


评论
沙发等你来抢