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

一种基于多FPGA异构架构的CNN神经网络加速设计方法

2022-09-03 20:11:40 来源:中国专利 TAG:

一种基于多fpga异构架构的cnn神经网络加速设计方法
技术领域
1.本发明涉及卷积神经网络加速技术领域,更具体地,涉及一种基于多fpga异构架构的cnn神经网络加速设计方法。


背景技术:

2.近年来,深度学习已经成为了学术界和工业界的研究热点。以卷积神经网络作为模型的算法在目标检测、语音算法方面取得了重大突破,而yolo系列的卷积神经网络在目标检测领域中极具代表性,其中yolov3作为目前主流的检测方法有着优秀的性能,但由于目前的相关算法不断更新迭代且规模巨大,在嵌入式端的部署是一个长期存在的问题,利用cpu进行处理存在的问题是耗时较长,因此目前主流的解决方式是采用gpu、fpga、asic芯片。
3.gpu是作为应对图像处理需求而出现的芯片、其数量众多的运算单元以及超高的并行运算能力非常契合深度学习的训练,但利用gpu进行神经网络训练存在的问题是能效比低且硬件结构固定。专用集成电路芯片(asic)是针对某一个场景定制的,是一种比gpu更加高效的方法,但是由于其开发周期长开发代价昂贵,并且由于asic都是定制的,这就使得它的可迁移性低。现场可编程门阵列fpga是一种可编程器件,fpga的可编程性和强大的并行计算能力使得fpga成为深度学习处理器的主力军,但利用fpga训练神经网络存在的问题是当训练的网络模型规模较大时,一些的fpga板性能不足导致网络训练结果不够理想甚至由于计数单元不足无法完成网络部署。另一个问题就是目前利用fpga进行神经网络开发时会利用到两种方法,第一种方法用hls(high level synthesis,高层次综合),先通过c/c 语言对系统进行编写,在通过hls可以快速生成卷积神经网络加速器ip核,做到降低fpga代码的开发时间,但是对系统的底层构架无法做到精准描述,导致所设计的方案解决问题的能效不佳。第二种方法是利用hdl语言,可以对特定的网络获得出色的能效和吞吐率,但是存在的问题就是描述大型网络代码规模太大,流程复杂且开发效率低。
4.针对上述现有技术缺陷,本发明基于fpga异构架构设计了cnn神经网络加速设计方法,通过对传统的fpga加速cnn网络进行了改进,对算法进行权值剪枝,压缩模型大小。在量化训练时将32位浮点运算转换为16位或8位定点运算,降低内存占用。针对不同的网络模型采用灵活可变的fpga异构架构,有效的减少网络模型对单个fpga开发板的性能需求,降低研究成本。在进行神经网络开发时,采取hls与hdl相结合的方式,对神经网络的不同模块分别使用hls和hdl开发,相比hdl开发缩短了开发时长,相比hls开发有更加高效的硬件利用率和更好的性能。


技术实现要素:

5.本发明的目的在于提供一种基于多fpga异构架构的cnn神经网络加速设计方法,对传统的fpga加速cnn网络进行了改进,对算法进行权值剪枝,压缩模型大小,采用灵活可变的fpga异构架构,有效的减少网络模型对单个fpga开发板的性能需求,降低研究成本,采
取hls与hdl相结合的方式,对神经网络的不同模块分别使用hls和hdl开发,相比hdl开发缩短了开发时长,相比hls开发有更加高效的硬件利用率和更好的性能。
6.为达到上述目的,提供了一种基于多fpga异构架构的cnn神经网络加速设计方法,包括以下步骤:步骤1、设计卷积神经网络在fpga开发板的若干个模块;根据模块的功能判断,在rtl级使用verilog hdl设计能实现完整的计算功能的模块,其余的模块使用vivado的hls工具进行开发;所述fpga开发板包括指令控制单元、数据收发单元、数量成对的卷积计算单元、输入缓存;步骤2、对卷积神经网络进行量化,将卷积神经网络的浮动32位数据量化为定点16位或8位数据;步骤3、利用pcie总线连接cpu、外部存储器与若干个fpga板,cpu依据任务分配法分配计算任务给fpga板;步骤4、cpu依据卷积神经网络的计算神经网络的相关信息对fpga板和外部存储器进行初始化配置;所述初始化配置包括加载信息、计算参数;步骤5、cpu获取加载信息并将加载信息通过数据收发单元加载至各个fpga开发板;步骤6、指令控制单元接受cpu的指令后,fpga开发板通过输入缓存载入计算参数;步骤7、两个卷积计算单元通过流水交替方式进行计算;步骤8、对卷积计算单元的工作状态进行检测并依据计算检测方法进行调整;步骤9、满足步骤8的条件下,重复6~8的操作,直到当前卷积神经网络计算完成,输出结果。
7.特别的,所述卷积神经网络采用yolov3网络。
8.特别的,步骤2中将卷积神经网络的浮动数据量化为定点数据具体包括量化卷积神经网络的权重数据步骤和量化卷积神经网络的特征图数据步骤。
9.特别的,所述量化网络的权重数据步骤的方法为:历遍卷积神经网络的每一个卷积层的权重数据,历遍不同的阶码,在保证量化后的整数表示范围比权重数据分布大的前提下,找到每层最优的权重阶码,根据原始权重和量化后的权重误差和的最小值确定16位动定点量化的小数点位置,确定小数部分的位长q,将权重数据乘以比例2^q,取整数数据即为int16动定点量化的结果;对int16动定点量化的结果进行反量化,反量化的过程为int16型量化结果除以比例系数2^q,得到反量化的浮点数结果;对卷积神经网络的每一卷积层权重数据进行上述操作,最后形成该卷积层的量化权重数据。
10.特别的,所述量化卷积神经网络的特征图数据步骤的方法为:准备校准数据集,数量为训练集数据的10%;遍历网络每一层的特征图输入数据,找出每一层输入特征图数据的最值,确定16位动定点量化的小数点位置,即确定小数部分的位长q,对网络的每一层进行量化操作,确定每一层的量化小数位数q,对校准数据集中的所有图片进行量化操作,对每一层的量化小数位数q求平均值,得出最后的网络输入特征图的量化小数位数q。
11.特别的,所述任务分配法具体包括以下步骤:使用预设的程序对卷积神经网络的网络模型大小进行分析,并获取每个fpga板的参数性能来评估各个fpga板的算力,依据算力分配每个fpga板对应的任务量来保证每块开发板的执行时间基本持平。
12.特别的,所述步骤4中所述相关信息为卷积神经网络相关计算层的层数信息,各个层的连接关系、计算规模、权重数值信息。
13.特别的,所述步骤5中的加载信息为卷积神经网络的网络层数、节点数。
14.特别的,所述步骤7中流水交替方式具体为:将存于输入缓存中相应位置的参数载入第一个置闲的卷积计算单元中;同时从外部存储器中取出用于下次卷积计算单元的参数存于输入缓存的相应位置;将输入缓存参数载入第二个卷积计算单元,完成第二个卷积计算单元的参数配置。
15.特别的,所述步骤8中计算检测方法的具体方法为:检测到有卷积计算单元处于空闲状态时,就继续从外部存储器中对应位置取出用于下一个卷积计算单元载入的参数放置到输入缓存中。
16.本发明的有益效果:1、本发明通过cpu控制多fpga的方式解决现有大型神经网络的加速实现对于单个fpga开发板性能需求高的问题,解决现有卷积神经网络规模大时无法在单fpga上部署的问题。
17.2、本发明通过hdl结合hls开发的方式,可以有效的解决hdl开发周期长、代码规模庞大的问题,解决现有加速卷积神经网络使用高层次综合开发性能不理想的问题。
18.3、本发明通过hdl结合hls开发的方式,相比较单一的hls开发的方式,所实现网络拥有更好的检测效果。
19.4、本发明通过通过使用fpga加速计算的方式对cpu算力要求低,解决现有加速卷积神经网络使用rtl级开发生产效率低的问题。
附图说明
20.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
21.图1为本发明实施例的总体框架图。
22.图2为本发明实施例hls结合hdl开发流程图。
23.图3为本发明实施例神经网络计算时的数据流程图。
具体实施方式
24.下面结合附图对本发明的优选实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。
25.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
26.需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的
限制。此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
27.此外,术语“水平”、“竖直”、“悬垂”等术语并不表示要求部件绝对水平或悬垂,而是可以稍微倾斜。如“水平”仅仅是指其方向相对“竖直”而言更加水平,并不是表示该结构一定要完全水平,而是可以稍微倾斜。
28.如图1、图2、图3所示,为实施例的一种基于多fpga异构架构的cnn神经网络加速设计方法,包括以下步骤:步骤1:设计卷积神经网络在fpga开发板的若干个模块,fpga开发板包括指令控制单元、数据收发单元、数量成对的卷积计算单元、输入缓存。对卷积神经网络的功能模块采取hls结合hdl实现的方法,针对不同的层为基础进行结构构建,采取灵活的设计方法,以yolov3为例,在yolov3中网络基本模块有:卷积层、bn层、leakyrelu层、残差块、上采样层、拼接层。对不同的模块根据功能,分别采取hls和hdl设计的方法。依据本发明的思想,卷积层的功能是对应位置做乘法后累加,本发明在rtl级使用verilog hdl设计出功能具有大量加法与乘法的模块,通过状态机进行控制,就能实现完整的卷积层功能,改变控制信号就能调节通道数、尺寸和步长。对于其余功能模块使用vivado的hls工具进行开发,减小了网络部署的工作量,显著的缩短开发时长。
29.步骤2:步骤2.1:量化卷积神经网络的权重数据步骤,历遍每一个卷积层的权重数据,历遍不同的阶码,在保证量化后的整数表示范围比权重数据分布大的前提下,找到每层最优的权重阶码,使原始权重和量化后的权重误差和最小,根据最值确定16位动定点量化的小数点位置,确定小数部分的位长q,将权重数据乘以比例2^q,取整数数据即为int16动定点量化的结果;反量化的过程为int16型量化结果除以比例系数2^q,得到反量化的浮点数结果;对网络的每一卷积层权重数据进行上述操作,最后形成该网络卷积层的量化权重数据;步骤2.2:量化卷积神经网络的特征图数据步骤,准备校准数据集,数量为训练集数据的10%;遍历网络每一层的特征图输入数据,找出每一层输入特征图数据的最值,确定16位动定点量化的小数点位置,即确定小数部分的位长q,对网络的每一层进行量化操作,确定每一层的量化小数位数q,对校准数据集中的所有图片进行量化操作,对每一层的量化小数位数q求平均值,得出最后的网络输入特征图的量化小数位数q。
30.步骤3:通过pcie总线连接cpu和fpga板,cpu依据任务分配法分配计算任务给fpga板,任务分配法为:使用预设的程序对卷积神经网络的网络模型大小进行分析,输入fpga开发板的参数性能,根据结果由cpu分配给各个开发板,分配准则是评估各个开发板的算力,根据评估结果分配对应任务量来保证每块开发板的执行时间基本持平。
31.步骤4:由cpu对fpga写数据,采用cpu作为主控制器,fpga开发板作为协控制器,首先cpu获取该神经网络的相关信息,相关信息包括卷积层、池化层等以及输入输出等神经网络相关计算层的层数信息,各个层的连接关系、计算规模、权重数值信息,通过本步骤保证cpu可以获取到所需计算神经网络的全部信息,从而动态的配置外部存储器的存储资源,对fpga板和外部存储器进行初始化配置,初始化配置包括加载信息、计算参数,缓存一次性存取的规模大小以及卷积计算单元的相关参数。
32.步骤5:cpu获取加载信息并将加载信息通过数据收发单元加载至各个fpga开发,
具体为:cpu将yolov3神经网络的网络层数、节点数信息,通过驱动程序的接口进行数据发送,然后fpga开发板的数据收发模块通过pcie总线接受数据后送至fpga开发板的其他模块进行使用,当程序的接口读取fpga开发板的数据时,用户应用程序通过驱动程序的接口产生读数据的请求,然后fpga开发板用数据收发模块从fpga开发板的其他模块中读取数据,并通过pcie总线对该数据进行发送,然后cpu端即可接收该数据。
33.步骤6:指令控制单元接受cpu的指令后,fpga开发板通过输入缓存载入计算参数,将存于输入缓存中相应位置的计算参数载入第一个置闲的卷积计算单元中;同时从外部存储器中取出用于下次卷积计算单元的参数存于输入缓存的相应位置。将输入缓存参数载入第二个卷积计算单元,完成第二个卷积计算单元的参数配置。
34.步骤7:两个卷积计算单元通过流水交替方式进行计算,具体为:在步骤6进行同时,将输入数据输送到卷积计算单元1的输入端口,控制第一个卷积计算单元进行计算,得到计算结果。当第一个卷积计算单元进行计算时,有计算指令输入时,检测第二个卷积计算单元是否处于计算状态,如果处于计算状态,则继续等待,如果没有处于计算状态,则将输入数据输送到卷积计算单元2的输入端口,进行计算。
35.步骤8:对卷积计算单元的工作状态进行检测并依据计算检测方法进行调整,计算检测方法具体为,检测到有卷积计算单元处于空闲状态时,就继续从外部存储器中对应位置取出用于下一个卷积计算单元载入的参数放置到输入缓存中。
36.步骤9:满足步骤8的条件下,重复6~8的操作,直到当前网络的计算进度达到100%,此时将输出结果输出给输出缓存,并反馈cpu计算结束,等待外部存储器读取最终的计算结果并存储。
37.虽然结合附图描述了本发明的实施方式,但是专利所有者可以在所附权利要求的范围之内做出各种变形或修改,只要不超过本发明的权利要求所描述的保护范围,都应当在本发明的保护范围之内。
再多了解一些

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

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

相关文献