一种优化人工神经网络的方法与流程

文档序号:11216997阅读:3101来源:国知局
一种优化人工神经网络的方法与流程
本发明涉及人工神经网络(ann),例如卷积神经网络(cnn),尤其涉及如何基于嵌入式fpga实现压缩和加速的卷积神经网络。
背景技术
:基于人工神经网络,尤其是卷积神经网络(cnn,convolutionalneuralnetwork)的方法在很多应用中都取得了极大的成功,尤其是在计算机视觉领域一直得到最强大的和广泛使用。图像分类是计算机视觉(cv)中的一个基本问题。卷积神经网络(cnn)使得图像分类精度取得很大的进步。在image-netlargescalevisionrecognitionchallenge(ilsvrc)2012,krizhevsky等人表示,通过在分类任务取得84.7%的前5项准确率,其中cnn具有很大作用,这是明显高于其他传统的图像分类方法。在接下来的几年里,例如在ilsvrc2013,ilsvrc2014和ilsvrc2015,精度提高到88.8%,93.3%和96.4%。虽然基于cnn的方法具有最先进的性能,但与传统方法相比需要更多的计算和内存资源。大多数基于cnn方法必须依赖于大型服务器。然而,对于嵌入式系统有一个不可忽视的市场,这个市场要求高精度且能实时目标识别,如自动驾驶汽车和机器人。但对于嵌入式系统,有限的电池和资源是严重的问题。为了解决这个问题,许多研究者提出了各种cnn加速技术,从计算到内存访问方面都进行了尝试。例如,参见c.zhang,p.li,g.sun,y.guan,b.xiao,andj.cong,的文章“optimizingfpga-basedacceleratordesignfordeepconvolutionalneuralnetworks”;t.chen,z.du,n.sun,j.wang,c.wu,y.chen,ando.temam的文章“diannao:asmall-footprinthigh-throughputacceleratorforubiquitousmachine-learning”;y.chen,t.luo,s.liu,s.zhang,l.he,j.wang,l.li,t.chen,z.xu,n.sun等人的文章“dadiannao:amachine-learningsupercomputer”;d.liu,t.chen,s.liu,j.zhou,s.zhou,o.teman,x.feng,x.zhou,andy.chen的文章“pudiannao:apolyvalentmachinelearningaccelerator”;z.du,r.fasthuber,t.chen,p.ienne,l.li,t.luo,x.feng,y.chen,ando.temam的文章“shidiannao:shiftingvisionprocessingclosertothesensor”;s.chakradhar,m.sankaradas,v.jakkula,ands.cadambi的文章“adynamicallyconfigurablecoprocessorforconvolutionalneuralnetworks”;c.farabet,b.martini,b.corda,p.akselrod,e.culurciello,andy.lecun的文章“neuflow:aruntimereconfigurabledataflowprocessorforvision”;c.farabet,c.poulet,j.y.han,andy.lecun的文章“cnp:anfpga-basedprocessorforconvolutionalnetworks”。然而,大多数现有技术只考虑小型cnn模型的加速,例如:用于简单的任务,如mnist手写数字识别,5层lenet,参见y.lecun,l.bottou,y.bengio,andp.haffner的文章“gradient-basedlearningappliedtodocumentrecognition”。用于大规模图像分类的现有cnn模型具有极高的复杂性,因此只能存储在外部存储器中。在这种情况下,内存带宽成为cnn加速的一个严重问题,尤其是对于嵌入式系统。此外,以往的研究侧重于卷积(conv)层加速,而完全连接(fc)层并没有深入研究。因此,我们需要更深的研究嵌入式fpga平台来解决这些问题。然而,基于卷积神经网络(cnn)的方法是计算密集型和资源消耗型,因此很难被集成到嵌入式系统,例如智能手机、智能眼镜,和机器人。fpga是用于卷积神经网络加速的最有前途的平台之一,但有限的带宽和片上内存大小限制了cnnfpga加速器的性能。技术实现要素:在本申请中,我们提出如何部署全部cnn给fpga嵌入式平台加速器。首先,针对目前现有cnn模型的深入分析,我们发现显示卷积(conv)层以计算为中心,全连接(fc)层以存储为中心。根据本发明的一个方面,我们提出了压缩、动态精度数据量化、编译的整体流程,对于cnn所有图层类型高效的卷积器设计提高带宽和资源利用率。例如,结果表明,当使用8/4-bit量化时,我们的数据量化流程被应用到深度vgg16模型时仅仅导致的0.4%的精度损失。本发明提出了一种优化人工神经网络(ann)的方法,其中所述ann至少包括:第1、第2、…第n卷积层(conv层),第1、第2、…第m全连层(fc层),其中所述n、m为正整数,所述ann可以接收输入数据,依次经过所述ann的所述n个卷积层和m个全连层中的每一层处理得到相应的特征图集,所述j为正整数,所述方法包括:压缩步骤,用于压缩所述n个ann的卷积层(conv层)、m个全连层(fc层)的权重参数;定点量化步骤,包括:权重量化步骤,把压缩后的ann的n个卷积层(conv层)、m个全连层(fc层)中每一层的权重参数从浮点数量化为定点数,其中针对各层的权重参数动态地选取量化范围,该量化范围在该层内部不变;数据量化步骤,把输入数据提供给所述ann,所述输入数据被所述ann的m个卷积层(conv层)、n个全连层(fc层)依次处理得到各个特征图集j,把各个特征集j从浮点数量化为定点数,其中针对各个特征图集j动态地选取量化范围,该量化范围在所述特征图集内不变;编译步骤,生成可以在专用加速器上运行的指令,以在所述专用加速器上部署所述ann,其中所述指令生成至少基于:所述权重量化步骤所输出的量化权重,以及所述数据量化步骤所选取的量化范围。根据本发明的另一个方面,提供特定的硬件设计来实现上述动态精度数据量化方案。本发明提出了一种用于实现ann的深度处理单元(dpu),包括:通用处理器模块(ps)和可编程处理器模块(pl),通用处理器模块(ps)包括:cpu,用于运行程序指令;数据和指令总线,用于所述cpu与所述pl之间的通信;外部存储器,用于保存:ann的权重参数和指令,以及需要被ann处理的输入数据(dataset1);可编程处理器模块(pl)包括:控制器(controller),用于获取外部存储器上的指令,并基于所述指令对复杂计算核进行调度;复杂计算核(computingcomplex),包括多个计算单元(pe),用于基于所述指令、权重和数据进行计算任务;输入缓冲区,用于准备所述复杂计算核计算需要使用的权重、输入数据、指令;输出缓冲区,保存中间数据和计算结果;直接存储器访问器(dma),与所述通用处理器模块的数据和指令总线相连接以用于pl和ps之间的通信,所述cpu配置可编程处理器模块(pl)的直接存储器访问器(dma)。根据本发明的又一个方面,提出了实现在嵌入式fpga上的cnn加速器设计,用于大规模的图像分类。附图说明图1(a)显示了典型的cnn的示意图。图1(b)显示了典型的cnn的各个卷积层、全连层以及特征图集的串联示意图。图2显示了现有cnn模型的推理过程中所需的计算复杂度和权重存储复杂度分的布比较。图3显示了本发明实施例的原理图。图4(a)显示了本发明实施例的优化cnn的整体流程图。图4(b)显示了本发明实施例的优化cnn被应用到专用加速器上的流程图。图5显示了图4(a)的流程图中压缩步骤的示意图。图6显示了图4(a)的流程图中量化步骤的示意图。图7显示了图4(a)的流程图中编译步骤的示意图。图8(a)显示了本发明实施例的实现cnn的硬件架构,其中包括通用处理器模块和可编程处理器模块。图8(b)、(c)显示了图8(a)所示的硬件架构中的可编程处理器模块中的更详细示图。图9显示了在图8a的硬件架构上实现cnn的conv层和fc层的工作进程。图10显示了根据图8a的本发明实施例的缓冲结构。图11显示了根据图8a的本发明实施例的conv层的存储模式。图12显示了根据图8a的本发明实施例的外部存储器的数据布局。图13显示了本发明另一实施例的实现cnn的硬件架构,其中进一步显示了可编程处理器模块的控制器的细节。具体实施方式本申请的一部分内容曾经被发明人姚颂的学术文章“goingdeeperwithembeddedfpgaplatformforconvolutionalneuralnetwork”(2016.2)所发表。本申请在其基础上进行了更多的改进。本申请中,将主要以图像处理为例来说明本发明对cnn的改进。深度神经网络(dnn)和循环神经网络(rnn)与cnn类似。cnn基本概念cnn在广泛的视觉相关任务中都达到最先进的性能。为帮助理解本申请中分析的基于cnn图像分类算法,我们首先介绍了cnn的基础知识,介绍图像网络数据集和现有cnn模型。如图1(a)所示,典型的cnn由一系列有序运行的层组成。cnn模型的参数被称为“权重”(weights)。cnn的第一层读取输入图像,并输出一系列的特征图(map)。下面的层读取由上一层产生的特征图,并输出新的特征图。最后一个分类器(classifier)输出输入图像可能属于的每一类别的概率。conv层(卷积层)和fc层(全连层)是cnn中两种基本层类型。conv层后,通常有汇集层(poolinglayers)。在本申请中,对于一个cnn层,表示第j个输入特征图(inputfeaturemap),表示第i个输出特征图(outputfeaturemap),bi表示第i个输出图的偏置项。对于conv层,nin和nout分别代表输入和输出特征图的数量。对于fc层,nin和nout分别代表输入和输出特征向量的长度。conv层(convolutionallayers,卷积层)的定义:conv层以一系列特征图作为输入,并以卷积内核卷积获得输出特征图。通常与conv层相连的非线性层,即,非线性激励函数,被施加到输出特征图中的每个元素。conv层可以用表达式1表示:其中gi,j是应用到第j个输入特征图和第i个输出特征图的卷积内核。fc层(fully-connectedlayers,全连层)的定义:fc层应用于输入特征向量上的一个线性变换:fout=wfin+b(2)w是一个nout×nin变换矩阵,b是偏置项。值得注意,对于fc层,输入的不是几个二维特征图的组合,而是一个特征向量。因此,在表达式2中,参数nin和nout实际上对应于输入和输出特征向量的长度。汇集(pooling)层:通常与conv层相连,用于输出每个特征图中的每个分区(subarea)的最大值或平均值。pooling最大值可以由表达式3表示:其中p是汇集内核的大小。这种非线性的“降采样”不仅为下一层降低了特征图的大小和计算,还提供了一种平移不变(translationinvariance)。cnn可用于前向推理过程中进行图像分类。但在对任何任务使用cnn之前,应该首先训练cnn数据集。最近的研究表明,对于一个给定任务的基于大数据集的前向培训的cnn模型可以用于其他任务,并在网络权值(networkweights)中实现高精度的微小调整,这个微小调整叫做“微调(fine-tune)”。cnn的培训主要是在大型服务器上实现。对于嵌入式fpga平台,我们专注于加速cnn的推理过程。image-net数据集image-net数据集被视为标准参考基准,以评估图像分类和目标检测算法的性能。到目前为止,image-net数据集已经在2万1千多个类别里收集了超过1400万幅图像。image-net为ilsvrc分类任务发布一个具有1000个类别、120万个图像的子集,大大促进了cv技术的发展。在本申请中,所有cnn模型通过ilsvrc2014训练集培训,通过ilsvrc2014验证集评估。现有cnn模型在2012年ilsvrc,supervision队使用alexnet,在图像分类任务中赢得了第一名,84.7%的前5精度。caffenet在复制alexnet的基础上有微小变化。alexnet和caffenet都包括5个conv层和3个fc层。在2013年ilsvrc,zeiler-and-fergus(zf)网络在图像分类任务中赢得了第一名,88.8%的前5精度。zf网络也有5个conv层和3个fc层。在ilsvrc2014,vgg模式实现了92.6%的前5精度,赢得图像分类任务的第二位。vgg模型包括5个conv层和3个fc层。基于层的确切数量,有几个版本的vgg模型,包括vgg11、vgg16和vgg19,如表1所示。表1:vgg模型中的层数如图1(b)所示,从输入-输出的数据流向角度来说明一个典型的cnn。图1(b)所示的cnn包括5个conv组conv1、conv2、conv3、conv4、conv5,3个fc层fc1、fc2、fc3,以及一个softmax判定函数,其中每个conv组包括3个卷积层。cnn的复杂性分析时间复杂度cnn的一个层的时间复杂度可以由推理过程中乘法运算的数量来评估。在一个conv层,每个卷积内核是一个应用于r×c维输入特征图的k×k滤波器。内核的数量等于nin×nout。因此,根据表达式1,这个conv层的复杂性是对于汇集层(pooling)和fc层,时间复杂度是对于汇集(pooling)层,nout等于nin从每个输入特征图汇集到相应的输出特征图,因此复杂性对于输入或输出的特征图的数量是线性。空间复杂度空间复杂度是指内存占用。一个conv层有nin×nout卷积核,每个核有k2的权重。因此,conv层的空间复杂度为fc层实际上是将乘法应用到输入特征向量,因此,fc层的复杂性通过对一个参数矩阵的大小来衡量,如表达式8所示:由于汇集(pooling)层没有权重,也就不需要空间。图2显示了现有cnn模型的推理过程中所需的计算复杂度和权重存储复杂度分的布比较。计算包括乘法、加法和非线性函数。如图2(a)所示,conv层的操作包含了cnn模型的大部分,从而conv层的时间复杂度比fc层高很多。因此,需要更多地注意加速conv层的操作。如图2(b)所示,对于空间复杂度,情况则很不同。fc层贡献了大部分的权重。由于fc层的每个权重在一次推理过程只使用一次而没有机会复用,因为加载这些权重可能需要很长时间,有限的带宽可以显著降低性能。针对cnn的计算复杂度分布和存储复杂度分布,本申请提出了一种优化方法。如图3所示,为了加速cnn,我们从处理流程和硬件架构的角度提出了一整套技术方案。在图3左侧显示了人工神经网络模型,即本申请所要优化的目标。在图3中间显示了如何压缩cnn模型以减少内存占用和操作数量,同时最大限度地减少精度损失。在图3右侧显示了为压缩后的cnn提供的专用硬件。图4(a)显示了根据本发明一个实施例的优化cnn的整体流程图。在图4(a)中,输入的是原始的人工神经网络。步骤405:压缩压缩步骤可以包括对cnn模型进行修剪。网络修剪被证明是一种有效的方法,以减少网络的复杂性和过度拟合。例如,参见b.hassibiandd.g.stork的文章“secondorderderivativesfornetworkpruning:optimalbrainsurgeon”。如图5所示,在s.han,j.pool,j.tran,andw.j.dally的文章“learningbothweightsandconnectionsforefficientneuralnetworks”中,韩松等人提出了一种通过修剪来压缩cnn网络的方法。初始化步骤501,把卷积层、fc层的权重初始化为随机值,其中生成了具有完全连接的ann,所述连接具有权重参数,训练步骤505,训练所述ann,根据ann的精度,来调整ann的权重,直到所述精度达到预定标准。根据本发明的一个实施例,所述训练步骤基于随机梯度下降算法来调整所述ann的权重,即随机调整权重值,基于ann的精读变化来进行选择。关于随机梯度算法的介绍,可以参见上述“learningbothweightsandconnectionsforefficientneuralnetworks”。所述精度可以量化为,针对训练数据集,ann的预测结果和正确结果之间的差异。修剪步骤510,基于预定的条件,发现ann中的不重要的连接,修剪所述不重要的连接。具体而言,被修剪的连接的权重参数不再被保存。根据本发明的一个实施例,所述预定条件包括以下任意之一:连接的权重参数为0;或连接的权重参数小于预定值。微调步骤515,将被修剪的连接重新设置为权重参数值为零的连接,即,恢复所述被修剪的连接,并分配权重值为0。在步骤520,判断ann的精度达到预定标准。如果没有,重复505、510、515步骤。此外,对权重矩阵w进行svd处理也是一种压缩手段。由于fc层贡献了大多数内存占用,在减少fc层的权重的同时保持一定的精度很有必要。在本申请的一个实施例中,采用svd压缩fc层。考虑fc层fout=wfin+b,权重矩阵w能被分解成w≈udsdvd=w1w2,其中sd是对角矩阵。通过选择svd首个d的奇异值,例如矩阵ud,sd,和vd的等级,时间和空间复杂度可以从o(nin·nout)降低到o(d·nin+d·nout)。由于即使当d比nin和nout小得多时精度损失微小,因此能够相当程度地减少时间消耗和内存占用。步骤410:数据量化对于一个定点数,它的值表示如下:其中bw是数的位宽度,fl是可以是负的部分的长度(fractionallength)。如图6(a)所示,为了将浮点数转换成定点数的同时得到最高精度,我们提出了一个动态精度数据量化策略和自动工作流程。与以前的静态精度量化策略不同,我们所给出的数据量化流程中,fl对于不同的层和特征图集是动态变化的,同时在一个层中保持静态,以尽量减少每层的截断误差。如图6(b)所示,本申请所提出的量化流程主要由两个阶段组成。610:权重量化阶段。在步骤610,权重量化阶段的目的是找到一个层的权重的最佳fl,如表达式10:其中w是权重,w(bw,fl)代表在给定的bw和fl下的w的定点格式。在本发明的一个实施例中,首先分析了每一层权重的动态范围,例如通过采样进行估计。之后,为了避免数据溢出,初始化fl。此外,我们在初始fl的邻域搜索最优fl。根据本发明的另一个实施例,在权重定点量化步骤中,采用另一种方式来寻找最佳fl,如表达式11。其中,i代表在0~bw位中的某一位,ki为该位权重。采用表达式11的方式,对不同的位给予不同的权重,再计算最优的fl。620:数据量化阶段。数据量化阶段旨在为cnn模型的两层之间的特征图集寻找最优fl。在此阶段,使用训练数据集(benchmark)来训练cnn。所述训练数据集可以为dataset0。根据本发明的一个实施例,首先完成所有cnn的conv层、fc层的权重量化610,再进行数据量化620。此时,把训练数据集输入到已经被量化权重的cnn,经过conv层、fc层的逐层处理,得到各层输入特征图。针对每一层输入特征图,使用贪婪算法逐层比较定点cnn模型和浮点cnn模型的中间数据,以减少精度损失。每一层的优化目标如表达式12所示:在表达式12中,当a表示一层(例如某一conv层或fc层)的计算,x表示输入,x+=a·x时,x+代表该层的输出。值得注意的是,对于conv层或fc层,直接结果x+具有比给定的标准更长的位宽度。因此,当最佳fl选择时需要截断。最后,整个数据量化配置生成。根据本发明的另一个实施例,在数据定点量化步骤中,采用另一种方式来寻找最佳fl,如表达式13。其中,i代表在0~bw位中的某一位,ki为该位权重。与表达式11的方式类似,对不同的位给予不同的权重,再计算最优的fl。上述数据量化步骤620得到最优的fl。此外,根据本发明的另一实施例,权重量化和数据量化可以交替进行,不同于图6(b)所示的定点量化步骤610和620依次进行。就数据处理的流程顺序而言,所述ann的卷积层(conv层)、全连层(fc层)中各个层为串联关系,所述训练数据集被所述ann的conv层和fc层依次处理时得到的各个特征图集。具体而言,所述权重量化步骤和所述数据量化步骤根据所述串联关系交替进行,其中在所述权重量化步骤完成其中某一层的定点量化之后,对该层所输出的特征图集执行数据量化步骤。我们使用caffenet,vgg16和vgg16-svd网络探索不同的数据量化策略,结果如表2所示。所有结果在caffe框架下得到。表2:不同的数据量化策略与现有神经网络的探索1在实验10和13中的权重位“8或4”是conv层为8位和fc层为4位。2在实验8中的数据精度“2-5或2-1”是conv层之间的特征图为2-5和fc层之间的特征图为2-1。·对于caffenet,如实验1中所示,当使用32位浮点数时,前5精度为77.70%。当采用静态精度16位量化和8/4位动态精确量化时,前5的精度结果分别为77.12%和76.64%。·具有静态精度量化策略的vgg16网络在实验4和8进行测试。如实验4所示,单浮点vgg16网络的前5精度88.00%。使用16位量化配置时,只有0.06%的精度损失。然而,当使用8位静态精确量化,由于fc层之间的特征图量化为0,故没有可用的配置。如exp8所示,在使用8位量化时至少需要两个精度(precisions),准确性大大降低。·具有动态精度量化的vgg16网络实验结果如实验9和10所示。当8位动态精确量化用于数据和权重时,前5的精度是87.38%。在conv层和fc层使用8/4位动态精度量化的权重甚至分别达到更高的精度。如实验10所示,在这种情况下,前5的精度为87.60%。·vgg16-svd网络结果如实验11-13所示。与浮点vgg16模型相比,浮点vgg16-svd只有0.04%的精度损失。然而,当采用16位动态精度的量化时,前5的精度降至86.66%。使用8/4位动态精度量化,前5精度进一步下降到86.30%。结果表明,与静态精度的量化相比,动态精度量化更有利。动态精确量化,我们可以使用更短操作表达,同时仍实现类似的精度。例如,与16位量化相比,8/4位量化减半了中间数据的存储空间,减少了四分之三cnn模型的内存占用。除此之外,还可以显著提高带宽的利用率。步骤415:编译(compiling)图7的显示了步骤415的流程图。输入700:已经经过量化后的神经网络模型。排序步骤(串联化)705:对于输入的神经网络模型,根据其依赖关系排序处理顺序,如图1b所示的串联关系。分片步骤710:用于基于ann的每一层的计算需求以及所述专用加速器的计算和存储能力,对输入数据进行分片。例如,假设神经网络的某一层输入featuremap大小为n*n,共有c个通道(举例,rgb图像是3个通道),而加速器片上资源最多一次性处理m*m大小的featuremap以及d个通道,则将该层划分为[(n*n)/(m*m)+1]*[(c/d)+1]个片(tile,[]表示向下取整),每一块分别计算。复用步骤715:把被分片之后的输入数据载入所述专用加速器的缓存器中,在涉及所述被分片后的输入数据的卷积运算中,对载入所述专用加速器的缓存器中的所述被分片后的数据进行重复使用。例如,对于片上正在计算的m*m*d的featuremap,读取卷积核与其发生卷积运算,对这部分的featuremap进行复用,不反复读取。指令生成720:根据分片和复用结果,可以确定每一次读取的数据是哪些,根据数据存放的地址,以及每一次分片的数据具体执行哪些操作,生成可以在加速器上运行的指令。输出730:可以在专用加速器上允许的指令,从而在所述专用加速器上实现ann。根据本发明的另一个实施例,图7的编译过程还可以包括配置步骤740,以基于加速器的硬件配置来调整、优化分片步骤710和后续的数据重用步骤715、指令生成步骤720。所述配置步骤740可以输入设计参数,例如专用加速器的pe(处理单元)的个数,每个pe所包含的卷积器的个数,卷积器的大小等。表3列出了编译器针对1个conv层所生成的指令,包括4个阶段(phasetype)。其中第1阶段是载入数据,第2、3阶段是计算,第4阶段是保存并输出数据。表3:编译器对1个conv层所生成的指令indexpoolbypassnlbypasszeroswitchresultshiftbiasshiftwriteenpeenphasetypepicnumtilesizelayertype1xxxxxno2first2trconv2yesyesbiasxbsno2cal2trconv3nonozeroxxpe2cal2trconv4xxxrsxddr2last2trconv指令的含义简单说明如下:·poolbypass和nlbypass,如果需要,则用于旁路汇集池(pool)和非线性(nl)模块。所述非线性nl模块可以是relu函数。·zeroswitch(零开关)用于将选择的零或偏置数据添加给加法器树的结果,因为通常需要不止一个阶段计算最终结果,所述偏置仅加一次。·resultshift(结果移位)和biasshift(偏置移位)描述了数据的比特数和数据移位的方向,用于动态数据量化。·writeen用于从输出缓冲区到外部存储器或pes切换数据以用作复用。·peen给我们提供了设置几个pes的灵活性,如果需要为空置。当计算能力满足需求,这可以帮助节约能源。·phasetype(阶段类型)有助于控制器区分这些阶段并发出相应的信号。有几个阶段需要特别照顾,例如,最后一层最后阶段的最后输出图像,应没有更多的权重或数据加载,输入缓冲区应该与以前阶段配置不同。·picnum(图片数)和tilesize/layertype(分片尺寸/层类型)帮助控制器配置输入缓冲区和输出缓冲区。以下将结合图8的硬件架构更具体地说明图7的编译步骤。如图4(a)所示,优化cnn的方法流程包括步骤405,410和415。此外,根据本发明另一实施例,还包括配置步骤430,用于输入设计参数,从而实现定制化的量化步骤410和编译步骤415。所述设计参数可以包括:比特位宽(bw),所述量化步骤410把浮点数量化为具有所述比特位宽bw的定点数。另一方面,所述设计参数还可以包括:用于编译步骤415所生成的指令的专用加速器的相关参数。例如,所述专用加速器的计算单元(pe)个数,每个计算单元的卷积核(convolver)个数,每个卷积核的大小等。这些参数可以帮助编译步骤415进行更优化的处理,例如,执行定制化的分片步骤710和数据重用步骤715,从而充分利用专用加速器的资源。如图4(b)所示,编译步骤415所生成的指令被专用加速器440所执行。专用加速器440接收输入数据4500,输入数据4500是需要被人工神经网络处理的数据,例如语音、文本或图像数据。专用加速器440执行编译步骤415所提供的指令,对输入数据4500进行处理,得到输出数据4600。输出数据4600是人工神经网络对输入数据4500的处理,例如,图像识别或语音识别、文字识别。图8显示了本发明实施例的实现cnn的硬件架构,例如,图4(b)中的专用加速器440。以前的cnn加速器设计可以大致分为两组:第一组专注于计算引擎,第二组是优化内存系统。以下结合图8介绍我们的cnn加速器的设计。在本申请中,我们提出一个cpu+可编程处理模块(例如fpga)异构架构来允许cnn。图8a显示了该系统架构的概图。整个系统可以分为两个部分:可编程处理模块(pl)8200和通用处理系统(ps)8100。根据本发明的一个实施例,pl8200是fpga芯片,设置有:复杂计算(computingcomplex)8220、芯片缓冲区(8240,8250)、控制器8210和直接存储器访问(dma)8230。复杂计算核(8220computingcomplex)包括处理单元(pes)8215,其负责在cnn的conv层、汇集层,和fc层的大多数的计算任务。芯片缓冲区包括输入缓冲区8240和输出缓冲区8250,准备pes使用的数据并存储结果。控制器8210,获取外部存储器上的指令、对其解码并对除了pl的dma以外的所有模块进行调配。dmas8230用于传输ps端的外部存储器和pl端的芯片缓冲区之间的数据和指令。ps8100包括通用处理器(cpu)8110和外部存储器8120。外部存储器8120存储所有的cnn模型参数、数据和指令。通用处理器8110运行裸机程序并通过配置dmas帮助协调整个推理阶段。此外,也在cpu上实现softmax函数,因为这个函数只出现在整个cnn的最后一层,把它实现在fpga上会带来不可避免的设计开销而没有性能改善。例如,基于图8(a)的专用加速器,完整的图像推理过程包括按顺序执行的三个步骤:数据准备、数据处理和结果输出。数据准备。在此阶段,计算所需的所有数据,包括:存储在外部存储器图像数据、模型数据和控制数据。控制数据包括dmas使用的缓冲区描述符(bd)和控制器使用的指令。此时,尚未从相机获得图像数据。数据处理。当所有的数据准备好时,cpu主机开始给dmas配置预先存储在外部存储器中的bds。配置的dma加载数据和指令给控制器,触发pl上的计算过程。每次dma中断,cpu主机为每个dma的bd列表加上自持指针地址,配置新bds。这一阶段工作直到最后的bd转移。结果输出。在收到来自dma的最后的bd中断,处理器主机将softmax函数用于来自pes的最终结果,并输出结果给uart端。图8(b)显示了pe及其涉及的模块结构。pe8215由五部分组成,包括:复杂卷积核(convolvercomplex)8221,加法器树(addertree)8222,非线性模块(non-linearitymodule)8223,最大汇集(max-pooling)模块8224和偏置移位模块(biasshift)8225、8226。图8(c)显示复杂卷积核(convolvercomplex)的更多细节。复杂卷积核(convolvercomplex)采用经典的行缓冲设计,参见b.bosi,g.bois,andy.savaria的文章“reconfigurablepipelined2-dconvolversforfastdigitalsignalprocessing”。当输入数据经过行布局的缓冲,行缓冲释放一个窗口选择函数给输入图像。因此一个乘法器和一个加法器树跟随被选择窗口,计算卷积,每个循环一批数据。由于fc层的瓶颈在于带宽,我们使用这个模块计算fc层的矩阵向量乘法效率不高。为了实现这个功能,通过在每一行的结尾使用mux,设置了行缓冲的每一行和内核大小的延迟。在给出的实现方案中,内核大小为3。当输入数据经过缓冲,得到一个在选择窗口中每9个循环的全新向量,并做一个向量内积。因此一个卷积器可以用一个大小为9的向量做一个矩阵乘法。如图8(b)和图8(c)所示,加法器树(ad)8222对卷积器的所有结果求和。它可以加上来自输出缓冲区的中间数据或来自输入缓冲区的偏置数据。如图8(b)所示,非线性(nl)模块8223适用于非线性激励函数的输入数据流。例如,所述函数可以是relu函数。如图8(b)所示,最大汇集(max-pooling)模块8224利用行缓冲区,将特定的2×2窗口用于输入数据流,并输出其中的最大值。如图8(b)所示,偏置移位(biasshift)模块8225和数据移位(datashift)模块8226的设计支持动态量化范围的转换。具体而言,偏置移位模块针对权重进行移位。数据移位模块针对数据进行移位。根据图4a的量化步骤的量化结果,输入偏置将被偏置移位模块而移位。对于一个16位的实现,偏置被扩展到32位,以与卷积结果相加。输出数据将被数据移位模块而移位,并减少到原来的宽度。卷积核的大小通常只有几个选项如3×3、5×5和7×7。所有vgg16模型的卷积内核是3×3维,从而在复杂卷积核,为卷积操作设计的二维卷积器只是一个3×3窗口。图9显示了在图8的硬件架构上实现cnn的conv层和fc层的工作负载进程。chakradhar等人指出,在cnn工作负载中主要有三种类型的并行:·运算级(细粒度的)并行;·输出内部(intra-output)并行(多个输入特性相结合,创建一个单一的输出),和·输出之间(inter-output)并行性(同时计算多个独立特性)。在我们的实现中涉及所有三种类型的并行。二维卷积器实现运算级并行。在每个pe有多个卷积器同时工作,实现输出内部(intra-output)并行。设置多个pes实现输出之间(inter-output)并行。由于芯片上的存储器有限,分片是所必需的。对于conv层分片,我们根据行(列)的每一因子tr(tc)将输入图像分片。我们根据因子ti(to)分片输入(输出)特征图nin(nout)。对于fc层,我们将每个矩阵分为ti×to的片。对于复用,每个输入碎片块(向量)被复用的次数是reuse_times。我们图示了这个工作负载进程机制如何用于conv层,如图9(a)(b)所示,和fc层,如图9(c)所示。在每一个计算阶段,控制器解码一个16位指令为芯片缓冲区和pes生成控制信号。一条指令包括如表3所示的各种信号。继续参考表3,指令1命令输入缓冲区加载所有所需的被相位类型信号区分的数据。peen使两个pes并行工作。当ti=2。图片数(picnum)设置为2,分片大小设置为tr。层类型被定义为conv层。在这个阶段,所有其他的信号都无用。指令2开始计算输出层的四块分片块。因为它们都是中间结果,pool和nl模块被旁路。偏置在这个阶段仅被加一次。偏置移位为偏置数据规定移位配置。输出缓冲区只收集中间数据且不写到任何地方。在指令3中,writeen设置为“pe”,命令输出缓冲区将中间结果发送回pes。不再加偏置,因此零开关设置为零。由于在这个阶段生成的所有数据是最后结果,pool和nl旁路被禁用,以让来自ad的数据依次进入这两个模块。在最后的指令4中,假设conv层是最后一层,那么没有模块在pe运行。writeen设置为“ddr”,命令输出缓冲区将结果反写到外部存储器。结果移位设置为将结果数据如我们想要的进行移位。通过设置阶段类型为last,这一阶段被控制器所识别。参见图10,介绍了存储系统的设计,旨在为pes有效供给数据。首先介绍了缓冲区的设计。之后,介绍conv和fc层的数据布局机制。如图10所示,有pl上有2个芯片缓冲区,输入缓冲区和输出缓冲区。输入缓冲区存储偏置、图像数据和权重。输出缓冲区存储来自pes的结果,并在适当时间提供中间结果给pes。为叙述简单,我们定义三个参数,如图10所示:·datain_port_num。每个周期通过dma传输的数据的最大值。·weightin_port_num。每个周期通过dma传输的权重的最大值。·dataout_port_num。每个周期通过dma传输的结果的最大值。在conv层,每个阶段所需的权重总量远小于图像数据的数量,而在fc层,权重的数量远远超过输入向量的数据量。因此,我们在数据缓冲区保存fc层的权重,数据缓冲区存储能力比权重缓冲区大,并将输入数据向量保存给权重缓冲区。为了减少不必要的外部存储器访问延迟,我们优化存储器空间的数据存储模式,原则是最大化的每个dma事务的突发长度。图11显示了一个简单的例子,如何在具有max-pooling的conv层布局输入和输出数据。希望能连续储存在每个图片中相同的相对位置的分片。因此,在每个阶段,我们能够连续加载全部输入分片用于计算。输出特征图将是下一层的输入特征图,因此也适用相同的存储模式。conv层与汇集层和其他层有轻微区别。经过一个2×2汇集层后,结果仅是分片的四分之一。在图11中,out(2,1)而非(1,2),在out(1,1)之后被计算。这意味着相邻结果分片不连续存储在外部存储器中。如果一旦生成就写每个结果分片,突发长度(burstlength)将只有tr/2,这将大大降低外部存储器的利用。为了解决这个问题,增加了内存存储器的预算。在生成out(1,2)前,我们将out(1,1)到out(4,1)缓存,然后一起写out(1,1)和out(1,2)。这一策略增加了突发长度到tr×tc/2。fc层的数据布局fc层的计算速度主要是受带宽限制。通过这种方式,使用特定的硬件加速fc层并不有效。考虑这一问题,这里提出的系统使用pes中的复杂卷积核(convolvercomplex)进行fc层运算。这种情况下,我们需要充分利用具有当前pl结构的外部存储器的带宽。系统中分配一个长度为900的缓冲区,与一个pe的64计算核中的每个核的tr×tr相同。计算conv层时,缓冲区逐一填充。为了减少用于填充缓冲区的额外数据路由逻辑,同时在获取计算fc层的数据时保持较长的突发长度,安排在外部存储器中保存权重矩阵。首先按照64×9块和100行划分了整个矩阵,这样一块可以在一个阶段处理。图12(a)示出没有数据布局的fc层。当突发长度是9时,需要64×100个dma运算去加载一个块。图12(b)示出每一块中的数据布局。通过如图12(b)所示的数据布局,仅需要一个dma运算取加载整个块,且有较长的突发长度,以确保外部存储器带宽的高利用率。图13显示了根据本发明的另一实施例的硬件架构,尤其是控制器8210的更多细节。如图13所示,从信号处理流程的角度来理解图13的硬件架构。输入指令通过缓冲器8240被读入控制器8210。控制器8210包括指令译码模块,用于对指令进行硬件解码,转化为控制信号,用以执行计算。控制器8210还包括调度模块,用于基于所述译码后的指令来调度多个计算单元8215(pe)。控制器8210还包括中断模块,当某些任务完成时,控制器将中断信号发送给上位机(例如,cpu8110),cpu根据中断信号发送数据读写指令。具体而言,一轮计算完成时,当前的一组数据已经可以不再继续缓存,控制器8210返回中断信号1。cpu获得该信号后向dma8230发送下一条数据输入指令。得到一组结果时,控制器8210返回中断信号2。cpu8110获得该信号后,向dma8230发送下一条数据输出指令。当一组输入完成且输出缓存空闲时,控制器8210从缓冲器8240读入一条指令开始计算。因此,通过所述中断模块,控制器实现了以中断为基础作为交互机制。此外,根据本发明的另一实施例的控制器还包括指令粒度转换模块(未示出),能够把粗粒度变为细粒度。例如,如表3的4个阶段指令,经过指令粒度转换模块被变为更多的指令,提高效率。可替换地,参照图7,指令生成步骤720还可以包括指令粒度转换步骤(未示出),用于基于专用加速器所包括的计算单元的个数等参数,把粗粒度指令转换为细粒度指令。在这种情况下,由编译步骤415(例如,指令生成步骤720)实现指令粒度转换,而非控制器8210来实现指令粒度转换。这样,可以简化控制器8210的结构,节省可编程逻辑模块的更多资源用于pes。需要说明的是,本说明书中的各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1