基于FPGA的LSTM递归神经网络硬件加速器的设计方法与流程

文档序号:14555670阅读:697来源:国知局
基于FPGA的LSTM递归神经网络硬件加速器的设计方法与流程

本发明涉及计算机硬件加速领域,具体地涉及一种基于fpga的lstm递归神经网络硬件加速器的设计方法。



背景技术:

lstm(longshort-termmemory)神经网络是一种对递归神经网络(rnn),被广泛应用于序列处理类型的应用中,其通过将普通rnn网络中的神经元替换为lstm组件,解决了传统rnn网络训练时的长时间依赖问题。而由于代表一个神经元lstm组件中包含四个门,每个门都要与输入节点相连,并且每个门接收的值也要通过一系列的运算得到该lstm组件的输出值,因此当神经网络中的隐藏层包含的lstm组件数量较多时,神经网络内部的计算任务量以及产生的功耗将会非常大。所以高性能低能耗地加速lstm神经网络是当前的一个研究热点。

通常计算任务从表现方式上分两种:在通用处理器上,任务通常以软件代码的形式呈现,称为软件任务;在专用硬件电路上,充分发挥硬件固有的快速特性来代替软件任务,称为硬件任务。常见的硬件加速技术有专用集成电路asic(applicationspecificintegratedcircuit)、现场可编程逻辑门阵列fpga(fieldprogrammablegatearray)和图形处理器gpu(graphicsprocessingunit)。asic是为特定用途设计开发的集成电路芯片,其具有高性能、低功耗、面积小等特点。虽然相对于fpga,asic运行更快、功耗更低,而且量化生产时也更便宜。但fpga简化了逻辑任务设计,设计周期比asic更短,并且fpga拥有可重构的特点,灵活性好,方便用户动态重构功能模块。此外,生产asic的掩膜成本很高,随着线宽的减小,掩膜成本成指数增长。fpga作为适用不同功能的可编程标准器件,没有如此高额的研发成本。gpu适用于大量数据的并行计算,具有高带宽、高主频、高并行性特点,而且cuda(computeunifieddevicearchitecture)通用并行计算框架的提出,使开发者更方便、快捷地设计出高性能解决方案。但gpu的的高能耗对其应用造成了一定的限制。而相比于gpu,fpga在功耗方面具有很大的优势。



技术实现要素:

有鉴于此,本发明目的是:提供了一种基于fpga的lstm递归神经网络硬件加速器的设计方法,通过fpga硬件处理单元加速lstm神经网络预测过程中的计算密集部分,硬件处理单元相对于通用处理器具有高性能和低功耗的特点。

本发明的技术方案是:

一种基于fpga的lstm递归神经网络硬件加速器的设计的方法,其特征在于,包括以下步骤:

s01:使用tensorflow对构建lstm神经网络,并训练神经网络的参数;

s02:采用压缩手段将lstm网络参数进行压缩处理,解决fpga存储资源不足的问题;

s03:根据压缩后的lstm网络的预测过程,确定预测运算的关键代码;

s04:设计加速器的加速框架并生成ip核;

s05:在操作系统下将硬件比特流式文件烧写到开发板中并编写ip核和硬件设备的驱动;

优选技术方案中,包括控制模块,前向计算模块,参数配置模块。

优选技术方案中,所述步骤s02包括以下步骤:

对训练好的神经网络采用剪枝处理,精简参数数量,并对剪枝后的神经网络进行重训练,以保持剪枝前的预测精度;

反复迭代剪枝-重训练过程,最终精简大部分神经网络参数;

精简后的权值矩阵中大部分元素为0值,可采用稀疏矩阵的存储方式,降低存储空间;

将神经网络参数的数据类型转换为字节数更低的格式,以进一步降低存储空间。

