基于多FPGA的深度信念网络加速平台及其设计方法与流程

文档序号:15934229发布日期:2018-11-14 02:07阅读:166来源:国知局

本发明涉及一种算法的硬件加速平台,具体涉及一种通用性好和灵活性高的基于多fpga的深度信念网络加速平台及其设计方法。

背景技术

深度学习的概念起源于人工神经网络ann(artificialneuronnetwork),是机器学习领域的重要研究和应用部分,主要是通过模拟人类大脑的神经网络机制来解释文本、语音和图像等数据。“深度”指的是深度学习神经网络含有多个网络子层,“学习”是指模拟人类大脑的学习方式,通过不断学习获取新知识或改善自身性能。

深度神经网络由输入层、多层隐层和输出层组成,相邻层的神经元之间是全连接方式,低层的每个神经元均与相邻高层的每个神经元相连,且突触权值私有,各不相同。深度神经网络中输入层的神经元数量根据输入数据的规模而定,中间隐层的神经元数量根据训练结果决定,输出层的神经元个数则由数据需要分类的类别数量而定。神经元之间的突触权值和阈值参数需要通过训练得到。在确定了各网络层的神经元数量和权值、阈值参数后,整个深度神经网络的结构就确定了。深度神经网络是深度学习中最先提出的神经网络。深度神经网络的训练过程分为两步,先是无监督的贪心逐层预训练,从低层次的网络子层开始,每次训练一个单层网络,使该子层中的权值找到接近最优解的值;然后通过wake-sleep调优算法对整个网络进行优化训练,解决了传统的人工神经网络中局部最优、梯度弥散等问题,并大幅度减少了多层神经网络的训练时间。深度神经网络的预测过程是一个由底向上的前馈计算过程。

深度信念网络dbn,也称为深度置信网络,由geoffreyhinton于2006年提出。dbn属于生成性深度结构,不仅可以识别、分类数据,也可以生成数据。经典的深度信念网络由若干层受限玻尔兹曼机rbm(restrictedboltzmannmachine)和一层误差反向传播层bp(errorbackpropagation)。每层rbm中含有两层神经元,低层为显性神经元,简称显元,用于输入计算数据,高层为隐形神经元,简称隐元,用于特征检测。在每层rbm中,通过显元的输入数据来推断隐元的特征,该层rbm的隐元作为相邻高层rbm的显元数据,通过多层rbm堆叠构成深度信念网络结构。bp层负责在预训练完成以后,将错误信息自顶向下传播至各层rbm,对整个dbn网络进行微调。根据所应用的领域不同,bp也可以换成其他分类器模型。受限玻尔兹曼机rbm由smolensky提出,是对玻尔兹曼机bm的优化改进。rbm具有很好的性质,在给定显元的状态后,隐元的激活状态都相互独立;而给定隐元的状态后,显元的激活状态也相互独立,这为计算过程并行化提供了很好的理论基础,可以并行的计算同一层神经元的状态。rbm的广泛研究和应用得益于hinton于2002年提出的rbm快速学习算法对比散度cd(constrastivedivergence)。原本的rbm模型中,需要多次采用gibbs采样来交替对显元和隐元采样,多次采样后,得到服从rbm定义的分布的随机样本。而hinton提出通常只需要进行1步gibbs采样即可得到足够的近似样本。对比散度方法中,首先显元状态被设置为训练输入数据,计算隐元被开启的概率,再根据隐元状态重构显元状态,再用重构后的显元计算隐元被激活的概率,然后更新得到相应的突触权值和偏置参数。

深度信念网络的计算过程主要有训练和预测两部分,但由于其具有计算密集性和数据密集性的特点,当面对大规模数据时,往往存在计算资源需求大、计算时间过长、功耗较大等问题。训练过程采用离线方式即可满足一般应用的需求,而预测则需在线进行,对实时性要求更高,因此加速其预测过程更有实践意义和应用市场。深度神经网络预测过程的高性能实现也已成为学术界和工业界的研究热点之一。

