当前位置: 首页 > 科技观察

深度学习异构加速技术(二):蜗牛壳里的Dojo_0

时间:2023-03-20 18:25:19 科技观察

一、概述无论是FPGA还是ASIC设计,无论是CNN还是LSTM和MLP,无论是应用于嵌入式终端还是云端(TPU1),其架构的核心是解决带宽问题。带宽问题不解决,就没有算力,但利用率也不会提高。就像一个8核的CPU,如果其中一个核占用了100%的内存带宽,其他7个核就无法读取计算所需的数据,就会一直处于空闲状态。对此,学术界涌现了大量从不同角度讨论带宽问题的文献,归纳为以下几类:A.流处理与数据复用B.片上存储及其优化C.位宽压缩D.稀疏优化E.片上模型和芯片级互连F.新兴技术:二进制网络、忆阻器和HBM下面讨论上述方法如何解决带宽问题。2.不同动作的PK与演化2.1流处理与数据复用流处理应用于FPGA和专用ASIC高效计算结构。其核心是基于流水线的并行指令,即当前处理单元的结果不写回缓存,直接作为下一级处理单元的输入,取代了写回结果的内存访问当前处理单元的数据,读取下一个处理单元的数据。多核CPU和GPU多采用数据并行架构,与流处理架构的对比如图2.1所示。图中左侧为数据并行处理方式。所有的计算单元都由一个控制模块控制,数据统一从缓存中取出进行计算。计算单元之间没有数据交互。当多个计算单元同时读取缓存时,带宽竞争会造成瓶颈;右图是基于指令并行的二维流处理,即每个计算单元都有独立的指令(即自定义计算逻辑),数据从相邻的计算单元输入输出到下一级计算单元,只有与存储相邻的一侧有数据交互,从而大大降低了对存储带宽的依赖,代表了FPGA和专用ASIC的定制化设计。图2.1数据并行与流处理的对比图2.2一维脉动数组(上)TPU中的二维脉动数组(下)当流处理中的每个处理单元(ProcessingElement,PE)结构相同时,有一个专属名称——脉动矩阵,一维脉动矩阵如图2.2(上图)所示。当一个处理单元从内存中读取数据进行处理时,经过多个同构的PE处理后写回内存。对于内存,只需要满足单个PE的读写带宽即可,降低了数据访问频率。脉动架构的思想很简单:让数据在处理单元中流动的时间尽可能长。当一条数据从第一个PE输入到最后一个PE时,已经处理了多次。因此,它可以用小带宽实现高吞吐量[1]。TPU中使用的二维脉动阵列如图2.2(下图)所示,用于实现矩阵-矩阵乘法和向量-矩阵乘法。数据从Cell数组的上侧和左侧流入,从下侧流出。每个Cell是一个乘加单元,每个周期完成一次乘法和一次加法。使用脉动数组进行卷积运算时,需要将二维FeatureMap展开为一维向量,旋转Kernel后再输入,如TPU专利中的图2.3所示。图2.3TPU专利中,卷积运算时对脉动阵列进行数据重排,大大增加了数据复用,但脉动阵列也有两个缺点,即数据重排和尺度自适应。***,收缩矩阵主要实现向量/矩阵乘法。以CNN计算为例,CNN数据进入脉动阵列的形式需要调整,输入必须严格遵循时钟节拍和空间顺序。数据重新排列的额外操作增加了复杂性,大概是软件驱动的实现。其次,数据流过整个数组后才能输出结果。当计算出的向量元素过少,脉动数组规模过大时,不仅难以利用数组中的每一个单元,而且随着规模的扩大,数据导入导出延迟增加,降低了计算效率。因此,在确定脉动阵列的规模时,在考虑面积、能耗和峰值计算能力的同时,还应考虑典型应用下的效率。寒武纪电脑系列芯片架构也采用了流处理乘加树(电脑[2]、大电脑[3]、普电脑[4])和类脉动阵列结构(十电脑[5])。为了兼容小规模的矩阵运算并保持较高的利用率,同时更好地支持并发多任务,打点脑和点点脑降低了计算粒度,采用了两层细分的计算架构,即在顶层PEarray,每个PE由多个较小规模的计算单元组成。虽然更细化的任务分配和调度会占用额外的逻辑,但有利于保证各计算单元的计算效率和控制功耗,如图2.4所示。图2.4基于流处理的计算单元组织结构:从上到下分别是电脑、大电脑、时电脑、普电脑的整体框架和处理单元,以及各MLU处理单元的内部结构。输入带宽的依赖性也可以通过计算中的数据复用来降低带宽。CNN中的复用方法如图2.5所示。(a)(b)(c)图2.5DatareuseinCNN图2.5(a)(b)(c)分别对应卷积核整个FeatureMap的复用,一组FeatureMap复用到多组FiltersMultiplexing,通过增加BatchSize来进行Filter多路复用。当以上三种方式结合使用时,数据的复用率可以大大提高,这也是TPU在处理CNN时计算力接近峰值,达到86Tops/s的原因之一。2.2.片上存储与优化片外存储器(如DDR等)的优点是容量大。但是,在ASIC和FPGA设计中,DRAM的使用往往存在两个问题。一是带宽不足,二是功耗过大。由于需要高频驱动IO,DRAM存取的能耗通常是单位运行的200倍以上。DRAM存取等操作的能耗比较如图2.6所示。图2.6片外DRAM访问的能耗开销为了解决带宽和能耗问题,通常采用两种方法:片上缓存和相邻存储。1)增加片上缓存,有利于在更多情况下增加数据复用。例如矩阵A和B相乘时,如果B可以全部存入缓存,则B只加载一次,相乘的次数等于A的行数;如果缓存不够,需要多次加载,增加带宽消耗。当片内缓存足够大,可以存储计算所需的所有数据,或者通过主控处理器按需发送数据时,就可以放弃片外DRAM,从而大大降低功耗和电路板面积。大部分AIASIC论文采用的方案。2)靠近存储。从片上缓存加载数据时,如果使用单个片上存储,其接口往往不能满足带宽要求,而且集中存储和较长的读写路径也会增加延迟。此时可以增加片上存储量,分布在计算单元的数据接口附近,使计算单元可以独享自己的内存带宽。随着数量的增加,片上存储的总带宽也随之增加,如图2.7所示。图2.7TPU(上)和DianNao(下)的片上内存分布图2.7中的脉动数组和乘加树是大规模计算单元,属于粗粒度。当采用细粒度计算单元结构时,如图2.8所示,可以采用分层存储方式,即除了在芯片上配置共享缓存外,还在每个计算单元中配置专用内存,因此计算单元可以独占其带宽并减少对共享缓存的访问。寒武纪打点脑也采用分层存储,共三层架构,配备一个中央存储器、四个环形分布式存储器、输入输出存储器,如图2.9所示,大大增强了片上存储深度和带宽,辅以芯片间的互连总线,可以将整个模型放在芯片上,实现片上Training和Inference。图2.8细粒度计算单元和相邻存储。上图中的暗红色是内存。图2.9打点脑的计算单元和内存分布2.3.位宽压缩。它继承了CPU和GPU的32位浮点量化。每次乘法运算不仅需要12字节的读写(8位量化需要3字节),而且32位运算单元占用片内面积大,增加了能耗和带宽消耗。PuDianNao在[4]中指出,在ASIC中,16位乘法器占用的面积是32位乘法器的1/5,即在同样大小的面积内可以布置5倍多的乘法器.使用8bit时,您将获得更高的收入。因此,学术界孜孜不倦地追求更低的量化精度,从16bit到自定义的9bit[6]、8bit,甚至更激进的2bit和1bit二进制网络[7-8]。当高位宽转换为低位宽量化时,精度损失是不可避免的。对此,可以通过调整量化方式、表征范围、编码等,甚至增加模型深度(二值网络)来降低对精度的影响。量化模式和表征范围调整方法如图2.10所示。图2.10(a)几种量化模式,以及(b)动态位宽调整图2.10(a)展示了不同的量化模式,同样的8bit根据值在模型中的分布可以作为线性量化,对数量化,或非线性量化表示。图2.10(b)是邱建涛等人提出的动态位宽调整。[9],这使得8位量化能够在不同层之间使用不同的偏移量和整数和小数分配,从而在最小量化误差的约束下动态调整量化范围和精度,结合再训练,可以大大降低低的影响位宽。CNN模型中的测试结果如下表所示:低位宽意味着处理相同任务时的计算能力、带宽和功耗更少。在算力不变的前提下,吞吐量翻倍。对于数据中心来说,可以大大降低运维成本,可以通过使用更少的服务器或更便宜的计算平台来满足需求(TPU的数据类型为8/16bit);对于更注重能耗比和小型化的嵌入式前端,可以大大降低成本。目前,8bit的量化精度已经得到业界的认可,GPU也宣布在硬件上提供对8bit的支持,从而将计算性能提升近4倍,如图2.11所示。FPGA巨头Xilinx在官方AI加速文档中也讨论了8位量化的可行性[10]。图2.11NVIDIA对int82.4的支持。稀疏优化上面的讨论主要是针对稠密矩阵的计算。在实际应用中,很大一部分AI应用和矩阵运算都是稀疏运算,主要来自两个方面:1)算法本身是稀疏的。在NLP(NaturalLanguageProcessing,自然语言处理)、推荐算法等应用中,一个几万维的向量中通常只有少数几个非零元素,显然得不偿失按照稠密矩阵处理。2)算法转化为稀疏。为了增加普适性,深度学习模型本身就存在冗余。对一个应用程序进行训练后,很多参数的贡献极低,可以通过剪枝和再训练将模型转化为稀疏模型。例如,深鉴科技的韩松在FPGA2017上提出模型剪枝和LSTM专用稀疏处理架构,如图2.12[11]。图2.12LSTM模型剪枝率和准确率(左)和稀疏处理框架(右)图2.12左图,LSTM模型剪枝90%的参数后,基本没有损失精度,模型已经大大稀疏了。右图为稀疏FPGA处理架构,在处理的PE之间进行异步调度,在每个PE的数据入口处使用独立的数据缓存,只将非零元素压入参与计算,是3倍比PascalTitanX的性能增益和11.5倍的功率增益更快。稀疏性不仅限于LSTM,在CNN上也有相应的应用。相应地,寒武纪也开发了用于稀疏神经网络的Cambricon-X[12]处理器,如图2.13所示。同样,Cambricon-X也在每个PE的输入端口增加了一个Indexing步骤,过滤掉非零元素再输入PE。与深鉴不同的是,寒武纪-X支持两种不同稀疏度的索引编码,针对不同稀疏度的模型使用不同的编码来优化带宽消耗。图2.13寒武纪Cambricon-X稀疏神经网络处理器的结构可以针对稀疏性进行优化。有两个目的。一是从缓存中读入所有有效数据,避免大量无用的零元素占用带宽。二。就是为了保证片上PE的计算效率,让每个PE每次计算的输入都是“干货”。当模型剪枝与稀疏处理架构相结合时,FPGA和ASIC的计算能力将翻倍,效果显着,是异构加速的热点之一。综上所述,从模型的角度来看,稀疏化从根本上减少了计算量,在架构演进没有突破的情况下,其带来的收益是架构优化无法比拟的。特别是结合位宽压缩,性能提升非常显着。但稀疏化需要根据架构的特点,会带来精度损失,需要结合模型重训练和反复调整来弥补。上述过程提高了稀疏优化的门槛,需要算法开发和硬件优化团队的共同协作。对此,深鉴科技等一些公司推出了稀疏+再训练的专用工具,简化了这个过程,在大规模部署场景下会带来可观的成本优势。2.5.片上模型和芯片级互连为了解决带宽问题,通常的方法是增加数据复用。每次计算的两个值中,一个是权重,一个是输入的Activation。如果有足够大的片内缓存,结合合适的位宽压缩方式,将所有的权重都缓存在片内,每次只输入Activation,就可以在数据复用优化前将带宽减半。但是从GoogleNet50M到ResNet150M的参数个数,在高成本的HBM普及之前,ASIC在相对面积上是做不到这么大片上存储的。随着模型研究的深入,参数更多、更深层次的模型将不断出现。对此,基于芯片级互连和模型拆分的处理模式,结合多芯片互连技术,在多个芯片上配置多组拆分层参数,利用多个芯片共同完成对模型的处理。推理过程中的相同任务。寒武纪大点脑实现了这样的芯片互联结合大缓存的设计,如图2.14所示。图2.14打点脑内存分布(图中蓝色部分)与多芯片互联加速能力(以GPUK20M为单位性能对比)。为了将整个模型放到芯片上,大点脑将片上缓存的容量增加到36MB(大点脑36MB,4608倍频,TPU为28MB缓存,65536倍频),充分保证了芯片的读写带宽。计算单元,并通过HT2.0实现6.4GB/s*4通道片间通信带宽,降低层间数据传输延迟,完全替代片外DRAM交互,解决带宽受限计算问题。相应地,微软在HotChips2017上提出将LSTM模型拆分并部署到多个FPGA上,以摆脱片外内存访问,从而实现Inference下的超低延迟[2]。2.6.新兴技术:二进制网络、忆阻器和HBM除了上述解决带宽问题的方法外,最近学术界还出现了两种更激进的方法,二进制网络和忆阻器;还有一个新的突破,就是HBM。二进制网络将Weight和Activation部分甚至全部转换为1bit,将乘法简化为XOR等逻辑运算,大大降低了带宽。非常适合DSP资源有限而逻辑资源丰富的FPGA,以及完全可定制的ASIC。.相对而言,GPU的计算单元只能以32/16/8bit为单位运行。即使运行二进制模型,加速效果也不会比8bit模型快多少。因此,二进制网络成为FPGA和ASIC在低功耗嵌入式前端应用中的有力工具。目前二值化网络的焦点还停留在模型讨论阶段,讨论如何通过增加深度和调整模型来补偿二值化后精度的损失。简单数据集下的效果已经被认可,比如MNIST、Cifar-10等,既然带宽已经成为计算瓶颈,是否可以把计算放在内存里面?既然计算单元与存储相邻的架构可以提高计算效率,那么计算和存储是否可以融合?忆阻器是实现存储器内部运算的器件。通过电流、电压和电导的乘积关系,在输入端加上相应的电压,在输出端得到乘加结果,如图2.15所示[13]。当电导作为一个可编程的Weight值,作为Activation输入,就可以实现神经网络计算。目前,8位可编程电导技术在工艺限制下还不成熟,但在较低的量化精度下是可以接受的。将存储和计算结合起来,将形成一种不同于冯·诺依曼系统的新架构,称为In-MemoryComputing,具有巨大的想象空间。图2.15忆阻器的乘法和加法(左)和向量-矩阵运算(右)的示意图。随着业界芯片制造技术的发展和摩尔定律的逐渐失效,只需改进工艺,就可以在面积不变的情况下增加晶体管。量的方式逐渐陷入了瓶颈。相应地,二维技术的局限性使得工艺走向三维。例如在存储领域,3D架构和片上垂直堆叠技术可以使芯片上的缓存容量翻倍,其代表是HighBandwidthMemory(HBM)和HybridMemoryCube(HMC)。据英特尔称,LakeCrest的片上HBM2可以提供高达DDR412倍的带宽。目前NVIDIAAP100和V100GPU都集成了HBM2,片上带宽高达900GB/s;TPU2具有600GB/s的片上HBM带宽;集成HBM的XilinxFPGA将于2018年面世。这项技术创新使得即使没有当前深度学习模型的芯片级互连方案,也可以将整个模型放置在芯片上,从而释放了FPGA/ASIC对非集成化的需求。芯片DRAM,为AI芯片的发展提供了巨大的推动力。3.结论以上讨论主要基于目前学术界对AI处理器架构的讨论。但在行业内,云服务、大数据处理、安全、手机应用等领域对AI的需求量呈爆发式增长。甚至已经在一些应用中落地,比如谷歌的TPU、华为的麒麟970等。AI处理器的发展和现状如何?参考文献[1]唐山,SystolicArray-GainingNewLifewithGoogleTPU。http://mp.weixin.qq.com/s/g-BDlvSy-cx4AKItcWF7jQ[2]ChenY,ChenY,ChenY,etal.DianNao:asmall-footprinthigh-throughputacceleratorforubiquitousmachine-learning[C]//编程语言和操作系统的体系结构支持国际会议。美国计算机学会,2014:269-284.[3]LuoT,LuoT,LiuS,etal.DaDianNao:AMachine-LearningSupercomputer[C]//Ieee/acm微体系结构国际研讨会。IEEE,2015:609-622.[4]LiuD,ChenT,LiuS,etal.PuDianNao:APolyvalentMachineLearningAccelerator[C]//第二十届编程语言和操作系统架构支持国际会议。美国计算机学会,2015:369-381.[5]DuZ,FasthuberR,ChenT,etal.ShiDianNao:Shiftingvisionprocessingclosertothesensor[C]//ACM/IEEE,国际计算机体系结构研讨会。IEEE,2015:92-104.[6]EricChung、JeremyFowers、KalinOvtcharov等人。t数据中心规模的神经网络。2017年热门芯片。[7]MengW,GuZ,ZhangM,etal.Two-bitnetworksfordeeplearningonresource-constrainedembeddeddevices[J].arXivpreprintarXiv:1701.00485,2017.[8]HubaraI、CourbariauxM、SoudryD等人。二值化神经网络[C]//神经信息处理系统的进展。2016:4107-4115.[9]QiuJ,WangJ,YaoS,etal.Goingdeeperwithembeddedfpgaplatformforconvolutionalneuralnetwork[C]//2016ACM/SIGDA现场可编程门阵列国际研讨会论文集。美国计算机学会,2016:26-35.[10]Xilinx,在Xilinx设备上使用INT8优化进行深度学习,https://www.xilinx.com/support/documentation/white_papers/wp486-deep-learning-int8.pdf[11]HanS、KangJ、MaoH等人。Ese:基于fpga压缩lstm的高效语音识别引擎[J].arXiv预印本arXiv:1612.00694,2016.[12]张S、杜Z、张L等。Cambricon-X:稀疏神经网络加速器[C]//Ieee/acm国际微架构研讨会.IEEE计算机学会,2016:1-12.[13]ShafieeA、NagA、MuralimanoharN等人。ISAAC:Aconvolutionalneuralnetworkacceleratorwithin-situanalogarithmeticincrossbars[C]//第43届国际计算机体系结构研讨会论文集。IEEE出版社,2016:14-26。原文链接:http://suo.im/4m1gvp作者:kevinxiaoyu【本文为专栏作者《腾讯云技术社区》原创稿件,转载请通过联系原作者获得授权】点此阅读作者的更多好文章