优选技术方案中,所述步骤s04涉及到了稀疏矩阵与向量的乘法计算。由于稀疏矩阵的存储格式以及乘法计算过程与常规的2维稠密矩阵不同,因此硬件加速模块要专门针对稀疏矩阵进行设计;而由于稀疏矩阵的乘法计算中,每一列参与计算的参数数量不一定,因此在硬件并行的过程中使用控制器进行合理的计算任务分配,使每一个并行单元获得均匀的计算量,提高流水并行的加速效率。

优选技术方案中,所述前向计算模块采用分片设计,将节点矩阵每一行内部按分片大小进行分片,权值参数矩阵每一列按照分片大小进行分片,按行将节点矩阵的每分片大小个数据与权值参数矩阵每一列对应的分片大小个数值进行点积运算,每一行计算完毕后将临时值累加得到最终结果。

优选技术方案中,所述分片大小为2的n次方,与运算单元的并行粒度保持一致。

本发明还公开了基于fpga的lstm递归神经网络硬件加速器,包括:

cpu端,是整个系统的控制端,包含处理器processor和内存memory;处理器运行软件端的代码,并将加速任务加载到fpga上工作;

fpga端,为整个系统的硬件加速部件fpga芯片,通过fpga上固话的ip核实现对lstm神经网络算法的加速;

数据总线,负责整个系统cpu端和fpga端的数据传输;

控制总线,负责整个系统cpu端和fpga端控制信号的传输;

内存,用于存储lstm神经网络参数以及原始输入数据;

直接内存存取dma,负责加速器和内存间的数据传输;

控制互联,负责控制信号线路的互联;

pe,为加速器的计算单元,内部固化了前向计算模块的各种功能单元;pe内部的运算单元包括:1)矩阵向量相乘单元,用于将输入向量和权值矩阵对应位置的元素相乘得到中间值;2)累加单元,将矩阵向量相乘单元计算得到的中间值累加得到lstm的各个门向量值;3)激励函数单元,将累加单元得到门向量值进行激励函数处理;4)向量计算单元,对lstm的各个门向量以及lstm的cell向量进行计算,最终得到新的cell向量以及输出向量;5)cellbuffer,用于存储cell向量值;

权值存储单元,以压缩的形式保存神经网络的权值参数。

一种用于加速lstm神经网络的fpga结构,包括:

控制模块,用于调度执行其他运算模块,并控制数据的传输;

分片处理结构,将前向计算模块的节点数据矩阵和权值参数矩阵进行分片,分时复用硬件逻辑;

参数配置模块,用于配置处理单元的参数;

前向计算模块,用于lstm神经网络的前向计算包含以下计算功能:包括权值矩阵和输入向量对应元素的乘法计算;中间值的累加运算;lstm组件门向量值的激活函数运算;lstm组件门向量之间的乘法和加法运算,并且进行流水线优化至最大吞吐率。

优选技术方案中,所述参数配置模块通过dma传输配置参数数据对处理单元进行配置,包括:前向计算模块的工作模式配置和数据规模配置,数据规模配置包括节点数据规模配置、输入神经元规模配置和输出神经元规模配置;权值更新模块数据规模配置、工作模式配置和计算参数配置。

优选技术方案中,其特征在于,前向计算硬件结构包括:

dma,负责数据读取、写回;

双寄存器缓冲区,交替读取数据或进行并行计算;bram组,缓存并保证数据并行读取;

同分片大小相等的浮点乘法器;

同分片大小相等输入的二叉加法树;

循环累加器,累加临时值保存至片上bram上;

激励函数计算模块,采用分段线性近似实现激励函数,计算系数缓存在片上bram;

cell存储器,负责保存lstm组件中的cell值;

向量乘/加器,负责将经过激励函数处理后的lstm门的向量以及存储的cell值向量进行乘法以及加法操作,将更新后的cell值写回cell存储器,并将输出计算结果向量。

与现有技术相比,本发明的优点是:

本发明可以有效的加速lstm神经网络的预测过程,并且由于通过压缩处理,可以在fpga上部署较大规模的神经网络,维持较高的预测精度,并且处理单元相对于通用处理器有高性能、低功耗特点。

