用于位宽分区的神经网络加速器及其实现方法与流程

文档序号:13137867阅读:346来源:国知局
用于位宽分区的神经网络加速器及其实现方法与流程

本发明是关于计算机视觉技术,特别是关于一种用于位宽分区的神经网络加速器及其实现方法。



背景技术:

近些年来,卷积神经网络在许多计算机视觉应用中取得了巨大的进展,比如图像识别、视频分类、手势识别等。最近,随着越来越多的基于卷积神经网络(cnn)算法的提出,cnn的识别精度被极大地提升,在2015年的ilsvrc会议上识别精度达到了96.4%。但是cnn为了达到如此高的识别精度,在cnn中需要引入非常复杂的算法,这些算法会增加硬件计算资源的开销,而且极大地限制了cnn在硬件层面的性能提升。因此,现在有许多的针对cnn的加速方法被提出以增加cnn的计算性能,比如设计cnn专用芯片、利用fpga计算加速等方法。在这些方法中,基于fpga的cnn加速器设计方法被广泛的采用,因为fpga具有高性能、设计灵活、快速运算时效等特点。

典型的cnn由多个层组成,包括卷积层和全连接层。对于图像识别应用,图像在通过卷积和全连接层之后变成高级特征图像。最后,分类器读取这些提取的特征并输出图像可能属于的每个类别的概率。卷积是cnn中最关键的操作,并且占据了90%以上的算法操作量。因此提升卷积层的性能是提升cnn计算性能的核心,通常大部分的硬件加速器设计是围绕卷积层来做的。

现在主流的基于fpga的加速器设计方法包括c.zhang等人在“optimizingfpga-basedacceleratordesignfordeepconvolutionalneuralnetworks”(fpga,2015)中提出的方法,通过设计一个单一位宽的计算处理单元(computationalprocessor—cp),来迭代地计算cnn的每一层。但是,s.anwar等人在“fixedpointoptimizationofdeepconvolutionalneuralnetworksforobjectrecognition”(icassp,2015)中已经证明卷积神经网络的每一层具有不同的位宽需求。因此如果用单一选择的位宽对所有层来计算,会导致cnn的所有层选择最大位宽需求的层的位宽,而具有短位宽需求的层不得不和长位宽需求的层的位宽保持一致,这样导致了fpga的资源利用率很低,也阻碍了加速器性能的进一步提升。yongmingshen等人在“overcomingresourceunderutilizationinspatialcnnaccelerators”(fpl,2016)中提出使用多个cp来并行的计算cnn的每一层,这样虽然提升了计算的吞吐量,但是却依然忽略了卷积神经网络每层位宽需求不同的这一特性,每个cp都使用相同的位宽进行设计,这样也造成了dsp计算资源的浪费,想要进一步提升加速器的性能变得非常困难。

为了利用cnn每一层具有不同位宽需求的这一特点,patrickjudd等人在“stripes:bit-serialdeepneuralnetworkcomputing”(micro,2016)中设计了一种每层的运算时间和每层位宽需求成比例的设计方法,这样就很大程度的提升了资源利用效率,进一步提升了cnn加速器的性能。但是这种设计方法把卷积神经网络中的乘累加操作转换为了与或逻辑运算,这样虽然提升了加速器的运算性能,但使得硬件面积增加了35%,但是很大程度上牺牲了cnn的硬件面积指标。



技术实现要素:

本发明实施例提供了一种用于位宽分区的神经网络加速器及其实现方法,以对多个短位宽数据进行乘累加操作,增加dsp利用率,提高加速器的计算吞吐量。

为了实现上述目的,本发明实施例提供了一种用于位宽分区的神经网络加速器,该神经网络加速器包括:多个位宽不同的计算处理单元,输入缓存器,权重缓存器,输出缓存器,数据位移器及外部存储器;

所述输入缓存器,权重缓存器,输出缓存器及数据位移器连接至所述外部存储器;所述的计算处理单元分别与对应的输入缓存器,权重缓存器及输出缓存器连接;所述数据位移器连接至对应的输出缓存器;

各个计算处理单元从对应的输入缓存区及权重缓存器获取与其位宽一致的神经网络层的数据,并对获取的数据进行并行处理;

所述数据位移器用于将当前计算处理单元输出的数据的位宽转换为与该当前计算处理单元对应的下一计算处理单元的位宽一致;