硬件加速是指采用硬件实现全部算法或计算密集、控制简单的部分算法,主要是利用了硬件内固有的并行特性。目前常用的硬件加速平台有专用集成电路asic、现场可编程逻辑门阵列fpga和通用图形处理器gpgpu。asic性能最佳,功耗最低,但专用性最强,开发成本较高。gpu内部结构并行性高,灵活性好,但能耗较高,专用型不强。fpga是asic领域中的半定制电路,在极大保留了asic高性能、低能耗的前提下,具有可重构的特性,灵活性高,很好的平衡了高性能和高专用性两个特点。基于性能、能耗和开发成本的权衡,本文采用fpga作为硬件加速器的实现手段。fpga内部包括输入输出模块iob(inputoutputblock)、可配置逻辑模块clb(configurablelogicblock)、可编程布线资源,同时也集成了片上存储器、数字处理模块dsp(digitalsignalprocessing)和嵌入式软核或硬核。fpga综合了专用计算和通用计算的优势,可以根据应用需求的不同,更改电路布局,生成定制的电路结构,从而实现高性能的并行计算。基于fpga的硬件加速器一般采用软硬件协同设计的方法,将控制简单、计算密集的计算工作映射到fpga上完成,而宿主端则主要负责算法的剩余部分,这部分算法往往以控制模块为主,也包含数据的发送与接收工作。



技术实现要素:

针对上述存在的技术问题,本发明目的是:提供了一种基于多fpga的深度信念网络加速平台能够充分利用fpga的片上资源,使之具备高性能、低功耗等特点。

本发明的技术方案是:

基于多fpga的深度信念网络加速平台,包括通用处理器、控制fpga和计算fpga;通用处理器解析深度信念网络配置信息,将配置信息发送给控制fpga;控制fpga负责与通用处理器、其他fpga通信,并承担部分计算工作;控制fpga将配置信息发送给计算fpga,用于生成多fpga加速器并减少计算fpga与通用处理器之间的通信开销;然后通用处理器读入待分类的信息并发送给控制fpga,控制fpga读取待分类信息并转发给计算fpga进行计算,并把计算结果传回控制fpga,控制fpga将分类结果发送给通用处理器。

基于多fpga的深度信念网络加速平台设计方法,主要步骤如下:

s01:分析深度信念网络特性,得到深度信念网络的热点计算模块和控制模块,确定适用于fpga平台上运行的并行计算部分;

s02:将可并行加速的模块映射到fpga硬件上,确定软硬件协同计算方式;

s03:依据fpga的片上资源情况,设计硬件ip核并生成配置信息;

s04:将硬件ip核烧写到硬件平台,编写各个硬件设备的驱动;

s05:在用户层调用各个硬件ip核,形成硬件加速器。

优选技术方案中,所述步骤s01中热点计算模块主要包括前向计算模块,即矩阵计算以及激励函数计算。

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

宿主端软件负责控制流和顺序执行部分,产生控制信息;

深度信念网络中的受限玻尔兹曼机rbm层转化为矩阵计算;

采用直接内存读取作为软硬件协同计算的数据通路;

多fpga加速平台由一个控制fpga和多个计算fpga构成,控制fpga负责与cpu、计算fpga传输数据和控制信号,并承担部分计算工作;计算fpga负责矩阵计算。

优选技术方案中,所述步骤s03中,由于深度信念网络主要由rbm构成,rbm层主要是矩阵计算,考虑到矩阵计算可以分成内积计算和数乘计算两种形式,在具体实现中,设计了内积计算模块ip和数乘计算模块ip,通过交替使用两个模块,可以实现深度信念网络的流水化计算;激励层ip核使用分段线性近似的方法实现任意的激励函数;根据不同的fpga数量以及片上资源,设计了两种划分方案,按层划分dbl和层内划分dil。

dbl:根据各层的计算任务为每一层分配相应的硬件资源;

dil:根据各层的计算任务为同一层分配相应的硬件资源。

优选技术方案中,所述步骤s03中,深度信念网络的配置信息包含:

矩阵计算类型;

数据的表示位数;

数据分片大小;

激励函数近似形式。

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

在驱动的编写中,采用访问linux字符设备的方式访问各个硬件设备;

在dma的驱动编写中采用映射机制进行数据填充;