附图说明

下面结合附图及实施例对本发明作进一步描述:

图1是本发明实施例的基于fpga的lstm递归神经网络硬件加速器的设计方法流程图;

图2是神经网络中输入向量与权值矩阵计算的示意图;

图3是lstm神经网络隐藏层的计算示意图;

图4是本发明实施例的所采用的剪枝方法精简神经网络参数的示意图;

图5是本发明实施例的所采用的权值分割共享方法压缩神经网络参数的示意图;

图6是本发明实施例的所采用的稀疏矩阵与向量的乘法示意图;

图7是本发明实施例的基于fpga的lstm递归神经网络硬件加速器的整体设计框架示意图;

图8是本发明实施例的基于fpga的lstm递归神经网络硬件加速器的硬件框架示意图;

图9是本发明实施例的分段线性近似实现激励函数的示意图;

图10是本发明实施例的fpga平台上预存权值矩阵的前向计算中输入向量和权值矩阵乘法计算处理单元的示意图;

图11是本发明实施例的fpga平台上前向计算硬件处理单元中累加处理的结构示意图;

图12是本发明实施例的fpga平台上前向计算硬件处理单元中分段近似sigmoid函数和tanh函数的结构示意图;

图13是本发明实施例的fpga平台上预存权值矩阵的前向计算硬件处理单元的数据处理流程图。

图14为本发明实施例的fpga平台上lstm神经网络加速器的一个应用场景和框架示意图。

具体实施方式

以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。

实施例:

本发明实施例中的现场可编程门阵列平台指同时集成通用处理器(generalpurposeprocessor,简称为“gpp”),和现场可编程门阵列(fieldprogrammablegatearrays,简称为“fpga”)芯片的计算系统,其中,fpga和gpp之间的数据通路可以采用pci-e总线协议、axi总线协议等。本发明实施例附图数据通路采用axi总线协议为例说明,但本发明并不限于此。

图1为本发明实施例的基于fpga的lstm递归神经网络硬件加速器的设计方法100的流程图。该方法100包括:

s110,使用tensorflow对构建lstm神经网络,并训练神经网络的参数;

s120,采用压缩手段将lstm网络参数进行压缩处理,解决fpga存储资源不足的问题;

s130,根据压缩后的lstm网络的预测过程,确定预测运算的关键代码;

s140,设计加速器的加速框架并生成ip核;

s150,在操作系统下将硬件比特流式文件烧写到开发板中并编写ip核和硬件设备的驱动;

结合图2和图3,对本发明实施例的lstm神经网络计算过程进行详细描述。图2为神经网络输入向量和权值矩阵的乘法计算示意图,输入向量中的每一个元素分别与权值矩阵一列的对应位置元素相乘,将所有相乘得到的中间值相加即为权值矩阵该列对应的结果向量位置的元素。图3为lstm神经网络隐藏层的前向计算过程:1)首先输入向量(包括从上一层传输过来的向量xt以及当前层在上一时刻的结果向量ht-1),通过与对应权值矩阵的乘法运算,最终得到了lstm组件中四个门的门向量i、g、f、o;2)之后这四个门向量值经过激励函数计算得到新的向量i’、g’、f’、o’;3)从存储cellbuffer中取出存储的ct-1向量,i’和g’向量对应元素的两两相乘再加上f’和ct-1向量对应元素的两两相乘,所得到的新向量即为ct并将其写入cellbuffer中;4)而ct向量经过激励函数处理后的新向量ct’与o’向量对应元素两两相乘,最终结果就是当前层在当前时刻的计算结果向量ht。

因此结合图2和图3,本发明实例将lstm神经网络预测过程的关键部分归结为矩阵乘法运算、激励函数计算和向量计算。