外部存储器,用于存储计算处理单元处理前及处理后的数据。

一实施例中,所述数据位移器具体用于对数据进行截位或者补0的方式进行位宽转换。

一实施例中,所述外部存储器根据位宽被划分为不同的部分,每个部分分别存储对应位宽的数据。

一实施例中,所述输入缓存器及权重缓存器的位宽与对应的计算处理单元位宽一致。

一实施例中,所述输出缓存器的位宽与对应的计算出来单元的位宽一致。

一实施例中,所述神经网络为卷积神经网络。

为了实现上述目的,本发明实施例还提供了一种用于位宽分区的神经网络加速器的实现方法,包括:

获取神经网络中各层数据的位宽信息;

基于所述位宽信息对dsp进行位宽分区处理,一个分区对应一个计算处理单元;

利用各所述计算处理单元对与其位宽一致的神经网络层的数据进行并行处理;

将当前计算处理单元并行处理后输出的数据的位宽转换为与该当前计算处理单元对应的下一计算处理单元的位宽一致。

一实施例中,该神经网络加速器的实现方法还包括:进行网络位宽优化,计算得到神经网络各层的网络位宽。

一实施例中,进行网络位宽优化,计算得到神经网络各层的网络位宽,包括:

利用空间搜索方法量化神经网络中的每层的最佳位宽长度,得到量化模型;

对所述量化模型进行训练。

一实施例中,利用空间搜索方法量化神经网络中的每层的最佳位宽长度,得到量化模型,包括:

对每层的数据范围进行数值范围分析,根据该数值范围,迭代地在整个神经网络空间中为每个卷积层找到最佳位宽长度。

利用本发明,可以对多个短位宽数据进行乘累加操作,增加了dsp利用率;采用不同位宽的cp并行计算神经网络的每层,提高了加速器的计算吞吐量;将dsp分为几个不同位宽的部分,各个不同位宽的部分分别计算对应位宽的cnn的每一层,增大了dsp的资源使用效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例的用于位宽分区的神经网络加速器的结构示意图;

图2为本发明实施例的神经网络加速器的实现方法流程图;

图3为本发明实施例的dsp优化详细解释示意图;

图4a及图4b为本发明实施例的dsp优化位宽推广示意图;

图5为本发明实施例的多cp系统流水线示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

现有技术中,主流的cnn加速器采用一个单一位宽的计算处理单元(cp)来迭代地计算cnn的每一层,但由于cnn每一层的数据位宽需求不同,这样的设计会导致很大的资源浪费。基于此,本发明实施例提供了一种用于位宽分区的神经网络加速器及其实现方法,根据cnn每一层的位宽需求不同,设计了一个能适应于每层不同位宽的加速器架构,大大提升了fpga的资源利用率。在赛灵思(xilinx)的virtex-7fpga板上对当前流行的alexnet和vgg网络进行测试,说明本发明能够比主流的基于fpga的cnn加速器设计提高6.2倍的性能。

图1为本发明实施例的用于位宽分区的神经网络加速器的结构示意图,该神经网络加速器是基于fpga实现的。如图1所示,该神经网络加速器包括:多个位宽不同的计算处理单元(computationalprocessor,简称cp),输入缓存器(inputbuffer),权重缓存器(weightbuffer),输出缓存器(outputbuffer),数据位移器(datashifter)及外部存储器(off-chipmemory)。图1所述的每个cp中的矩形框代表一个可重构计算单元(processingelement,简称pe)。

其中,输入缓存器,权重缓存器,输出缓存器及数据位移器连接至外部存储器。cp(cp1a-bit…cpnn-bit)分别与对应的输入缓存器,权重缓存器及输出缓存器连接。

输入缓存器及权重缓存器分别从外部存储器读取数据,该数据可以包括神经网络的参数以及中间计算数据。由于fpga上dsp资源的限制,数据送到cp上进行计算之前,一般缓存在fpga的外部存储器上。

一实施例中,输入缓存器的位宽及权重缓存器的位宽分别与对应的(即连接的)计算处理单元的位宽保持一致(相同)。

各个计算处理单元从对应的输入缓存区及权重缓存器分别获取与其位宽一致的神经网络层的数据,并对获取的数据进行并行处理。本发明的神经网络加速器设计有多个不同位宽的cp,对神经网络的每一层进行并行计算,提高了计算的吞吐量。

