一种自适应FPGA存储资源的神经网络加速器的制作方法

文档序号:31839298发布日期:2022-10-18 22:10阅读:43来源:国知局
一种自适应FPGA存储资源的神经网络加速器的制作方法
一种自适应fpga存储资源的神经网络加速器
技术领域
1.本发明属于计算机领域,涉及深度学习领域,具体是一种自适应fpga存储资源的神经网络加速器。合理控制指令,根据所选fpga内部存储资源容量大小以及网络层数据容量大小,选择不同的卷积运算方式,实现卷积神经网络加速方法在fpga上的部署,进而完成加速功能。


背景技术:

2.近些年来,深度神经网络技术被广泛应用,尤其是在图像处理、目标检测、语音识别等应用方面最为突出。深度神经网络具有极佳的精准度,通过分析庞大的数据获取更精准的结果。深度神经网络越深、模拟能力越强,推理的精准度也越高。
3.卷积神经网络属于深度神经网络。虽然卷积神经网络具有很高的精准度,但是同时随着神经网络层数增多,卷积神经网络算法的计算量也随着变得庞大,对于硬件内存的存储容量要求也越来越高。一旦硬件资源选定,内部存储空间也确定了,但是对于同一个算法模型,不同网络层的参数量可大可小,按照同样的计算方式,可能存在大网络层的输入特征图像数据或者权值参数数据容量过大而内部存储空间缓存不了的情况。如果硬件内部数据缓存过小,卷积神经网络加速的性能会受影响。另外,对于同一个算法模型,固定的网络层卷积运算方式,在存储资源多的fpga上可以部署,但是在存储资源少的fpga上因资源受限而不能部署,直接导致卷积神经网络加速方法不能在fpga上实现的问题。


技术实现要素:

4.本发明的目的在于提供一种自适应fpga存储资源的神经网络加速器,合理控制指令,根据所选fpga内部存储资源容量大小以及网络层数据容量大小,选择不同的卷积运算方式,实现卷积神经网络加速方法在fpga上的部署,进而完成加速功能。
5.为实现上述目的,本发明所采取的技术方案为:
6.一种自适应fpga存储资源的神经网络加速器,所述自适应fpga存储资源的神经网络加速器,包括:指令控制模块、输入特征图阵列、权值阵列以及乘累加阵列,其中:
7.所述指令控制模块,用于根据待处理的输入特征图数据和所述输入特征图阵列的容量大小、待处理的权值数据和所述权值阵列的容量大小决策输入特征图数据和权值数据的缓存方式及计算方式,并根据决策结果向所述输入特征图阵列、权值阵列和乘累加阵列发布对应的指令;
8.所述输入特征图阵列,用于根据所述指令控制模块发布的指令获取所述输入特征图数据中对应地址的数据进行缓存;
9.所述权值阵列,用于根据所述指令控制模块发布的指令获取所述权值数据中对应地址的数据进行缓存;
10.所述乘累加阵列,用于根据所述指令控制模块发布的指令获取输入特征图阵列和权值阵列中的数据执行乘累加操作,并输出卷积运算结果。
11.以下还提供了若干可选方式,但并不作为对上述总体方案的额外限定,仅仅是进一步的增补或优选,在没有技术或逻辑矛盾的前提下,各可选方式可单独针对上述总体方案进行组合,还可以是多个可选方式之间进行组合。
12.作为优选,所述缓存方式如下:
13.缓存方式1:输入特征图数据完整缓存至所述输入特征图阵列中,权值数据完整缓存至所述权值阵列中;
14.缓存方式2:输入特征图数据完整缓存至所述输入特征图阵列中,权值数据进行拆分并先后缓存至所述权值阵列中;
15.缓存方式3:输入特征图数据进行拆分并先后缓存至所述输入特征图阵列中,权值数据完整缓存至所述权值阵列中;
16.缓存方式4:输入特征图数据进行拆分并先后缓存至所述输入特征图阵列中,权值数据进行拆分并先后缓存至所述权值阵列中。
17.作为优选,所述指令控制模块,根据待处理的输入特征图数据和所述输入特征图阵列的容量大小、待处理的权值数据和所述权值阵列的容量大小决策输入特征图数据和权值数据的缓存方式,执行如下操作:
18.若输入特征图数据小于或等于输入特征图阵列的容量大小,并且权值数据小于或等于权值阵列的容量大小,则选择缓存方式1、缓存方式2、缓存方式3和缓存方式4中的任意一种缓存输入特征图数据和权值数据;
19.或者,若输入特征图数据小于或等于输入特征图阵列的容量大小,同时权值数据大于权值阵列的容量大小,则选择缓存方式2和缓存方式4中的任意一种缓存输入特征图数据和权值数据;
20.或者,若输入特征图数据大于输入特征图阵列的容量大小,同时权值数据小于或等于权值阵列的容量大小,则选择缓存方式3和缓存方式4中的任意一种缓存输入特征图数据和权值数据;
21.或者,若输入特征图数据大于输入特征图阵列的容量大小,同时权值数据大于权值阵列的容量大小,则选择缓存方式4缓存输入特征图数据和权值数据。
22.作为优选,所述指令控制模块,根据待处理的输入特征图数据和所述输入特征图阵列的容量大小、待处理的权值数据和所述权值阵列的容量大小决策输入特征图数据和权值数据的计算方式,执行如下操作:
23.若决策的缓存方式为缓存方式1,则决策的计算方式为:命令所述乘累加阵列依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作;
24.或者,若决策的缓存方式为缓存方式2,则决策的计算方式为:命令所述乘累加阵列先依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作,后在权值阵列中的权值数据更新后继续依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作;
25.或者,若决策的缓存方式为缓存方式3,则决策的计算方式为:命令所述乘累加阵列先依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作,后在输入特征图阵列中的输入特征图数据更新后继续依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作;
26.或者,若决策的缓存方式为缓存方式4,则决策的计算方式为:命令所述乘累加阵列先依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作,后在输入特征图阵列中的输入特征图数据更新后或者权值阵列中的权值数据更新后继续依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作。
27.作为优选,所述输入特征图数据按照行的方式进行拆分,或者所述输入特征图数据按照n个像素点为一个整体的方式进行拆分。
28.作为优选,所述权值数据按照q/2个过滤器的权值数据为一个整体的方式进行拆分,或者所述权值数据按照r个权值数据为一个整体的方式进行拆分,其中q为权值数据对应的过滤器的总数。
29.本发明提供的自适应fpga存储资源的神经网络加速器,指令控制模块包含多种指令,可根据不同网络层的输入特征图像数据和权值参数数据容量与硬件内部存储容量的大小关系,发布不同的指令,实现卷积运算。降低了网络层的输入特征图像数据和权值参数数据容量与硬件内部存储容量的耦合关系,从而提高了fpga的部署实现。同时,在硬件存储资源有限的情况下,针对不同的网络层采用不同的卷积计算方式,也可以进一步的提高加速器的加速性能。
附图说明
30.图1为本发明的自适应fpga存储资源的神经网络加速器的结构示意图;
31.图2为本发明输入特征图像数据和权值数据的缓存方式示意图;
32.图3为本发明输入特征图数据拆分方式示意图;
33.图4为本发明权值数据拆分方式示意图;
34.图5为本发明输入特征图阵列和权值阵列的分配示意图;
35.图6为本发明缓存方式1控制缓存时的卷积运算方式示意图;
36.图7为本发明缓存方式2控制缓存时的卷积运算方式示意图;
37.图8为本发明缓存方式3控制缓存时的卷积运算方式示意图;
38.图9为本发明缓存方式4控制缓存时的卷积运算方式示意图。
具体实施方式
39.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
40.除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是在于限制本发明。
41.为了克服现有技术中神经网络加速器的缺陷,本实施例提供一种自适应fpga存储资源的神经网络加速器,充分利用指令控制加速器的运算方式,通过不同的指令控制乘累加阵列采用不同的运算方式,自适应fpga存储资源,使卷积神经网络不受限于fpga内部的存储资源,进而完成加速的目的。
42.具体的,如图1所示,本实施例的自适应fpga存储资源的神经网络加速器,包括:指令控制模块、输入特征图阵列、权值阵列以及乘累加阵列。
43.其中指令控制模块,用于根据待处理的输入特征图数据和所述输入特征图阵列的容量大小、待处理的权值数据和所述权值阵列的容量大小决策输入特征图数据和权值数据的缓存方式及计算方式,并根据决策结果向所述输入特征图阵列、权值阵列和乘累加阵列发布对应的指令。
44.输入特征图阵列,用于根据所述指令控制模块发布的指令获取所述输入特征图数据中对应地址的数据进行缓存。
45.权值阵列,用于根据所述指令控制模块发布的指令获取所述权值数据中对应地址的数据进行缓存。
46.乘累加阵列,用于根据所述指令控制模块发布的指令获取输入特征图阵列和权值阵列中的数据执行乘累加操作,并输出卷积运算结果。乘累加阵列获取数据本质上应为输入特征图像阵列和权值阵列根据卷积核大小将输入特征图像数据和权值数据以滑动窗口的方式发送到乘累加阵列中。
47.本实施例通过指令控制模块控制当前网络层卷积运算的方式,根据fpga内部用于输入特征图像数据、权值数据缓存的容量大小,选择当前网络层卷积的运算方式。在此过程中,同一卷积神经网络算法的同一卷积网络层可以选择不同的运算方式。这使得本实施例能够利用指令控制模块发布不同的指令,可以在不同的网络层采用不同的卷积运算方式,从而达到自适应fpga存储资源,实现在fpga上部署并加速的目的。
48.本实施例中由指令控制模块决定输入特征图数据、权值数据如何缓存,指令控制模块发送指令给输入特征图阵列和权值阵列,由输入特征图阵列和权值阵列根据收到的指令,去外部获取相应的数据缓存在自己的阵列内。
49.同时指令控制模块向乘累加阵列发送具体的计算步骤,更准确的说是乘累加阵列具体执行什么操作是由指令控制模块控制,指令控制模块发送一次指令,乘累加阵列根据接收到的指令执行任务。容易理解的是,指令控制模块发送给乘累加阵列、权值阵列和输入特征图阵列的指令不一样,各有专属的指令。
50.如图2所示,本实施例设置的缓存方式包括:
51.缓存方式1:输入特征图数据(特征图像)完整缓存至所述输入特征图阵列中,权值数据完整缓存至所述权值阵列中。
52.缓存方式2:输入特征图数据完整缓存至所述输入特征图阵列中,权值数据进行拆分并先后缓存至所述权值阵列中。
53.缓存方式3:输入特征图数据进行拆分并先后缓存至所述输入特征图阵列中,权值数据完整缓存至所述权值阵列中。
54.缓存方式4:输入特征图数据进行拆分并先后缓存至所述输入特征图阵列中,权值数据进行拆分并先后缓存至所述权值阵列中。
55.需要说明的是,本实施例设置的缓存方式为常规通用的缓存方式,在其他实施例中还可以根据需要进行增减。
56.基于上述的4中缓存方式,指令控制模块决策输入特征图数据和权值数据的缓存方式时,执行如下操作:
57.若输入特征图数据小于或等于输入特征图阵列的容量大小,并且权值数据小于或等于权值阵列的容量大小,则选择缓存方式1、缓存方式2、缓存方式3和缓存方式4中的任意一种缓存输入特征图数据和权值数据。
58.或者,若输入特征图数据小于或等于输入特征图阵列的容量大小,同时权值数据大于权值阵列的容量大小,则选择缓存方式2和缓存方式4中的任意一种缓存输入特征图数据和权值数据。
59.或者,若输入特征图数据大于输入特征图阵列的容量大小,同时权值数据小于或等于权值阵列的容量大小,则选择缓存方式3和缓存方式4中的任意一种缓存输入特征图数据和权值数据。
60.或者,若输入特征图数据大于输入特征图阵列的容量大小,同时权值数据大于权值阵列的容量大小,则选择缓存方式4缓存输入特征图数据和权值数据。
61.即本实施例在输入特征图阵列能够完整存储输入特征图数据的情况下,仍可根据其他因素(例如计算压力、速率)等对输入特征图数据进行拆分,以提高计算灵活性。权值数据同理理解。
62.基于上述的4中缓存方式,指令控制模块决策输入特征图数据和权值数据的计算方式时,执行如下操作:
63.若决策的缓存方式为缓存方式1,则决策的计算方式为:命令所述乘累加阵列依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作。
64.或者,若决策的缓存方式为缓存方式2,则决策的计算方式为:命令所述乘累加阵列先依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作,后在权值阵列中的权值数据更新后继续依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作。
65.或者,若决策的缓存方式为缓存方式3,则决策的计算方式为:命令所述乘累加阵列先依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作,后在输入特征图阵列中的输入特征图数据更新后继续依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作。
66.或者,若决策的缓存方式为缓存方式4,则决策的计算方式为:命令所述乘累加阵列先依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作,后在输入特征图阵列中的输入特征图数据更新后或者权值阵列中的权值数据更新后继续依次从输入特征图阵列和权值阵列中获取输入特征图数据和权值数据进行乘累加操作。
67.以缓存方式2为例,其中权值数据需要进行拆分先后缓存,则在该情况下需要根据权值阵列中的数据更新先后进行多次乘累加运算。例如将权值数据拆分为两部分,在完成第一部分的权值数据与输入特征图数据的乘累加运算后,指令控制模块触发权值阵列读取并缓存权值数据的第二部分,在权值阵列更新其缓存的为权值数据的第二部分后,指令控制模块触发乘累加阵列读取输入特征图阵列和权值阵列中的数据进行乘累加运算,完成最终的卷积运算。
68.如图3所示,其中输入特征图数据按照行的方式进行拆分(图中c表示输入特征图数据的通道数,m表示输入特征图数据的行数,n为用于拆分输入特征图数据的行数,1《=n《m),或者输入特征图数据按照n个像素点为一个整体的方式进行拆分(图中m为输入特征图
数据的像素点总个数,n为用于拆分输入特征图数据的像素点个数,1《=n《m)。
69.如图4所示,权值数据按照q/2个过滤器的权值数据为一个整体的方式进行拆分(图中c表示权值数据的通道数,q为权值数据对应的过滤器的总数),或者权值数据按照r个权值数据为一个整体的方式进行拆分,以r为单位依次拆分每一个过滤器的权值数据。
70.需要说明的是,输入特征图数据和权值数据的拆分既可以是均分,也可以不是均分,根据实际情况选择即可。
71.为了提高存储灵活性,如图5所示,输入特征图像数据和权值参数数据既可以缓存在同一个阵列中的不同位置,也可以分别缓存于不同的阵列中。
72.为了便于理解,以下基于一个具体实例进行说明。
73.以硬件内部fpga存储资源中用于输入特征图像数据缓存的空间(即输入特征图阵列的容量)为1mb,用于权值数据缓存的空间(即权值阵列的容量)为2mb为例,所述的卷积神经网络加速方法如下:
74.情形1:当网络层的输入特征图像数据为512kb(小于1mb)和权值数据为256kb(小于2mb)时,指令控制模块决策缓存方式为缓存方式1,如图6所示。获取输入特征图像数据和权值数据分别缓存于硬件内部的输入特征图像阵列和权值阵列内。然后乘累加阵列依次从输入特征图像阵列和权值阵列中获取相应的输入特征图像数据和权值数据进行乘累加操作,最后将计算的结果数据输出。另外,此种情况下,指令控制模块也可选择缓存方式为缓存方式2~缓存方式4,详细计算过程如下情形2~情形4所述。
75.情形2:当网络层的输入特征图像数据为512kb(小于1mb)和权值数据为3mb(大于2mb)时,指令控制模块决策缓存方式为缓存方式2,如图7所示。获取输入特征图像数据缓存于硬件内部的输入特征图像阵列内,同时先获取1.5mb(本实施例以均分为例)的权值数据缓存于权值阵列内。然后乘累加阵列依次从输入特征图像阵列和权值阵列中获取相应的输入特征图像数据和权值数据进行乘累加操作,并将计算的结果数据输出。当权值阵列内的1.5mb权值数据使用完后,再获取余下的1.5mb权值数据缓存于权值阵列中,然后重复上述的卷积运算过程。另外,此种情况下,指令控制模块也可选择缓存方式为缓存方式4,详细计算过程如下情形4所述。
76.情形3:当网络层的输入特征图像数据为1.6mb(大于1mb)和权值数据为256kb(小于2mb)时,指令控制模块决策缓存方式为缓存方式3,如图8所示。先获取0.8mb的输入特征图像数据缓存于硬件内部的输入特征图像阵列内,同时获取全部的权值数据缓存于权值阵列内。然后乘累加阵列依次从输入特征图像阵列和权值阵列中获取相应的输入特征图像数据和权值数据进行乘累加操作,并将计算的结果数据输出。当输入特征图像阵列内的输入特征图像数据使用完后,再获取余下的0.8mb的输入特征图像数据缓存于输入特征图像阵列中,然后重复上述的卷积运算过程。另外,此种情况下,指令控制模块也可选择缓存方式为缓存方式4,详细计算过程如下情形4所述。
77.情形4:当网络层的输入特征图像数据为1.6mb(大于1mb)和权值数据为3mb(大于2mb)时,指令控制模块决策缓存方式为缓存方式4,如图9所示。先获取0.8mb的输入特征图像数据缓存于硬件内部的输入特征图像阵列内,同时先获取前1.5mb的权值数据缓存于权值阵列内。然后乘累加阵列依次从输入特征图像阵列和权值阵列中获取相应的输入特征图像数据和权值数据进行乘累加操作,并将计算的结果数据输出。当权值阵列内的1.5mb权值
数据使用完后,再获取余下的1.5mb权值数据缓存于权值阵列中,然后重复上述的卷积运算过程。当所有的权值数据和前0.8mb的输入特征图像数据全部完成卷积运算后,再获取余下的0.8mb的输入特征图像数据缓存于硬件内部的输入特征图像阵列内,同时再次获取前1.5mb的权值数据缓存于权值阵列内,然后重复上述的卷积运算过程,后获取余下的1.5mb权值数据缓存于权值阵列中,直到余下的0.8mb的数据与所有的权值数据完成相应的卷积运算。
78.综上所述,本实施例的自适应fpga存储资源的神经网络加速器。合理控制指令,根据所选fpga内部存储资源容量大小以及网络层数据容量大小,选择不同的卷积运算方式,实现卷积神经网络加速方法在fpga上的部署,进而完成加速功能。
79.以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
80.以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1