结合图4和图5,对本发明实施例的lstm神经网络的精简和压缩处理进行详细描述。由于需要将lstm神经网络的参数部署到fpga的bram上,而fpga的存储资源有限,不够存储完整的大规模lstm神经网络,因此可以对lstm网络进行精简和压缩处理,降低所需的存储空间。图4为神经网络剪枝的示意图,剪枝的目的是精简神经网络参数,在神经网络的前向计算中,权值接近0的边对最终预测结果的影响非常小,因此可以通过剪枝手段将其去掉,通过去掉大量权值接近0的边,精简了大部分神经网络参数,并且通过重训练可维持很高的预测精度。图5为神经网络参数压缩处理的示意图,精简过后的神经网络参数可以通过压缩进一步地降低所需存储空间,将神经网络的权值分割为两部分:base和delta,其中base部分数值较大,但由于被很多权值所共享,因此每个被共享的base值只需要存储一个,并由一个索引列表为不同的权值索引对应的base值,而索引值和delta值的数值范围较小,因此可用位数更低的数据类型来表示,从而节省了大量的存储空间。

图6为本发明实例采用的稀疏矩阵与向量的乘法示意图,由于本发明对lstm神经网络模型经过了剪枝处理,因此计算过程中的权值矩阵中包含大量的0值,因此可以采用稀疏矩阵的存储方式(例如csc矩阵存储格式),用1维的数组存储2维稀疏矩阵,在与向量的计算过程中,只需要矩阵非零元素位置对应的向量元素与之相乘即可,并将乘法中间值累加得到结果向量。

图7为本发明实例采用的基于fpga的lstm递归神经网络硬件加速器的整体设计框架示意图200,该结构包括:

软件部分:该部分主要包含三个工作,1)在算法层面,需要对lstm神经网络算法进行分析,找到可以通过fpga硬件加速的关键代码,并且通过压缩手段在不降低算法预测精度的前提下,减少神经网络参数所需的存储空间大小,使其便于部署在fpga平台上;2)需要编写控制模块,用于对预测计算部分的任务划分以及硬件模块的调度工作;3)运行时驱动为软件部分和硬件部分之间的接口,负责软硬件的协同工作。

硬件部分:该部分主要包含两个工作,1)在fpga硬件模块设计方面,包含乘法模块、累加模块、权值转换模块、激励函数模块等——负责神经网络的前向计算;权值存储buffer,存储神经网络的权值参数;输入buffer和输出buffer,用于临时存储输入和输出数据;dma,负责总线数据传输;2)在硬件fpga硬件优化方面,采用数据本地性减少数据的移动;采用流水线对神经网络的矩阵和向量计算过程进行并行化,以实现硬件加速。

图8是本发明实例采用的基于fpga的lstm递归神经网络硬件加速器的硬件结构示意图300,该结构包括:

cpu端310,是整个系统的控制端,包含处理器processor和内存memory。处理器运行软件端的代码,并将加速任务加载到fpga上工作。并且cpu可以控制fpga上各个ip运算核的工作状态和数据读取等等;

fpga端320,为整个系统的硬件加速部件fpga芯片,通过fpga上固话的ip核实现对lstm神经网络算法的加速。系统由cpu端调度ip核进行并行计算,并且也可以将宿主端软件任务和fpga端硬件任务进行并行计算;

数据总线(databus)330,负责整个系统cpu端和fpga端的数据传输。数据总线采用axi-stream协议,这是高性能传输协议,允许无限制的数据突发传输;

控制总线(controlbus)340,负责整个系统cpu端和fpga端控制信号的传输。控制总线采用axi-lite协议,这是一种轻量级的地址映射单次传输协议,适用于硬件运算单元的控制信号传输;

内存350,用于存储lstm神经网络参数以及原始输入数据,数据存储的物理地址必须是连续的,以方便dma进行数据传输;

直接内存存取dma360,负责加速器和内存间的数据传输,每个硬件处理单元均可配备一个dma已实现并行数据读取;

控制互联370,负责控制信号线路的互联;