各个计算处理单元在完成对应数据的处理之后,将处理后的数据发送给与其连接的输出缓存器。为了节约fpga上的资源,输出缓存器的位宽保持与其对应cp的位宽一致。这样,利用低位宽的特性,将会有更多的空间在fpga上来设计出更多的bram。

数据位移器连接至对应的输出缓存器,从输出缓冲器获取对应的cp的处理数据。数据位移器用于将其对应的当前计算处理单元输出的数据的位宽转换为与该当前计算处理单元对应的下一计算处理单元的位宽一致,以支持数据在多个不同的位宽的cp中进行传输。

一实施例中,数据位移可以通过对低位数据截位或者对高位数据补0的方式进行位宽转换。例如,当cpi完成神经网络一层的计算后,利用对应的数据移位器去转换cpi的输出的数据位宽和cpi+1的数据位宽一致。这样,可以保证数据能正常地在多个不同位宽的cp中进行传输。

外部存储器,用于存储计算处理单元处理前及处理后的数据,输入缓存器及权重缓存器可以从外部存储器获取数据,数据位移器位宽转换后的数据也可以存在在外部存储器中。外部存储器根据位宽被划分为不同的部分,每个部分分别存储对应位宽的数据。

本发明神经网络可以为任意一种神经网络,例如卷积神经网络(cnn),本发明实施例中仅以卷积神经网络进行说明,并非用于限定。

利用本发明的神经网络加速器,可以对多个短位宽数据进行乘累加操作,增加了dsp利用率;采用不同位宽的cp并行计算神经网络的每层,提高了加速器的计算吞吐量;将dsp分为几个不同位宽的部分,各个不同位宽的部分分别计算对应位宽的cnn的每一层,增大了dsp的资源使用效率。

本发明实施例提供了一种用于位宽分区的神经网络加速器的实现方法,该实现方法可以应用于图1所示的神经网络加速器。图2为本发明实施例的神经网络加速器的实现方法流程图,如图2所示,该实现方法包括:

s201:获取神经网络中各层数据的位宽信息;

s202:基于所述位宽信息对dsp进行位宽分区处理,一个分区对应一个计算处理单元;

s203:利用各所述计算处理单元对与其位宽一致的神经网络层的数据进行并行处理;

s204:将当前计算处理单元并行处理后输出的数据的位宽转换为与该当前计算处理单元对应的下一计算处理单元的位宽一致。

图2所示的方法的执行主体可以为fpga,由图2所示的流程可知,本申请首先获取神经网络中各层数据的位宽信息,于所述位宽信息对dsp进行位宽分区处理,一个分区对应一个计算处理单元各个不同位宽的部分分别计算对应位宽的cnn的每一层,增大了dsp的资源使用效率;本申请还利用各所述计算处理单元对与其位宽一致的神经网络层的数据进行并行处理,提高了吞吐量;本申请还将当前计算处理单元并行处理后输出的数据的位宽转换为与该当前计算处理单元对应的下一计算处理单元的位宽一致,可以支持数据在多个不同的位宽的cp中进行传输。

在对神经网络的各层的数据进行处理之前,本发明实施例还需要进行网络位宽优化,计算得到神经网络各层的网络位宽。一实施例中,进行网络位宽优化,计算得到神经网络各层的网络位宽,可以首先利用空间搜索方法量化神经网络中的每层的最佳位宽长度,得到量化模型;然后对所述量化模型进行训练,得到神经网络中各层数据的位宽信息。

利用搜索方法量化神经网络中的每层的最佳位宽长度,具体实施时,可以通过对每层的数据范围进行数值范围分析,根据该数值范围,迭代地在整个神经网络空间中为每个卷积层找到最佳位宽长度,得到量化模型。

进行网络位宽优化时,具体地,由于神经网络每一层的具有不同的位宽需求,并且位宽需求通常低于32-bit。本发明利用量化和重训练的方式得到每层最佳的网络位宽。考虑到每个数据有fl位宽的小数位,首先可以利用空间搜索的方法在整个神经网络中为每一层找到最佳的fl长度可调节。具体实施时,需要对数据范围进行数值范围分析,然后根据数据的范围,迭代地在整个网络空间中为每个卷积层找到最佳的fl值确定位宽。当对每层数据量化完成之后,将得到的模型进行重新训练,以适应量化后的定点模型并且恢复一定的识别精度。

