基于数据流结构的低精度神经网络计算装置及加速方法

文档序号:26394230发布日期:2021-08-24 16:03阅读:58来源:国知局
基于数据流结构的低精度神经网络计算装置及加速方法
本发明涉及计算机体系结构
技术领域
,具体涉及基于数据流结构的低精度神经网络计算装置及加速方法。
背景技术
:随着应用场景的发展,深度神经网络(deepneuralnetwork,简称dnn)模型的规模变得越来越大,例如,alexnet和vgg16网络中分别包含6000万和1.38亿个参数。面对神经网络对计算能力日益增长的需求,量化已经被认为是一种有效减少推理工作量的技术。量化技术通过减小神经网络模型中数据的位宽,即降低数据的精度,尽可能的减小神经网络规模以节约存储空间,减少工作负载,从而在性能、功耗上获得整体收益。研究表明,经过量化之后得到的低精度神经网络可以达到fp32(单精度32位浮点数)的准确率。大量的研究工作围绕低精度神经网络加速器展开,目的是使计算机体系结构更适应低精度神经网络,充分发挥低精度神经网络的优势。例如,olaccel基于其ola量化算法设计了4比特的加速器结构,drq基于敏感区域识别算法设计了一种混合精度卷积阵列架构,bitfusion引入了动态比特级融合/分解思想,实现了一种可变位宽的比特级加速器,aqss基于随机计算方法实现了固定位宽的7比特加速器结构。但是这些加速器的设计与其提出的量化算法高度耦合,难以适用于其他量化方法和神经网络模型。粗粒度数据流结合数据流和控制流的特点,在性能、功耗和功能灵活性之间具有良好的平衡。当部署低精度神经网络时,存在计算资源和存储传输资源的浪费。技术实现要素:为解决上述现有技术中存在的问题,提供一种基于数据流结构的低精度神经网络计算装置,包括输入缓存区,输出缓存区、权重缓存区以及pe阵列,其中,pe阵列中的每个pe包括乘加部件,所述乘加部件以simd方式进行乘加运算。优选的,所述乘加部件还包括加法树,用于将4个通道的输入数据与对应卷积核的4个通道数据以simd方式进行乘法运算,并通过所述加法树累加到部分和数据,所述部分和数据为全精度数据。优选的,所述乘加部件对应的指令的格式为:qmadddessource1source2unused其中,qmadd为指令名称,des为累加值,source1为第一数据向量,source2为第二数据向量,unused表示备用,所述指令实现的功能用以下公式表示,其中,i表示索引,i为整数,1≤i≤4。优选的,包含dma传输结构,用于在外部存储与所述加速装置之间进行数据传输,所述dma传输结构根据精度要求采用全精度模式或低精度模式传输数据,以及根据数据传输数量采用普通模式或simd模式传输数据。优选的,所述全精度模式传输的数据位宽为32比特,所述低精度模式将4个低精度数据拼接为32比特进行传输。优选的,所述pe阵列的每个pe基于卷积计算的局部性将可重用的数据沿行方向和/或列方向传输到相邻pe。优选的,所述的计算装置,根据输入图像的规模将输入图像和卷积核数据分块加载到pe阵列进行各层卷积运算,以及将各层的运算结果进行量化操作后写回存储。优选的,在进行各层的卷积运算之前,对pe阵列进行初始化,以及配置所述dma结构的传输模式。优选的,将每张输入图像每个点的4个channel数据拼接为一个32比特的数据块,存储到片外存储,所述dma结构将数据从片外存储加载到片上存储,所述pe通过ld/st指令从片上存储读/写数据。本发明提供一种基于上述计算装置的低精度神经网络加速方法,包括:将输入图像每个点的4个通道的低精度数据拼接为32比特数据,以及基于simd方式传输多个图像的数据;所述pe阵列的每个pe基于卷积计算的局部性将可重用的数据沿行方向和/或列方向传输到相邻pe;根据输入图像的规模将输入图像和卷积核数据分块加载到pe阵列进行各层卷积运算,以及将计算结果进行量化后写回存储。本发明具有如下特点和有益效果:本发明针对在pe阵列上部署的低精度神经网络,设计了相应的数据传输模式、运算部件、运算指令以及相应的部署方法和调度方法,节省了计算资源,减少了访存带来的开销。附图说明图1示出了根据本发明一个实施例的基于数据流结构的低精度神经网络的结构。图2示出了根据本发明一个实施例的乘加部件的运算方式。图3示出了根据本发明一个实施例的基于数据流结构的低精度神经网络部署过程图。图4示出了根据本发明一个实施例的低精度simd数据传输过程图。图5示出了根据本发明一个实施例的低精度神经网络调度过程图。图6示出了根据本发明一个实施例的面向带宽优化的调度流程图。图7示出了根据本发明一个实施例的计算装置与其它加速器的性能对比数据。具体实施方式下面结合附图和具体实施例对本发明加以说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。本发明的部分英文缩写含义如下:pe:处理单元spm:片上存储channel:通道ifmap:输入图像ofmap:输出图像kernel:卷积核pe阵列包括若干个处理单元(processelement,简称pe),每个pe都是运算能力较强但是控制能力较弱、复杂度较小的核心。基于pe阵列的粗粒度数据流结构结合数据流和控制流的特点,在性能、功耗和功能灵活性之间具有良好的平衡。但是,当在pe阵列部署低精度神经网络时,存在计算资源和存储传输资源的浪费。本发明的基于数据流结构的低精度神经网络,设计了以通道为并行维度的卷积运算计算方法和相应的运算部件。图1示出了本发明的基于数据流结构的低精度神经网络的结构,其中,ibuf为输入缓冲区,wbuf为权重缓冲区,obuf为输出缓冲区,上述三个缓冲区位于spm中,pe阵列与上述三个缓冲区相连接。在spm中,ifmap数据的每个点的4个channel的低精度数据拼接为一个32比特单元,这32比特的数据将作为一个整体,通过load指令加载至pe。图1中ibuf中包括8个不同的ifmap,通过单指令多数据(singleinstructionmultipledata,简称simd)方式对8个ifmap进行并行处理,将8个输入图像的数据以simd8方式从ibuf输入图像缓冲区加载到pe阵列,即一次传输8个32bit数据单元,每个32比特数据单元由4个8bit低精度数据拼接而成,对应一个输入图像的1个点的4个通道的数据。类似地,从wbuf权重缓冲区将卷积核的每个点的4个通道的低精度数据拼接为一个32比特数据单元。pe阵列的乘加计算的部分和结果为32bit全精度数据,输出到obuf输出图像缓冲区。基于上述并行的数据处理方式,本发明在每个pe部件内设计了面向低精度神经网络的乘加部件和指令qmadd,qmadd指令对4个channel数据进行乘累加运算,将ifmap的4个channel数据分别和对应kernel的4个channel数据进行乘法运算,然后通过加法树进行加法并累加到psum数据,simd维度用来进行ifmap的并行处理。考虑到对模型准确率的影响,部分和psum数据设计为支持全精度数据。qmadd的指令格式如下:qmadddessource1source2unused其中,qmadd为指令名称,des为累加值,source1为第一数据向量,source2为第二数据向量,unused表示备用,所述指令实现的功能用以下公式表示,其中,i表示索引,i为整数,1≤i≤4。图2示出了根据本发明一个实施例的乘加部件的运算方式。图2中包含8个输入图像的数据,分别是:第1个图像的1个点的4个通道的数据:i1-1,i1-2,i1-3,i1-4;第2个图像的1个点的4个通道的数据:i2-1,i2-2,i2-3,i2-4;…第8个图像的1个点的4个通道的数据:i8-1,i8-2,i8-3,i8-4。以第1个图像的1个点为例说明计算过程:qmadd指令将第1个图像的1个点的4个通道的数据分别与权重w1、w2、w3、w4相乘后累加,得到32bit的部分和psum。以公式描述为:psum=i1-1*w1+i1-2*w2+i1-3*w3+i1-4*w4。qmadd指令采用simd方式,以一条指令即可计算出8个输入图像的一个点与权重数据的部分和,结果存储在8个32bit的寄存器中。为了减少访存带来的开销,本发明提出了基于数据流结构的低精度神经网络的部署方法。图3示出了本发明的基于数据流结构的低精度神经网络部署过程图,以1个ifmap和2个卷积核运算为例,第1列的2个pe(pe0和pe2)从存储中分别加载2个卷积核(kernel0和kernel1),然后通过copy指令沿x轴方向共享给同一行的pe,节省了其他pe从存储中加载卷积核的时间。对于ifmap,pe0将前3行数据从存储加载到pe,通过copy指令沿y轴方向共享给同一列的pe。另外,由于卷积计算的局部性特征,pe0将第2、3行数据可以通过copy执行沿x轴方向共享给左方的pe,第2列的pe只需要从存储中加载第4行的ifmap数据即可完成卷积运算。具体来说,图3中包含4个pe,分别是pe0、pe1、pe2、pe3,输入图像ifmaps的数据为4行4列的矩阵,两个卷积核分别为kernel0和kernel1。其中,存储访问以实线箭头表示,pe之间的数据流动以虚线箭头表示。kernel0与ifmaps进行卷积时,在pe0中计算kernel0与矩阵0124568910的乘加结果,以及kernel0与矩阵12356791011的乘加结果,在pe0中计算以上两个乘加过程时,pe0的kernel0数据来自于spm,ifmaps数据只需从spm中加载ifmaps的前三行。在pe1中计算kernel0与矩阵4568910121314的乘加结果,以及kernel0与矩阵56791011131415的乘加结果,在pe1中计算以上两个乘加过程时,pe1的kernel0数据不必从spm中加载,只需pe0将kernel0数据传送到pe1;ifmaps的数据也不必从spm中全部加载,而是一部分来自于pe0,即ifmaps的第2行和第3行数据,另一部分来自于spm,即ifmaps的第4行数据。kernel1与ifmaps卷积时,在pe2中计算kernel1与矩阵0124568910的乘加结果,以及kernel1与矩阵12356791011的乘加结果,在pe2中计算以上两个乘加过程时,kernel1的数据从spm中加载,ifmaps的数据不必从spm中加载,只需将pe0的ifmaps数据传送到pe2,即ifmaps的前三行数据。在pe3中计算kernel1与矩阵4568910121314的乘加结果,以及kernel1与矩阵56791011131415的乘加结果,在pe3中计算以上两个乘加过程时,pe3的kernel1数据不必从spm中加载,只需pe2将kernel1数据传送到pe3;ifmaps的数据也不必从spm中加载,而是一部分来自于pe2,即ifmaps的第2行和第3行数据,另一部分来自于pe1,即ifmaps的第4行数据。上述的数据使用方式,通过pe之间数据的流动代替从存储中加载全部数据,减少了访存带来的开销。为了高效利用低精度数据的传输带宽,本发明提出了基于数据流结构的低精度神经网络数据的传输方法,对dma传输进行了优化,设计了可配置的dma传输结构。dma传输根据精度区分有全精度模式和低精度模式,根据一次传输的数据数量分为普通模式和simd模式,即有四种组合方式,分别是全精度普通模式、全精度simd模式、低精度普通模式、低精度simd方式。全精度模式传输的数据位宽为32比特;低精度模式传输将4个低精度数据拼接为32比特,进行传输;simd模式一次可并行传输m个数据。根据本发明的一个实施例,为simd8结构,即传输的数据块单元大小为8*32比特;普通模式的数据块单元大小为32比特。低精度simd模式传输时将需要对ifmap数据进行预处理,将每张ifmap的4个channel数据拼成一个32比特的数据块,存储在dram中,dma将数据从dram搬运至spm中,pe通过ld/st指令可以读/写数据。图4示出了根据本发明一个实施例的采用低精度模式和simd模式将8个输入图像的数据由dram传输到spm后被pe加载的过程。其中,8个输入图像的数据,分别是:ifmap0、ifmap1、ifmap2、…、ifmap8,每个输入图像的4个通道的数据为c1、c2、c3、c4。每个输入图像的每个点的4个通道的8bit低精度数据拼接成一个32bit数据。dma将8个输入图像的一个对应点的数据以simd8模式传输到片上存储spm中,其传输的数据块单元大小为8*32bit。基于以上传输模式,在spm中,对应于地址offset_1数据块大小为8*32bit,包含了8个输入图像的1个点的4个通道的数据,对应于地址offset_1+8的数据块为8个输入图像的另外1个点的4个通道的数据。pe采用ld/st指令从spm中读/写数据。由于kernel要和每个ifmap做运算,所以对于kernel数据,可以使用低精度简单传输模式,将每个kernel的4个低精度channel数据拼接为32比特数据,用简单模式由dram传输至spm。由于ofmap和计算过程中产生的部分和psum为32比特的全精度数据,所以对于ofmap数据和部分和数据psum,采用全精度simd传输方式进行传输。神经网络推理过程中前一层神经网络的输出数据将作为下一层的输入数据,当执行低精度神经网络的推理时,存在进一步可优化的空间。为了进一步提高传输带宽的利用率,结合神经网络前向传递过程的特点,提出了在低精度神经网络中面向传输带宽优化的执行方法。当神经网络模型规模超出片上存储时,ifmap和filter需要分成多个block进行计算。图5示出了卷积核个数为3个时的卷积的运算过程。图5中包含多个输入图像,图中显示了3个输入图像,其它图像以省略号表示,batchsize(批大小)为一次训练输入图像的数量,每个特征图的高度为height,宽度为width,通道数channel为6;图中还包括3个卷积核,分别是kernel1、kernel2、kernel3,3个卷积核构成了filter(滤波器)每个卷积核的通道数与输入图像的通道数相对应,也是6个;图中的输出图像的数目与输入图像的数目相对应,等于batchsize,每个输出图像的通道数与卷积核的数目相对应,为3个通道。图中的卷积运算的通常计算过程以一个输入图像为例进行说明:一个输入图像的6个通道中的每个通道与对应的kernel1的通道卷积,结果相加后得到输出图像中与kernel1对应的一个通道;该输入图像再与kernel2做类似的操作得到输出图像中与kernel2对应的一个通道;该输入图像再与kernel3做与kernel1类似的计算得到输出图像中与kernel3对应的一个通道。其它输入图像的计算过程与上述过程相同,这些图像的计算可用并行方式进行。图5中,ifmap的batch维度通过simd的方式进行并行运算,每个ifmap有多个通道(channel)。因为片上存储spm的空间有限,存在ifmap不能一次加载到片上的情况,所以一层的数据要分块运算。图5中以2块为例,ifmap按照channel维度分成了2块数据,第1步将ifmap中浅色的数据块加载至片上,进行卷积运算,由于只是部分数据,所以结果并非最终输出;第2步将深色数据块加载至片上存储中,进行卷积计算,并与第一步得到的部分和进行累加,得到该卷积层计算的结果,写回dram。然而,该结果并不能直接作为下一层神经网络的输入,因为下一层的输入同样为低精度的数据,而该结果为高精度数据,需要对该结果进行量化操作。因此,当某一层运算结束后,在写回dram之前对结果进行量化,将会提高传输效率。图6示出了根据本发明一个实施例的面向带宽的调度方法的流程图。当进行卷积层运算时,首先主机端通过微控制器对pe阵列进行初始化,对dma传输模式进行配置。接下来,如果ifmap的规模超过了片上存储,那么需要对其根据通道进行分块处理,对于每一块ifmap,通过指令加载到pe阵列,并且加载对应的filter块,加载部分和数据,如果是第一块,部分和初始为0。然后进行卷积运算,如果是最后一块数据,计算得到的部分和即为本层的卷积结果,然后经过激活函数进行运算,并进行量化操作,然后写回存储中。为了验证本发明的技术效果,发明人选取alexnet、vgg16网络模型中的卷积层进行实验验证。alexnet由5个卷积层、2个全连接层和1个输出层构成;vgg16是一个16层的神经网络,由13个卷积层和3个全连接层构成。在实验中,对alexnet、vgg16卷积层的激活值和参数进行量化,计算过程中保留全精度的部分和。图7示出了使用dpu_q、dpu、gpu、eyeriss和bitfusion执行alexnet和vgg16网络的性能对比,其中,dpu_q表示本发明的计算装置。gpu_fp是使用gpu执行全精度32比特神经网络的性能,gpu_int8是gpu执行低精度8比特的性能,以gpu_fp为基准。当执行alexnet和vgg网络时,dpu_q相较于dpu分别实现了3.86倍和3.75倍的性能提升。由于部件利用率达的原因,导致加速比并非理想的4倍。与gpu_int8相比,dpu_q的性能是其2.96倍和1.88倍,神经网络第1层的输入激活值的通道数一般很小,达不到gpu的并行性,制约了gpu的性能,而且alexnet网络中第1层运行时间所占的比重较大,导致使用gpu_int8的性能提升并不明显。dpu_q与加速器eyeriss相比,当部署alexnet时,dpu_q性能是其1.52倍,当部署vgg16时,dpu_q性能是其6.05倍。当网络比较简单时,eyeriss可以表现出较好的性能,eyeriss执行alexnet的性能分别是gpu_fp和gpu_int8的4.78倍和1.94倍。但是当网络较复杂时,eyeriss的性能较差,当部署vgg16时,性能分别是gpu_fp和gpu_int8的84%和31%。造成其性能较差的原因一方面在于其位宽为16比特,另一个方面在于eyeriss在运行神经网络到执行阵列映射时,以最小化数据传输距离作为优化目标,追求更低的功耗开销,这带来了性能的损失。dpu_q与加速器bitfusion相比,当部署alexnet和vgg-16时,dpu_q的性能分别是其80%和1.86倍,这是因为alexnet网络的计算规模较小,比特级乘加单元组成的bitfusion能够表现出良好的性能,但是当vgg16网络的数据规模增大时,与dpu_q相比,细粒度的乘加结构单元之间的数据的传输、交互成为制约性能的原因。因此,当神经网络规模变大时,dpu_q的性能优势更能体现。应该注意到并理解,在不脱离后附的权利要求所要求的本发明的精神和范围的情况下,能够对上述详细描述的本发明做出各种修改和改进。因此,要求保护的技术方案的范围不受所给出的任何特定示范教导的限制。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1