pe(processingelement)380为加速器的计算单元,内部固化了前向计算模块的各种功能单元。由于fpga具有可编程性和可重构性,所以pe的数量可以根据fpga芯片的资源带宽情况动态配置,在不改变运算单元设计下充分利用硬件的计算资源,保证其发挥最高的性能;pe内部的运算单元包括:1)矩阵向量相乘单元,用于将输入向量和权值矩阵对应位置的元素相乘得到中间值;2)累加单元,将矩阵向量相乘单元计算得到的中间值累加得到lstm的各个门向量值;3)激励函数单元,将累加单元得到门向量值进行激励函数处理;4)向量计算单元,对lstm的各个门向量以及lstm的cell向量进行计算,最终得到新的cell向量以及输出向量;5)cellbuffer,用于存储cell向量值;

权值存储单元390,以压缩的形式保存神经网络的权值参数。

图9为本发明实例中对激励函数进行硬件实现的示意图。本发明实例采用分段线性近似来实现sigmoid和tanh激励函数,将函数按x轴划分为若干等值间隔,每个间隔按照y=ai*x+bi,x∈[xi,xi+1)所示进行线性近似,其中xi+1-xi为该近似函数的作用区间。当需要计算激励函数时,首先按照输入值x寻找其所在的区间,并计算出该区间对应的ai和bi相对于基地址的偏移量,进行乘加运算后,就可已得到近似值y。分段线性近似实现激励函数的优点:1)无需更改硬件设计,只需要更换对应的系数数组a和b所存储的数值,即可实现任意的激励函数或者线性函数近似;2)误差极小,当近似函数的区间进行细化时,误差能降低到可以忽略的程度,而代价仅仅是增加了系数存储数组a和b的bram。另外一方面,神经网络本身的特性决定了一定程度的数据精度损失不会影响最终的预测结果。

图10本发明实施例的fpga平台上预存权值矩阵的前向计算中输入向量和权值矩阵乘法计算处理单元的示意图4000,该硬件结构将权值数据预先缓存在片上bram进行前向计算。结构包括:

数据读取模块4100,配有dma和fifo缓冲区,负责读取权值参数缓存到片上bram中以及读取神经元节点的输入数据;

片上bram4200,缓存权值参数数据;

双寄存器缓存4300,包含两个buffer缓冲区,交替进行输入数据的缓存和并行计算。但需要注意的是,输入数将缓冲区填满的所需的时间必须低于这些数据参与计算所需的时间,这样可以保证一个缓冲区数据参与计算的时间覆盖另一个缓冲区填充数据的时间,并且保证结果正确;

并行浮点乘法4400,将权值矩阵中的参数数据和输入向量的数据进行并行乘法计算,浮点计算采用dsp实现,可以通过流水线优化,实现乘法操作的并行处理;

二叉浮点加法树4500,将并行浮点乘法4400结构中得到的浮点中间值进行分片累加操作,采用二叉加法树进行并行计算,以消除累加操作的读写依赖,将累加操作的时间复杂度从o(n)降低至o(logn);

累加计算4600,由于二叉浮点加法树4500是采用分片处理的计算方式,因此需要将其计算结果再进行累加,而此时的累加计算只需要采用循环累加操作即可,最终的累加结果就是lstm门向量的一个元素值;

激励函数计算4700,采用分段线性近似实现激励函数,分段近似函数的系数存储在披上bram中。

图11为是本发明实施例的fpga平台上前向计算硬件处理单元中累加处理的结构示意图4600。其结构包括:

浮点加法计算4610,由于采用分片思想,需要对乘法计算得到的中间值进行累加。中间值数据流采用每个输出神经元个数n(即结果向量中的元素个数)进行累加,累加完毕后按顺序输出。

临时存储bram4620,在fpga内部设置n个存储单元用于存储临时数据,循环将数据流数据累加至对应的bram存储单元上,根据输入神经元个数和分片大小的关系判断累加是否结束。由于fpga内部设计时无法动态设定用于存储临时值得数量,所以在设计时运算单元设定所支持的最大累加数,当输出神经元个数低于该最大值时才能正常进行累加操作。

