声明:本文章为作者结课拓展小论文,仅供参考,欢迎批评指正。
摘要:NPU作为一种主要采用ASIC技术的专用嵌入式神经网络芯片通过硬件模拟神经网络的方式克服了CPU、GPU在深度学习中设计上的先天不足,大大提高了深度学习芯片的运算速度。2014年寒武纪DianNao系列论文开启了专用人工智能芯片NPU架构设计的先河,直接催生了寒武纪系列NPU,一定程度上引领了华为达芬奇架构NPU、阿里“含光”、谷歌TPU等的出现。尽管现今主要的NPU只集中在推理芯片领域,但已经撼动了GPU人工智能领域的地位。NPU的出现代表了人工智能芯片开始走向定制专用化的方向。
关键词:NPU;神经网络芯片;DianNao;高性能;推理芯片
如今大数据与智能时代即将来临,深度学习计算需求愈加旺盛,人工智能芯片市场初具规模,蓬勃发展。人工智能芯片功能上主要分为训练芯片和推理芯片两种,应用场景主要分为云端和终端,技术上主流的AI芯片分为GPU、FPGA以及ASIC专用芯片三大类。如今AI训练芯片主要以英伟达的GPU为主,但是在推理芯片领域主要采用ASIC技术的NPU定制新型AI芯片层出不穷,本文将主要从NPU的概念、架构和实例三个方面对其发展概况展开讨论。
NPU(Neural-network Processing Unit)是一种嵌入式神经网络处理器,它采用“数据驱动并行计算”的架构,特别擅长处理视频、图像类的海量多媒体数据。
长期以来,应用需求一直牵动着嵌入式技术的发展方向。随着深度学习神经网络的兴起,人工智能、大数据时代的来临,CPU和GPU渐渐难以满足深度学习的需要,面对日渐旺盛的需求和广大的预期市场,设计一款专门用于神经网络深度学习的高效智能处理器显得十分必要,因此NPU应运而生。
从技术角度看,深度学习实际上是一类多层大规模人工神经网络。它模仿生物神经网络而构建,由若干人工神经元结点互联而成。神经元之间通过突触两两连接,突触记录了神经元间联系的权值强弱。由于深度学习的基本操作是神经元和突触的处理,神经网络中存储和处理是一体化的,都是通过突触权重来体现,而冯·诺伊曼结构中,存储和处理是分离的,分别由存储器和运算器来实现,二者之间存在巨大的差异。当用现有的基于冯·诺伊曼结构的经典计算机(如X86处理器和英伟达GPU)运行神经网络应用时,就不可避免地受到存储和处理分离式结构的制约,因而影响效率。因此,专门针对人工智能的专业芯片NPU更有研发的必要和需求。
CPU(central processing unit)是中央处理器。主要包括运算器(ALU)和控制单元(CU),还包括若干寄存器、高速缓存器和它们之间通讯的数据、控制及状态的总线。CPU作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。它主要负责多任务管理、调度,具有很强的通用性,是计算机的核心领导部件,其计算能力并不强,更擅长逻辑控制。
GPU(Graphics Processing Unit)是一种图形处理器,它可以弥补CPU在计算能力上的天然缺陷。相对于CPU较少的内核较多的资源而言,它采用数量众多的计算单元和超长的流水线,善于进行大量重复计算,处理图像领域的运算加速。它的基本思想是并行计算即用多个处理器来共同求解同一问题,将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。但是他的缺陷也很明显,即协调、管理能力弱,无法单独工作,需要CPU进行控制调度。虽然GPU用于深度学习运算时速度比CPU有很大提升,但对于特定应用场景其仍有功耗大,芯片容易过热,性能提升不足等问题。
相较于CPU擅长处理任务和发号施令,GPU擅长进行图像处理、并行计算算,NPU更擅长处理人工智能任务。NPU在电路层模拟人类神经元和突触,并且用深度学习指令集直接处理大规模的神经元和突触,一条指令完成一组神经元的处理。相比于CPU和GPU的冯诺伊曼结构,NPU通过突触权重实现存储和计算一体化,从而提高运行效率。但NPU也有不足,比如目前它并不支持对大量样本的训练,相对来说更擅长预测和推理。
2016年6 月 20 日,中星微数字多媒体芯片技术 国家重点实验室在北京宣布,已研发成功了中国首款嵌入式神经网络处理器(NPU)芯片,成为全球首颗具备深度学习人工智能的嵌入式视频采集压缩编码系统级芯片,并取名“星光智能一号”。截至2020年5月,拥有NPU制造能力的厂商有寒武纪公司(Cambricon-1H/1M、MLU100)、华为(晟腾)、阿里(含光),谷歌(TPU)等。
相对于CPU拥有相对清晰的定义,稳定的生态链而言,NPU还处于方兴未艾的阶段,无论是研发还是应用还需要更多的值得探索和研究的地方。相对于CPU、GPU发展,国内追赶的窘境而言,无疑在NPU的开发上,国内厂商已经走在前列,未来可期。
2014年中科院的陈天石科研团队发表了DianNao系列论文,随即席卷了体系结构界,开启了专用人工智能芯片设计的先河。后来中科院旗下的寒武纪科技推出了其第一代NPU寒武纪1A,并用在了华为麒麟970芯片中。随后谷歌推出了TPU架构,华为推出了自研的基于达芬奇架构的NPU,阿里推出了“含光”架构的NPU。后续的NPU架构与DianNao架构都有一定联系,我们主要对DianNao架构进行简要介绍。
DianNao是寒武纪NPU嵌入式处理器的原生架构,是寒武纪的开山之作。
图1神经网络的完整硬件实现
以上是神经网络模式图,基于神经网络的人工智能算法,成功模拟了人类大脑内部神经元的结构。上图中的neuron代表的就是单个神经元,synapse代表神经元的突触,hidden layer是神经网络中的隐含层,output layer是输出层,input是神经网络输入。
下图为DianNao的内部结构:
图2 加速器
蓝色区域是硬件逻辑模拟的神经网络结构,称为NFU(Neural Functional Units)。从左到右分为三个部分,NFU-1、NFU-2、NFU-3。NFU-1是乘法单元,共有256(16*16)个乘法器。NFU-2是加法树,共有16个加法树,每个加法树由15个加法器组成,排列依次为8-4-2-1。NFU-3是激活单元,共有16个激活单元。总的来说NFU将资源分为了16份,每一份包括NFU-1的16个乘法器,NFU-2的1个加法树(15个加法器)和NFU-3的一个激活函数运算器,运算时一份资源中乘法器同时运行共输出16个结果,送加法树,加法树运算后得出一个结果送激活函数,激活函数运算判断是否激活。
除此之外还有三个缓冲区,一个存储输入的数据(NBin),一个存储运算的权值(SB),一个存储结果(NBout)。
使用DianNao架构的深度学习神经网络芯片性能得到了很大的提高,运算速度远超GPU和CPU。DianNao的出现引起行业震动,开创了深度学习神经网络专用处理器的先河,之后又迅速涌现出许多不同的架构,其中最著名的就有谷歌公司的TPU。
相比于DianNao作为嵌入式终端使用的处理器,DaDianNao 更适合做服务器使用的大规模高性能处理器。在DaDianNao的设计中,寒武纪给DaDianNao制定的要求是性能要实现DianNao的16倍提升。因此最初采用了将NFU资源扩大16倍的方案,但发现这样做布线面积大且不够高效,于是后来采用了多核并行架构,将原来资源扩大16倍的打NFU改为16个小的NFU,经过合理布线,最终面积减小28.5%且性能满足要求。
PuDianNao是寒武纪为了加速机器学习中除了深度学习之外的其他重要算法而推出的一款嵌入式处理器方案。PuDianNao,内部实现了7种常用的机器学习算法:k-means,k-nearest neighbors , naive bayes ,support vector machine , linear regression , and DNN。PuDianNao的结构如下图:
图3 PuDianNao的加速器结构
PuDianNao结构与DianNao类似,包含三个缓冲区,和多个运算单元,缓冲区包括输入数据存储、权值存储和输出数据存储。运算单元由多个FU(Function Unit)并联组成,每个FU中包含一个MLU (Machine Learning Unit)和一个ALU。MLU结构如下:
图4 MLU硬件结构
MLU结构与NFU类似,只是在NFU-1前面增加了2层逻辑Counter和Adder。Counter用于累加,结果直接输出到下一层,主要是naver bayes和classification tree需要。Adder用于大部分机器学习算法,计算结果直接输出或者作为下一层的输入。Multiplier相当于NFU-1,Adder tree相当于NFU-2,ACC用于累加,当计算资源大于硬件资源时,已经算好的数据可以直接存在ACC中用作下一轮累加,节省了读写存储的开销,Misc相当于NFU-3。
ALU包含各一个加法器、乘法器、除法器和一个转换器(converter),用于机器学习中一些特殊的MLU解决不了的计算。
2014年—2016年横扫体系结构学术圈的DianNao系列论文便是由寒武纪创始人及其科研团队发布。该公司于2016年推出第一代终端智能处理器IP产品寒武纪1A,当时是全球第一款商用终端智能处理器IP产品。号称开启手机AI时代的麒麟970使用的集成NPU就是寒武纪的1A处理器IP。2018年5月,寒武纪正式发布了中国第一款云端智能芯片——Cambricon MLU100芯片,标志着寒武纪已成为中国第一家(也是世界上少数几家)同时拥有终端和云端智能处理器产品的商业公司。寒武纪公司如今主要的产品是Cambricon 1H和1M,分别为第二代和第三代IP架构。
华为从麒麟810芯片开始使用自研的达芬奇架构集成NPU,大大提升了芯片的AI处理能力,至今采用了华为NPU的手机AI高性能计算仍是卖点之一。2018年10月,华为还发布了最新的NPU芯片,包括用于云端训练的晟腾910和用于终端推理的晟腾310,晟腾系列NPU正式走入人们的视野。
2019年9月25日,在“2019云栖大会”上阿里正式对外发布了全新的含光800芯片。含光800是一款高性能的采用ASIC技术的用于云端推理的AI芯片NPU。1颗含光800的算力相当于10颗GPU,含光800推理性能达到78563 IPS,能效比500 IPS/W。相比传统GPU算力,性价比提升100%。
TPU是谷歌于2014年研发完成的一款专门为加速深层神经网络运算能力而设计的基于ASIC的计算机神经网络专用芯片。它是专注神经网络的加速运算器且其开发团队借鉴了寒武纪关于DianNao系列框架,因此我们在这里也将其划归为广泛意义上的NPU。TPU的主要创新在于采用大规模片上内存、用量化技术进行整数运算(使用8位低精度运算)和脉动阵列设计。
大数据与智能时代即将来临,深度学习训练与推理应用越来越广泛,无论是云端还是终端的应用,人工智能芯片都呼之欲出,而相比CPU+GPU+FPGA的芯片模式而言主要采用ASIC技术开发的定制NPU更是未来的象征。尽管NPU如今在一些特定领域还不能与GPU匹敌,但是毫无疑问他已经撼动了英伟达GPU在人工智能领域的地位,只要给他足够的时间成长,他将带动行业新的一轮技术革新。
参考文献:
[1] Tianshi Chen,Zidong Du,et al.DianNao[C],International Conference on Architectural Support for Programming Languages and Operating Systems. ACM, 2014:269-284.
[2] Luo T,Liu S,et al.DaDianNao[C],Ieee/acm InternationalSymposium on Microarchitecture. IEEE, 2015:609-622.
[3] Liu D,Chen T,et al.PuDianNao[C],TwentiethInternational Conference on Architectural Support for Programming Languages andOperating Systems. ACM, 2015:369-381.
[4]田泽,嵌入式技术发展的一些思考[C],微纳电子与智能制造, Vol.2, No.1, 2020:1-4.
[5] evolove,AI芯片:寒武纪NPU设计分析(DianNao):https://blog.csdn.net/evolone/article/details/80765094
[6] 阿里达摩院:含光NPU的算法与架构: https://blog.csdn.net/achuan2015/article/details/102680334