一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种面向FPGA的稀疏卷积神经网络多级存储计算系统的制作方法

2021-12-12 23:23:00 来源:中国专利 TAG:

一种面向fpga的稀疏卷积神经网络多级存储计算系统
技术领域
1.本发明属于嵌入式ai领域,特别是一种面向fpga的稀疏卷积神经网络多级存储计算系统。


背景技术:

2.在大量数据可用和数据处理能力不断提高的前提下,深度学习成为广泛领域最近几年来解决复杂问题的关键方法,比如图像识别、语音处理、自然语言处理、语言翻译和自动驾驶等。随着卷积神经网络应用范围的扩大,使用场景愈加复杂,对网络模型预测的准确度越来越高,导致卷积神经网络越来越深,参数量不断增加。现有卷积神经网络中超大规模的参数、数以亿计的计算量以及高带宽需求限制了其应用的进一步推广。
3.有研究表明,卷积神经网络中大多数层的激活值稀疏度(零值数量)在70%以上,部分层甚至可以达到95%左右,结合模型权重剪枝及激活值剪枝的方法达到减少数据量和计算量的目的,并将通过剪枝后获得的网络称为稀疏卷积神经网络。然而诸如cpu这样的通用计算平台的计算架构难以充分利用剪枝方法带来的稀疏特性,因此需要设计定制化的硬件加速器来获得理想的加速比。由于fpga具有灵活的硬件设计特性,以及其超高的并行计算能力和低功耗硬件优势,逐渐成为在资源受限的嵌入式环境中实现推理加速的主流平台。为充分利用稀疏卷积神经网络的稀疏特性,已有研究提出了一种基于笛卡尔积的卷积计算方式,但是该方式引入了极高的存储读写冲突问题或极大的存储开销,使最后获得的加速效果远低于理论期望。
4.因此,如何减少卷积计算单次任务的数据量和计算量,并设计出高效的访存策略,在有限的条件下最大程度发挥出fpga平台的优势,从而加快稀疏卷积神经网络的计算速度,已经成为同行从业人员亟待解决的问题。


技术实现要素:

5.鉴于上述问题,本发明提供一种面向fpga的稀疏卷积神经网络多级存储计算系统,通过该系统能够有效减少卷积计算单次任务的数据量和计算量,发挥fpga高并行度、高吞吐量和低功耗的硬件优势,从而加快稀疏卷积神经网络的计算速度。
6.本发明实施例提供了一种面向fpga的稀疏卷积神经网络多级存储计算系统,包括arm端和fpga端;
7.所述arm端用于获取网络模型权重参数和输入特征图数据,根据所述网络模型权重参数和输入特征图数据的存储信息生成流程控制指令,并将所述流程控制指令发送到fpga端;
8.所述fpga端接收到所述流程控制指令后,从所述arm端中读取所述网络模型权重参数和输入特征图数据,并进行计算,最后将计算结果反馈给所述arm端。
9.进一步地,所述arm端包括片外存储器访问控制模块、ddr访问控制模块和流程控制模块;
10.所述ddr访问控制模块内开辟有权重缓冲区和特征图缓冲区;
11.所述片外存储器访问控制模块从片外存储器中将所述网络模型权重参数和输入特征图数据读入到所述ddr访问控制模块中;
12.所述ddr访问控制模块将所述网络模型权重参数和输入特征图数据对应写入到所述权重缓冲区和特征图缓冲区;
13.所述流程控制模块根据所述网络模型权重参数和输入特征图数据的存储信息生成流程控制指令,并将所述流程控制指令发送到fpga端。
14.进一步地,所述fpga端包括控制模块、数据读取模块、数据预处理模块、卷积计算模块、分块重组模块、数据后处理模块和特征图输出模块;
15.所述控制模块接收到所述流程控制指令后,对所述流程控制指令进行解析,从而获得所述存储信息;所述控制模块将所述存储信息发送至所述数据读取模块;
16.所述数据读取模块根据所述存储信息从所述ddr访问控制模块中将所述网络模型权重参数和输入特征图数据读入到fpga端的内部存储器中;
17.所述数据预处理模块对所述内部存储器中的输入特征图数据进行稀疏编码和分组编码处理;
18.所述卷积计算模块对预处理后的网络模型权重参数和输入特征图数据进行卷积计算;
19.所述分块重组模块对所述卷积计算模块的计算结果数据进行重组;
20.所述数据后处理模块对重组后的数据进行预分块,并对块内的数据做线性激活、池化操作、稀疏编码和像素激活值分组处理;
21.所述特征图输出模块将所述数据后处理模块处理后的数据发送至所述特征图缓冲区。
22.进一步地,所述控制模块包括层级指令解析单元、fpga状态监视单元、多模块控制单元、配置寄存器组和六个状态寄存器组;
23.所述层级指令解析单元对所述arm端中流程控制模块发送过来的所述流程控制指令进行分析,从而获得所述存储信息;所述指令解析单元将所述存储信息存储在所述配置寄存器组中;
24.所述fpga状态监视单元包括六个状态机,每个状态机均对应有一个状态寄存器组;所述fpga状态监视单元通过所述六个状态机同时分别对所述数据读取模块、数据预处理模块、卷积计算模块、分块重组模块、数据后处理模块和特征图输出模块的工作状态进行监测,并将所述工作状态存入对应的状态寄存器组中;
25.所述多模块控制单元根据所述工作状态生成控制指令,并将所述控制指令发送给对应的模块,以此来控制各个模块的初始化、启动、停止、复位和状态转换。
26.进一步地,所述数据预处理模块中的分组编码处理具体包括:
27.根据卷积核大小对所述网络模型权重参数和输入特征图数据进行分块,并在每个分块内根据像素激活值的块内位置对所述像素激活值进行编号,不同分块内相同编号的激活值视为一组;在读取激活值时,按照组的顺序进行读取数据。
28.进一步地,所述卷积计算模块中的卷积计算,具体包括基于笛卡尔积的高速乘累加计算任务和针对存储访问冲突的低速累加计算任务。
29.进一步地,所述fpga端还包括一个多级存储结构;
30.所述多级存储结构根据所述内部存储器与所述卷积计算模块之间的距离,从远到近将所述内部存储器分为四个等级,生成四级存储结构;
31.所述四级存储结构均采用乒乓轮转设计;其中每级均包括两个存储单元,所述两个存储单元轮转使用,其中未使用的存储单元提前读入下一次计算所需数据。
32.与现有技术相比,本发明记载的一种面向fpga的稀疏卷积神经网络多级存储计算系统,基于arm端与fpga端协同工作的方式,最大程度发挥fpga高并行度、高吞吐量和低功耗的硬件优势,充分利用稀疏卷积神经网络的稀疏特性,获得尽可能高的加速比,快速高效的实现卷积神经网络的前向推理过程。
33.本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
34.下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
35.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
36.图1为本发明实施例提供的系统架构设计图。
37.图2为本发明实施例提供的arm端工作流程图。
38.图3为本发明实施例提供的分组编码示意图。
39.图4为本发明实施例提供的卷积计算模块结构图。
40.图5为本发明实施例提供的卷积计算模块工作原理图。
41.图6为本发明实施例提供的输出特征图分块策略示意图。
具体实施方式
42.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
43.参照图1所示,本发明实施例提供了一种面向fpga的稀疏卷积神经网络多级存储计算系统,包括arm端和fpga端;其中arm端负责推理前的准备任务和流程调度任务,fpga端为核心内容,负责计算类任务;arm端获取网络模型权重参数和输入特征图数据后,根据网络模型权重参数和输入特征图数据的存储信息生成流程控制指令,并将该流程控制指令发送到fpga端;fpga端在接收到流程控制指令后,从arm端中读取数据并进行计算,最后将计算结果反馈给所述arm端;arm端在将流程控制指令发送给fpga端后,arm端会暂停其他处理工作,直至fpga端将计算结果写入ddr中。
44.本实施例基于arm与fpga协同工作的形式,在zynq ultrascale mpsoc zcu102评估套件上设计和实现。本实施例中用于验证设计的目标网络采用skynet,共包括7个深度可分离卷积层和3个最大值池化层,如附表1所示。
45.附表一 skynet网络模型结构。
[0046][0047]
接下来对arm端进行说明:
[0048]
arm端包括片外存储器访问控制模块、ddr访问控制模块和流程控制模块;ddr访问控制模块内开辟有权重缓冲区和特征图缓冲区;
[0049]
参照图2所示,片外存储器访问控制模块从片外存储器中将网络模型权重参数和输入特征图数据读入到所述ddr访问控制模块中;
[0050]
ddr访问控制模块按照一定的分块策略对网络模型权重参数和输入特征图数据进行划分,然后以局部分块为单位将网络模型权重参数和输入特征图数据逐个写入共享ddr指定区域,即写入到权重缓冲区和特征图缓冲区;在本实施例中,将网络模型权重参数存放在起始地址为0x30000000,大小为16mb的0号共享区域;将输入特征图数据存放在起始地址为0x31000000,大小为86mb的1号共享区域;fpga端在计算结束后,会将计算结果写到ddr指定区域,此时从ddr指定区域可读取计算结果。
[0051]
流程控制模块根据网络模型权重参数和输入特征图数据的存储信息(即地址、分块坐标、卷积核尺寸及通道数、输入特征图大小和输出特征图大小等)生成流程控制指令,并将该流程控制指令通过axi4总线协议发送到fpga端;在fpga端计算结束后,流程控制模块会判断当前计算的层是否为网络的最后一层。如果不是最后一层,将由流程控制模块中的ddr控制器根据fpga端返回的结果生成新的流程控制指令,并将该流程控制指令再次传输至fpga端,以备下一层计算使用;如果是最后一层,将由片外存储器访问控制模块将最终的计算结果写入到片外存储器中;流程控制指令除了控制fpga端的启止外,同时包含了fpga完成离线推理任务的必备信息,比如当前计算的网络层号、特征图通道号、特征图大小等。
[0052]
接下来对fpga端进行说明:
[0053]
fpga端包括控制模块、数据读取模块、数据预处理模块、卷积计算模块、分块重组模块、数据后处理模块和特征图输出模块;其中数据读取模块、数据预处理模块、卷积计算模块、分块重组模块、数据后处理模块和特征图输出模块依次连接;
[0054]
控制模块包括层级指令解析单元、fpga状态监视单元、多模块控制单元、配置寄存器组和六个状态寄存器组;其中层级指令解析单元对所述arm端中流程控制模块发送过来的所述流程控制指令进行分析,从而获得所述存储信息;层级指令解析单元将所述存储信息存入到所述配置寄存器组;fpga状态监视单元包括六个状态机,每个状态机均对应有一个状态寄存器组;为保证各个模块之间的协调稳定工作,fpga状态监视单元通过这六个状
态机同时分别对数据读取模块、数据预处理模块、卷积计算模块、分块重组模块、数据后处理模块和特征图输出模块的工作状态进行监测,并将所获取的模块的工作状态存入对应的状态寄存器组中;多模块控制单元根据每个模块的工作状态生成控制指令,并将该控制指令发送给对应的模块,以此来控制各个模块的初始化、启动、停止、复位和状态转换;
[0055]
在本实施例中,控制模块负责整个fpga端的协调工作任务,并通过6类指令分别控制其他6个模块的工作状态,这6类指令包括:数据加载指令、数据预处理指令、计算操作指令、分块重组指令、数据后处理指令和数据存储指令。控制模块含有6个状态寄存器组,用来保存每个模块目前的工作状态。控制模块基于这些状态寄存器组来做出以下几个判断:
[0056]
一级块输入缓存(cache 2)是否有存储单元可用,数据读取模块能否读取一个单元的数据。
[0057]
数据预处理模块对一个一级块的预处理是否完成,一级块缓存(cache 2)中数据是否有待处理数据,二级块缓存(cache 1)是否有可用存储单元,是否对一个二级块数据进行预处理。
[0058]
卷积计算单元在一个二级块上的计算是否完成,二级块输入缓存(cache 1)中是否有待计算分块,二级块输出缓存(cache 1)中是否有可用存储单元,是否进行第二个分块的计算。
[0059]
分块重组模块对当前二级块的重组任务是否完成,二级块输出缓存(cache1)里是否有待重组分块,一级块输出缓存(cache 2)中是否有可用存储单元,是否对二级块输出缓存(cache 1)里的待重组分块进行重组。
[0060]
数据后处理模块对当前一级块的后处理任务是否完成,一级块输出缓存(cache 2)中是否有待处理分块,对一个二级块的后处理是否完成,预分块缓存(cache 3)是否有可用存储单元,是否对下一个二级块后处理,是否对下一个一级块做后处理。
[0061]
预分块缓存(cache 3)是否有待存储的预分块数据,是否对预分块数据进行存储。
[0062]
控制模块根据上述判断结果,将控制指令发送给相应模块,达到控制各个模块工作状态变更的目的,保证了fpga端的协调工作;控制模块控制其他各个模块进行工作的具体流程如下:
[0063]
多模块控制单元将数据加载指令发送给数据读取模块;数据读取模块从该数据加载指令中获取到网络模型权重参数和输入特征图数据当前的地址、分块坐标等信息,并把一定规模的网络模型权重参数、特征图数据及其索引从ddr访问控制模块读入到fpga端的sram(cache 2)中;其中读入数据的规模取决于分块大小和分块数量;其中特征图数据以一级块为单位,每次读入一个单位的数据。
[0064]
多模块控制单元将数据预处理指令发送给数据预处理模块;数据预处理模块对一级块输入缓存(cache 2)内的像素激活值进行稀疏编码和分组编码处理,并将处理结果存入二级块输入缓存(cache 1)的存储单元中;其中稀疏编码可以使在传输数据和计算时仅对二级块中的非零数据进行处理,减少了数据传输和计算量,降低了耗能和耗时;其中分组编码处理,参照附图3(a),在二级块内首先按照卷积核的大小(以3x3为例)再次分块(按照图中的黑色粗方框进行分块);并在每个分块内对根据像素激活值的块内位置对像素激活值进行编号,不同粗方框内相同编号的像素点为一组。在后续任务中按照组的顺序逐组将像素激活值读入并计算,如附图3(b)所示;通过分组编码处理,可以破坏像素激活值的局部
特性,从而达到降低计算笛卡尔积时存储器访问冲突率的目的;某些卷积神经网络除了主干网络外还具有一些分支旁路,因此不能直接对输出特征图进行后处理,故增设该数据预处理模块来增加本发明的普适性。
[0065]
多模块控制单元将计算操作指令发送给卷积计算模块;该卷积计算模块对预处理后的输入特征图数据进行卷积计算,输出二级块;参照附图4所示,卷积计算模块包括4个功能子模块(高速乘法阵列、高速加法阵列、低速加法阵列以及部分和读写模块)和两个存储体(cache 0:寄存器缓存和冲突缓存);
[0066]
其中高速乘法器阵列和高速加法阵列负责基于笛卡尔积的卷积乘累加计算任务;这两个阵列采用流水线设计技术,即高速乘法阵列的乘法器和高速加法阵列中的加法器一一对应;通过将权重值在列的方向上广播、像素激活值在行的方向上广播,实现权重值在一列的多个乘法器上复用、像素激活值在一行的多个乘法器上复用,进而计算出权重值和像素激活值的笛卡尔积;在计算笛卡尔积的同时,每个乘法器将根据输入的权重值和像素激活值位置进行坐标转换,使高速加法阵列根据该坐标从寄存器缓存中获取相应的部分和,从而完成基于笛卡尔积的高速乘累加计算任务;
[0067]
低速加法器阵列负责针对存储访问冲突的低速累加计算任务;由于输入权重和像素坐标具有随机性,当多个乘法器坐标转换所得的坐标值相同时,即多个加法器的结果将写入寄存器缓存的同一坐标位置,导致寄存器访问写冲突而产生计算错误;为有效处理该冲突,在高速加法阵列的每个加法器中增加冲突检测子模块,该模块可检测到发生存储访问冲突情况,之后通过低速加法器阵列完成冲突处理任务;
[0068]
部分和读写模块负责部分和的读入以及计算结果的输出;
[0069]
卷积计算模块工作原理可参照图5,其中a和b代表的乘法器计算结果和坐标转换结果分别为(6,30,71)和(20,30,71);由于两者的坐标转换结果均为(30,71),因此它们对应的加法器都将从坐标为(30,71)的寄存器(e)中读取数据,其数据值为9,并在做完累加后分别将它们的累加计算结果15(c)和29(d)写入该寄存器中,故写冲突发生,最后结果为15或29,假设为15。在下一个时钟周期,冲突检测子模块通过对比高速加法器输出的累加值和对应寄存器中的实际累加值,如果两者不相等,即说明有存储器访问冲突发生,需要将相应寄存器的坐标和本次计算的累加值构成三元组(20,30,71)存入冲突缓存中,后续交由低速加法阵列进行处理;由于卷积神经网络的模型结构和输入输出特征图都是多维的,因此在一个分块上得出的结果往往不是最终结果,需要将这些中间结果(称为部分和)由部分和读写单元暂存到二级块输出缓存中,待需要使用时,再读取到寄存器缓存中。寄存器缓存是一个寄存器阵列,以一维的形式实际存在,通过一定的技术手段将其抽象成二维阵列使用,其规模与二级块大小保持一致。冲突缓存为一个fifo存储器阵列,其规模与高速加法阵列一致,每个fifo的写端为高速加法器的冲突检测子模块,读端为低速加法器,三者根据相对位置一一对应。低速加法器中也带有冲突检测子模块,它从fifo中读取待累加值,即冲突三元组数据,并将该值与对应坐标寄存器中的数值相加,并检测是否有冲突再次发生。如果发生,加法器将不会读取新的冲突数据,重复上述过程直到没有冲突发生;如果没发生冲突,加法器将从fifo中读取新的冲突数据对其进行累加操作。高速加法阵列和低速加法阵列检测子模块对冲突处理的策略的差别,导致他们完成一次数据累加操作的时延不一样,其中高速加法阵列固定为1个时钟周期,而低速加法阵列则至少为2个时钟周期。
[0070]
多模块控制单元将分块重组指令发送给分块重组模块;分块重组模块根据二级块的相对位置将其写入一级块输出缓存的指定位置,即将多个二级块组合成一个完整的一级块;此处需注意的是,一级块输出缓存中的数据仍是局部分块数据(一级块),但是比二级块输出缓存中的二级块大得多。
[0071]
多模块控制单元将数据后处理指令发送给数据后处理模块;数据后处理模块根据下一层分块策略对输出特征图缓存中的数据预分块后,以块为单位对块内的数据做线性激活、池化操作、稀疏编码和像素激活值分组处理;并将处理结果存入预分块缓存(cache 3)中。
[0072]
多模块控制单元将数据存储指令发送给特征图输出模块;特征图输出模块从数据存储指令中获得存储数据的相关地址信息,并以一级块为单位将数据后处理模块处理后多得到的输出特征图数据写到指定的共享ddr区域;
[0073]
上述输出特征图分块策略如附图6所示,对输出特征图进行分块,并将分块结果映射到输入特征图上;根据局部数据块的大小将分块分为一级块和二级块;其中一级块由若干个二级块构成,在本实施例中,一级块由16个二级块构成;二级块的大小则根据fpga端计算模块内的寄存器缓存大小来设置,本实施例的二级块大小为20*16*1(列数*行数*通道数)。以输出分块大小为5*4*1为例,采取以输出分块的分块方式,由于输入分块会存在重叠部分,当输出分块大小为20*16*1时,对应的输入分块大小为21*17*1、22*17*1、21*18*1和22*18*1中的一个;基于层融合的思想,设置滑窗尺寸为2*2,滑窗在行、列上的移动步长均为2;每次读入相邻的4个数据,按照最大池化、线性激活、稀疏编码和激活值分组的顺序对其进行处理;并在对分块做处理的同时统计非零值的个数;最后将下一层输入数据的准备工作与上一层输出数据的后处理相结合,减少在数据读写上的花费;
[0074]
上述fpga端还包括一个多级存储结构;该多级存储结构根据所述内部存储器与所述卷积计算模块之间的距离,将内部存储器从远及近依次划分为cache 3,cache 2,cache 1和cache 0。其中cache 3为预分块缓存,其内每个存储单元的容量均为2kb;cache 2包括一级块输入缓存和一级块输出缓存,其内存储单元的容量均为32kb;cache 1包括二级块缓存和二级块输出缓存,其内存储单元的容量均为2kb;cache 0在卷积计算模块内部,包括寄存器缓存和冲突缓存;其中寄存器缓存的大小为20*16*1,冲突缓存为fifo整列,每个fifo最多可以存放64组冲突数据;
[0075]
上述cache 3,cache 2,cache 1和cache 0这四个等级的存储结构均采用乒乓轮转设计;其中每级均包括两个存储单元,这两个存储单元轮转使用,其中未使用的存储单元提前读入下一次计算所需数据;
[0076]
为了方便分块数据的管理和读写,将一级块输入/输出缓存的存储空间均等划分为16个区域,每个区域存放一个二级块数据。为保证数据读写不会出现溢出问题,二级块输入/输出缓存(cache 1)中每个存储单元的存储容量与一级块输入/输出缓存(cache 2)中的一个区域大小保持一致。一级块输出缓存中以一级块为基本单位存储特征图数据。
[0077]
本发明实施例提供了一种面向fpga的稀疏卷积神经网络多级存储计算系统,包括arm端和fpga端;其中fpga端的计算架构设计以并行计算阵列和多级存储结构为核心,发挥fpga高并行度、高吞吐量和低功耗的硬件优势,充分利用稀疏卷积神经网络的稀疏特性,获得尽可能高的加速比,快速高效的实现卷积神经网络的前向推理过程;
[0078]
在本发明计算架构的卷积计算模块、数据预处理模块、数据后处理模块的设计中,除了稀疏卷积神经网络离线推理的针对性方案外,还通过数据预处理模块中的稀疏编码增加了对普通卷积神经网络的支持,使本发明对普通卷积神经网络的离线推理任务也能达到良好的效果,扩展了本发明的适用范围。
[0079]
在本发明的多级存储计算架构中,各个功能模块与多级存储结构共同构成一条单向的数据传输链路,该链路上以计算模块为核心,依据存储单元与该模块间的距离对其进行分级,从而形成多级存储结构。在这条数据链路上功能模块与存储单元穿插错落排列,各功能模块之间通过多级存储结构间接相连,降低了模块之间的耦合度,增加了各模块的可扩展性和可替换性。在fpga硬件体系结构设计与开发的层面上,当一个模块因需求而被修改变动时并不会引起其他模块结构上的改变,即如果模块之间不存在逻辑功能的强相关性,那么一个模块修改变更后,其他模块不需要做适配调整也能正常工作,降低了维护、更新和扩展的难度和成本,有利于在实际应用中结合具体需求进行二次开发。
[0080]
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献