该过程也可以进行流水线优化,并将启动间隔优化至1个时钟周期,以保证中间值的产生和处理的速率保持一致。

图12为本发明实施例的fpga平台上前向计算硬件处理单元中分段近似sigmoid函数和tanh函数的结构示意图4700,激励函数采用分段线性近似实现。lstm神经网络算法中所用到的激励函数包括sigmoid和tanh。

sigmoid(x)函数关于点(0,0.5)对称,因此当x小于0时,可以采用1-sigmoid(-x)进行计算,这样可以复用硬件逻辑,减少对硬件资源的使用,同时当x大于8时,sigmoid(x)已经非常接近于1了,并且随着x值的增大sigmoid(x)会无限逼近1,所以当x大于8时,可以直接令计算结果为1;同理,当x小于-8时,可直接令计算结果为0。

tanh(x)函数关于点(0,0)对称,因此当x小于0时,可以采用-tanh(-x)进行计算以实现硬件逻辑的复用并减少硬件资源的使用。并且与sigmoid函数同理,当x大于6时可直接令计算结果为1,当小于-6时可直接令计算结果为-1。

图13为本发明实施例的fpga平台上预存权值矩阵的前向计算硬件处理单元的数据处理流程图。首先设置一个flag值,初始化为0,每一次填充完一个寄存器组时flag值更新为(flag+1)%2;从dma读取输入数据,当flag%2=0时将读取的输入数据填充至寄存器组a,同时将寄存器组b中所保存的数据读取出来与bram缓存的权值数据进行并行乘法计算;当flag%2=1时将读取的数据填充至寄存器组b,同时将寄存器组a中所保存的数据读取出来与bram缓存的权值数据进行并行乘法计算。之后将乘法计算得出的中间值经过二叉加法树求和,并进行累加;累加完毕后,将得到的门向量值经过激励函数处理,用于之后的向量计算;经过激励函数处理的门向量和存储的cell向量经过向量计算最终得到新的cell值(写回到cell存储器)并得到输出结果,输出结果一方面通过dma传输到软件端,另一方面继续作为lstm神经网络下一时刻的输出。

图14为本发明实施例的fpga平台上lstm神经网络加速器的可能一个应用场景和框架示意图。这里应用系统的组成是作为示例说明,本发明不局限于此:

如今fpga在移动设备上的应用也逐渐普遍起来,例如iphone7手机中便是用了一块型号为ice5lp4k的fpga芯片。图14即为一个移动设备上的fpga部署lstm神经网络的示意图。其整体框架由硬件层、驱动层、库层、服务层和应用层组成。硬件层由fpga、内存和宿主端cpu组成。cpu为系统的控制器,控制fpga内部各硬件处理单元的运行状态和数据读取;内存存储需要的神经网络参数以及输入数据,通过dma将数据在内存和fpga之间传输;驱动层是根据硬件平台和操作系统编写的硬件驱动;库层是驱动基础上封装的应用编程接口api;服务层是面向用户请求提供的lstm神经网络预测计算的加速服务;应用层是lstm神经网络预测算法的具体应用,例如图片分类、语音识别、文本序列预测等等。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的方法和硬件结构,能够以fpga和cpu的结合来实现。具体fpga内部固化ip核的数量和种类看具体应用和fpga芯片资源限制。专业技术人员可以对每个特定的应用或特定的fpga芯片来使用不同方式或不同并行度来实现上述所描述的功能,但是这种实现不应认为超出本发明的范围。

在本申请所提供的几个实施例中,应该理解到,所揭露的方法和硬件结构,可以通过其它的方式实现。例如,以上所描述深度学习的应用为深度神经网络和卷积神经网络是示意性的。例如,前向计算运算单元中的分片大小以及并行粒度是示意性的,可以根据具体情况进行调整。例如现场可编程门阵列和通用处理器之间的数据传输方式采用axi总线协议也是示意性。

上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。

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