基于神经网络各层的位宽信息可以对dsp(digitalsingnalprocessor数字信号处理器)进行优化,即对dsp进行位宽分区处理,一个分区对应一个cp,不同的cp对神经网络的每一层进行并行计算,提高计算的吞吐量,并且提高了cnn加速器的利用率。

利用本发明实施例的神经网络加速器的实现方法,可以对多个短位宽数据进行乘累加操作,增加了dsp利用率;采用不同位宽的cp并行计算神经网络的每层,提高了加速器的计算吞吐量;将dsp分为几个不同位宽的部分,各个不同位宽的部分分别计算对应位宽的cnn的每一层,增大了dsp的资源使用效率。

下面结合几个具体的实施例,详细说明本发明。

首先结合具体的例子说明dsp计算优化:

当得到低位宽的网络层后,为了能利用这些低位宽数据,需要进行必要的dsp优化对低位宽数据下的dsp操作进行优化。图3和图4a及图4b说明了针对低位宽数据进行dsp操作优化的三个例子。每个dsp被简化成了一个乘法器和一个累加器。

如图3所示,乘法器由27-bit的端口p和18-bit的端口c组成,累加器r为48-bit。赛灵思了针对int-8(所有数据位宽为8-bit)数据的dsp优化,该优化能极大地提高8-bit数据位宽的dsp计算量。根据这个思路,本发明进一步设计了针对更多位宽范围的dsp计算优化。如图3,假设神经网络的层中a和b都是6-bit的数据,c是8-bit位宽的数据,由于a和b位宽很短,可以同时放进乘法器的一个端口中。a和b应该尽可能的分开,并且a和b之间的间隔至少应该保证是数据c的位宽长度,以保障乘积a×c不会影响到乘积b×c。图3中,27x18的乘法器被用来计算端口p和端口c中的数据的乘积。最后产生的乘积结果ac和bc被放到寄存器r中,dsp中的后加法器被用来计算产生的ac和bc,通过各自的数据流分开累加的方式。最后,一个dsp完成了两个乘累加运算,相比16-bit计算达到了两倍的计算量,极大提升了dsp的利用率。

如图4a所示,继续减小a和b的位宽到4-bit,c保持8-bit,通过乘法器相乘后,可以看到,两个乘积的间隔位宽变为了10-bit,最后的dsp也可以达到两倍的计算量。如图4b所示,当进一步减小c的位宽到6-bit,保持a和b的位宽为4-bit,便可以额外放置一个4-bit的数据d到乘法器的端口中,这样便可以实现3倍的计算量。可以看出,不同的位宽数据,通过这种优化方式,能达到不同的dsp计算量性能的提高,实现了使短位宽数据达到更高的dsp计算量的效果。

并行cp计算系统:

由于cnn每一层的位宽需求不同,使用一个单一位宽的cp对网络的所有层进行处理会导致很低的dsp利用效率。因此,本发明采用多个不同位宽的cp对cnn的每一层进行并行处理,提高dsp的利用效率,同时通过并行计算的方式提高运算的吞吐量。图5展示了一个并行计算的例子。对于一个5层的卷积网络,cp0处理第一层,第二层和第五层具有相同的位宽,被放到cp1进行计算,第三层和第四层具有相同的位宽,被放到cp2进行计算。

这三个不同位宽的cp通过并行处理的方式处理数据。cp系统的计算流水线分为多个segment(时间段),在每个segment期间,每个cp独立地处理各自的卷积层。为了防止在每个segment中出现数据冲突,每个cp仅仅处理来自上一个segment的数据。比如,l1在segmenti期间产生的输出,只有在segmenti+1期间才被l2作为输入。那就是说,对于一个五层的卷积网络,处理一张图片,需要经过4个segment的时间。但是,在4个segment时间段内,能同时处理4张图片,相当于一段segment就能处理一张图片,这对于cnn加速器来说是相当高效的。

dsp分区设计:针对多个cp系统,每个cp具有不同的位宽。对应到fpga具体设计上,需要将fpga上的dsp(进行基于位宽的分区处理,将dsp分为几个不同位宽的部分,每个部分对应不同位宽的cp,如此便能实现高性能的加速器计算。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1