所述映射机制为在内存中预留出一段连续的物理内存,将其映射到内核空间中的一段地址中,然后将该段内核空间地址映射到用户空间。

优选技术方案中,所述步骤s05中,多fpga加速平台由宿主端控制并调用各个硬件ip核。

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

本发明充分利用了多fpga的灵活性和通用性,简单易用,对用户透明,能够根据硬件资源和网络拓扑对平台进行调整;根据不同的fpga数量以及片上资源,设计了两种划分方案,按层划分dbl和层内划分dil;在具体实现中,设计了内积计算模块ip和数乘计算模块ip,通过交替使用两个模块,可以实现深度信念网络的流水化计算,提高了系统的吞吐量。本发明使得不具备硬件知识的编程者可以利用已有的fpga资源轻松获得良好的性能和较低的功耗。

附图说明

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

图1是本发明实施例的加速系统平台的加速器设计流程图;

图2是本发明实施例的加速系统平台的内积计算设计图;

图3是本发明实施例的加速系统平台的数乘计算设计图;

图4是本发明实施例的加速系统平台的内积计算和数乘计算结合设计图;

图5是本发明实施例的加速系统平台的分段线性近似实现激励层ip核结构设计图;

图6是本发明实施例的加速系统平台的分段线性近似实现sigmod函数结构设计图;

图7是本发明实施例的加速系统平台的系统架构图;

图8是本发明实施例的加速系统平台的数据包结构设计图;

图9是本发明实施例的加速系统平台的按层划分系统设计图;

图10是本发明实施例的加速系统平台的按层划分系统中计算fpga状态转换图;

图11是本发明实施例的加速系统平台的层内划分系统设计图;

图12是本发明实施例的加速系统平台的层内划分系统中控制fpga转台转换图;

图13是本发明实施例的加速系统平台的dma传送数据的流程图。

具体实施方式

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

实施例:

本发明实施例中的深度神经网络加速平台包括通用处理器、现场可编程门阵列以及存储模块,其中,fpga和通用处理器之间的数据通路可以采用pci-e总线协议、axi总线协议等。本发明实施例附图数据通路采用axi总线协议为例说明,但本发明并不限于此。

图1是本发明实施例的加速系统平台的加速器设计流程图,包括的步骤如下:

分析深度信念网络特性,得到深度信念网络的热点计算模块和控制模块,确定适用于fpga平台上运行的并行计算部分;

将可并行加速的模块映射到fpga硬件上,确定软硬件协同计算方式;

依据fpga的片上资源情况,设计硬件ip核并生成配置信息;

将硬件ip核烧写到硬件平台,编写各个硬件设备的驱动;

在用户层调用各个硬件ip核,形成硬件加速器。

图2是本发明实施例的加速系统平台的内积计算设计图,矩阵相乘中存在两种不同的计算方式,一种是把计算分解为多组行、列向量的内积,每组内积的结果对应结果矩阵中的一个元素。以矩阵x中第一行行向量x0=(x00x01x02…x09)有关的运算为例,首先x0与矩阵w中的列向量w0=(w00,w10,w20,…,w90)执行内积运算,得到结果y00=x00*w00+x01*w10+x02*x02+…+x09*w90,然后x0依次与列向量w1,,…,w9进行向量内积运算,分别得到y01,y02,…,y09的值,即得到矩阵y中的第一行行向量y0=(y00y01y02…y09);然后再取矩阵x的第二行行向量x1执行以上操作,得到矩阵y中的第二行行向量y1=(y10y11y12…y19),以此类推。在这种内积为主的矩阵乘法运算方法中,存在两处可并行化处理的计算:一是在行向量与列向量的内积运算中,向量各元素间的乘积不存在数据依赖,可以并行执行;二是同一行向量与不同列向量的内积运算中,各内积运算间不存在数据依赖,也可并行执行。同时,还存在一处可以数据复用之处,即复用同一条行向量,完成与不同列向量的内积运算。

内积计算代码如下:

图3是本发明实施例的加速系统平台的数乘计算设计图,矩阵相乘的另一种计算方式是指,把计算分解为多组数字与行向量间的数乘运算,每组数乘的结果对应结果矩阵中一个行向量的中间值,然后将对应的中间值执行向量加法操作,得到最终结果矩阵。仍以矩阵x中第一行行向量x0=(x00x01x02…x09)相关计算为例,首先x0中元素x00与矩阵w的行向量w0=(w00w01w02…w09)执行数乘运算,得到临时行向量y0=(x00*w00,x00*w01,x00*w02,…,x00*w09);然后x0中的元素x01与矩阵w的行向量w1=(w10w11w12…w19)执行数乘运算,得到另一个临时行向量y1=(x01*w10,x01*w11,x01*w12,…,x09*w19);然后x02,x03,…,x09分别于矩阵w的行向量w2,w3,…,w9执行数乘运算,分别得到临时行向量y2,y3,…,y9;将所有临时行变量两两执行向量加法,得到矩阵y中的第一行行向量y0;接下来,再取矩阵x的第二行行向量x1,将x1中的元素分别与矩阵w中对应的行向量进行数乘运算,再将得到的临时行向量相加,得到矩阵y中的第二行行向量y1,以此类推。在这种以数乘为主的矩阵乘法运算方法中,存在两处可并行化处理的计算:一是在某元素与行向量的数乘中,该元素与行向量中各元素的相乘不存在数据依赖,但存储读取冲突,如果可以实现对元素的多端口读取,则各元素间的乘法可以并行执行;二是不同元素与不同行向量的数乘中,不存在数据依赖,可以并行执行。

数乘计算代码如下:

图4是本发明实施例的加速系统平台的内积计算和数乘计算结合设计图,在以向量内积为主的矩阵相乘中,每次执行向量内积运算均需要被乘矩阵的一个行向量与乘矩阵的一个列向量;而在以向量数乘为主的矩阵相乘中,每次向量数乘运算需要被乘矩阵的一个元素与乘矩阵的一个行向量。因此,如果第一层矩阵相乘中采用以向量内积为主的计算方式,第二层矩阵相乘中采用以向量数乘为主的计算方式,则两层的矩阵乘法可以实现最大程度的计算重叠。

将两种矩阵计算方式结合后的代码如下:

图5是本发明实施例的加速系统平台的分段线性近似实现激励层ip核结构设计图,本发明实例采用分段线性近似来实现s型激励函数,将函数按x轴划分为若干等值间隔,每个间隔内按y=ai*x+bi,x∈[xi,xi+1)进行线性近似,其中xi+1-xi为近似的间隔大小。

每当需要计算激励函数时,首先按照x值寻找其所在的区间并计算其对应的ai和bi相对于基地址的偏移量,进行乘加运算后,即可近似得到y值。

这种实现方式有两点好处:

1)、可实现任意的s型激励函数或线性函数,而且无需更改任何硬件设计,仅需要更换系数a和系数b所存储的数值即可;

2)、误差极小,当近似区间降低时,误差可以达到可以忽略,而代价仅仅是增加用于存储系数a和系数b的bram。而且深度学习计算本身对数据的精确度的要求并不是很高或者说一定程度的精度损失并不影响数据结果。

图6是本发明实施例的加速系统平台的分段线性近似实现sigmod函数结构设计图,与图5不同的是,增加了一条x直接传输到y的通路,让运算单元可以仅仅执行卷积操作而不经过激励函数的处理。

由于s型激励函数基本上是关于某点对称,以sigmoid函数为例,sigmoid函数关于(0,0.5)对称,所以当x小于0时,按照1-f(-x)进行计算,这样可以复用硬件逻辑,减少对硬件资源的使用。而且当x等于8时,f(x)等于0.999665,之后便无限接近于1,故当x大于8时,直接对结果赋值为1。

分段线性函数误差如下:

图7是本发明实施例的加速系统平台的系统架构图,该系统结构包括:

buffer:数据缓冲区;

inputfifo:输入数据缓冲区;

outputfifo:输出数据缓冲区;

weightfifo:权值数据缓冲区;

controlunit:控制单元,负责宿主端和其他pe之间通信,数据传输;

axiinterconcect

axi-stream:允许无限制的数据突发传输,为高性能数据传输协议;

axi-lite:一种轻量级的地址映射单次传输协议,适用于硬件运算单元的控制信号

传输;

memoryinterconnect:数据通路互联;

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

controlinterconnect:控制信号线路互联;

ddr:存储模块,存储数据;

pe:乘法计算单元,负责矩阵计算。

图8是本发明实施例的加速系统平台的数据包结构设计图,多fpga系统中,fpga间通过数据包互相发送控制信息和数据信息。数据包分为首部和数据两部分,首部在前,占数据包的前8个字节,数据部分在后。下面详细介绍数据包首部的各字段。

操作指令,4位,是数据包中的控制字段,指示该数据包的类型和所对应的操作类型。0x0表示采用按层划分并执行相应计算过程;0x1表示计算轮空;0x2表示采用层内划分并执行相应计算过程;0x3表示数据写回;0x4表示该数据包内的数据为显元数据,不做任何计算操作。其中0x0和0x1只适用于按层划分方案,0x2只适用于层内划分方案,0x3和0x4两种划分方案均适用。

数据包大小,16位,表示该数据包的大小,即首部和数据大小之和,可表示的最大十进制数值为65535,该字段所表示数的单位是字节,所以数据包最大为65535字节,首部固定占8个字节,因此数据包最多可载65527字节数据。

源地址和目的地址,各占4位,表示该数据包的源地址和目的地址。

网络层号,4位,表示该数据包中的数据对应第几层rbm的数据,从1开始计数,0x0为无效值。

数据偏移地址,32位,表示该数据包中的数据在该网络层计算的起始偏移位置,并以字节为偏移单位。该字段常与网络层号一起用于数据对齐,保证计算准确性和fpga间的同步计算。

图9是本发明实施例的加速系统平台的按层划分系统设计图,按层划分是指将多层神经网络的计算按层分布到各个计算fpga上,每片fpga分别负责某一层神经网络的预测计算。为使fpga间的计算过程尽可能重叠,借鉴单fpga加速系统中双层流水计算的方法,指定负责奇数层rbm计算的fpga(以下简称奇fpga),以向量内积形式完成矩阵计算,负责偶数层rbm计算的fpga(以下简称偶fpga)以向量数乘形式完成矩阵计算。一旦奇fpga得到第一个隐元的状态后,相邻的偶fpga结点即可读入该神经元状态作为显元输入,开始该偶数层rbm的计算,实现两片fpga在单任务下的流水计算。该方法仅能实现两片fpga间的单任务流水计算,若将相邻奇fpga与偶fpga作为一组计算,则fpga组之间完成单任务计算时仍以串行方式执行。

奇fpga的计算以向量内积为主。并行计算同样采用多乘法器-加法树结构,通过多缓冲区掩盖数据通信的时间开销,并同样支持分片计算。

偶fpga中的计算以向量数乘为主。并行计算同样采用多乘法器-多加法器结构,通过多缓冲区掩盖数据通信时间开销,并采用冗余存储消除向量加法中的数据依赖,同样支持分片计算。

图10是本发明实施例的加速系统平台的按层划分系统中计算fpga状态转换图,在每个计算fpga片内,均嵌入同步单元保证计算结果的准确性。奇fpga和偶fpga虽然计算方式不同,但整体计算流程一致,所以采用同一状态机控制整体计算流程。本发明采用有限状态机解决计算fpga之间计算时序的同步问题。计算fpga起始状态为空闲状态,并轮询输入fifo是否为空,如果输入fifo为空,则保持空闲态,如果输入fifo不空,即上级结点传入新数据,则跳至读数据态;在读数据态,fpga读取输入fifo中的数据包,并读取首部中的相关信息,校验源地址、目地址是否正确,并结合网络层号和数据偏移两个字段,与本地的计算阶段信息对比校验,如信息有误,则跳回空闲状态,继续等待新数据,如首部信息无误,跳入计算状态;在计算态,fpga完成与读入数据相关的所有操作,计算完毕后,转入写数据状态;在写数据态,fpga将计算结果写入下级结点的输出fifo中,更新本地的相关计算标志信息,并判断输入fifo是否为空,如果为空,则转入空闲状态,如果fifo不空,则转入读数据状态。由于控制fpga只负责数据传递,没有计算任务,相对简单,所以没有设计状态机。

图11是本发明实施例的加速系统平台的层内划分系统设计图,层内划分是指将每层rbm的计算均匀分布在多片fpga上,由多片计算fpga并行完成同一rbm层的计算。本方案中采用单指令流多数据流simd计算方式,控制fpga将输入的显元数据划分成若干数据块,分发给不同的计算fpga,每片计算fpga负责某层rbm的部分计算,分别对接收到的不同显元数据块完成相同的计算操作,由于每片计算fpga只负责一部分rbm的计算,所以只能得到rbm层的部分计算结果,计算fpga将结果传回至控制fpga,再由控制fpga将计算fpga的局部结果进行整合,得到该层rbm完整的计算结果,并将结果作为下一层rbm的显元数据,分别发送给计算fpga。该方案中控制fpga与每片计算fpga间均有数据通信,且不仅负责将cpu传入的数据分发给各个计算fpga,和将计算fpga的结果回收,还承担了部分计算任务,即负责对局部结果的整合计算。

dil加速系统中,计算fpga内的计算方式相同,均为向量内积运算和激励函数计算,与dbl系统中奇fpga的ip核设计一致,此处不再赘述。

控制fpga片内ip核的设计较为简单,主要通过并行加法树完成对各个矩阵块的累加运算。控制fpga每次并行读取f片计算fpga中的局部结果向量,根据元素在向量中的偏移位置将向量元素分成多个数据组,每个数据组内包含来自f片不同fpga的同一位置的元素值,并行对每个数据组内的f个元素通过深度为log2f的加法树两两相加,得到该位置的最终结果值。

图12是本发明实施例的加速系统平台的层内划分系统中控制fpga转台转换图,dil加速系统中计算fpga和控制fpga内同样有同步单元负责同步计算。计算fpga内的有限状态机设计与按层划分方案中计算fpga的状态机设计一致,此处不再赘述。控制fpga扮演cpu与计算fpga间的通信和控制中介,状态相对较多。控制fpga初始状态为空闲状态,并不断轮询与cpu相连的数据fifo是否为空,等待cpu端传入样本数据,如果该fifo为空,则保持在空闲态,如果fifo不为空,则跳入数据分发态;在数据分发态,控制fpga将cpu传入的样本数据分块处理,并封装为数据包,将各个数据包发送至对应计算fpga的数据fifo中,跳入等待结果状态;在等待结果态,控制fpga不断轮询与计算fpga相连的f个结果fifo,等待计算fpga计算完成,如果fifo为空,则保持在本状态,如果fifo不为空,则跳入校验状态;在校验态,控制fpga读取计算fpga返回的结果数据包,并校验数据包的首部,如果首部有误,则跳回等待结果态,如果首部正确,跳入结果整合态;在结果整合态,控制fpga将接收到的局部结果进行累加操作,得到最终的输出结果,并跳入结果写回态;在结果写回态,控制fpga将最终计算结果写入与cpu相连的结果fifo中,并判断cpu数据fifo是否为空,如果为空,则跳入空闲态,如果不为空,则跳入数据分发态。

图13是本发明实施例的加速系统平台的dma传送数据的流程图,首先在dma驱动中利用kmalloc函数分配一段连续的物理内存,并给出其对应的内核空间的逻辑地址;其次在用户执行应用程序时,将所需要的数据从用户进程空间读取出来并写入到kmalloc分配的连续物理内存对应的内核空间地址中,写入完毕后数据就实现了在物理地址中的连续存储,最后dma从连续的物理地址空间中读取数据传送到ipcore,ipcore读取数据进行计算。这就是dma将数据从用户态传送到ipcore内部的整个流程。ipcore计算后的结果先通过dma传送到物理地址连续的内存中,然后再从内核空间中将数据传送到用户进程的地址空间中。从图可以看出,完成一次计算需要两次的数据拷贝,而数据拷贝的速度是很慢的,无疑这会降低加速器的性能,为此本发明采用了映射的方式来减少整个数据传送过程中的数据拷贝次数。

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

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