1.本公开涉及计算机技术领域,特别涉及一种加速器参数确定方法、加速器参数确定装置和计算机可读介质。
背景技术:2.随着神经网络在各种任务的执行效率上超越人工水平,各行各业对于神经网络应用的需求愈发高涨,但是神经网络结构复杂,且参数量和计算量巨大,端侧和边缘侧由于无法提供类似于图形处理器(graphics processing unit,简称gpu)的强大算力,其落地实现遇到巨大阻碍。为了解决这一问题,学者提出了在软硬件层面对神经网络的计算进行加速。
3.但现阶段软件层面的各类加速方式有需要探索过程或硬件实现复杂等缺点,硬件层面的各类加速方式同样存在多种问题,例如,加速器运行神经网络的效率较低;性能/资源评估模型过于依赖某种基础架构或者算法;评估模型得到的结果仅仅用于硬件架构设计的优化,并没有和软件加速过程协同起来等。
技术实现要素:4.本公开旨在至少解决现有技术中存在的技术问题之一,提出了一种加速器参数确定方法、加速器参数确定装置和计算机可读介质。
5.为实现上述目的,第一方面,本公开实施例提供了一种加速器参数确定方法,包括:
6.根据预先设置的压缩参数对神经网络进行压缩,并获取压缩后的神经网络的网络参数;
7.根据所述网络参数生成加速器的架构参数,其中,所述加速器用于实现对神经网络的运算的加速;
8.根据预先设置的资源要求和性能要求对所述架构参数进行评估,并在评估通过后,输出所述网络参数和所述架构参数。
9.第二方面,本公开实施例还提供了一种加速器参数确定装置,包括:
10.一个或多个处理器;
11.存储装置,用于存储一个或多个程序;
12.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述实施例中所述的加速器参数确定方法。
13.第三方面,本公开实施例还提供了一种计算机可读介质,其上存储有计算机程序,其中,所述程序被处理器执行时实现如上述实施例中所述的加速器参数确定方法中的步骤。
14.本公开具有以下有益效果:
15.本公开实施例提供了一种加速器参数确定方法、加速器参数确定装置和计算机可读介质,可通过对神经网络进行压缩,并根据压缩后的神经网络的网络参数生成加速器的
架构参数,以及对架构参数的评估,实现不需要进行实际运行测试确定加速器相应参数,有效缩短了加速器的设计周期,并得出给定硬件资源和性能要求下的近似最优解。
附图说明
16.图1为本公开实施例提供的一种加速器参数确定方法的流程图;
17.图2为本公开实施例提供的另一种加速器参数确定方法的流程图;
18.图3为本公开实施例中步骤s3的一种具体实施方法流程图;
19.图4为本公开实施例提供的一种fpga加速器的结构框图;
20.图5为本公开实施例中步骤s301的一种具体实施方法流程图。
具体实施方式
21.为使本领域的技术人员更好地理解本公开的技术方案,下面结合附图对本公开提供的加速器参数确定方法、加速器参数确定装置和计算机可读介质进行详细描述。
22.在下文中将参考附图更充分地描述示例实施例,但是所述示例实施例可以以不同形式来体现且不应当被解释为限于本文阐述的实施例。反之,提供这些实施例的目的在于使本公开透彻和完整,并将使本领域技术人员充分理解本公开的范围。
23.本文所使用的术语仅用于描述特定实施例,且不意欲限制本公开。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。还将理解的是,当本说明书中使用术语“包括”和/或“由
……
制成”时,指定存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其他特征、整体、步骤、操作、元件、组件和/或其群组。
24.将理解的是,虽然本文可以使用术语第一、第二等来描述各种元件,但这些元件不应当受限于这些术语。这些术语仅用于区分一个元件和另一元件。因此,在不背离本公开的指教的情况下,下文讨论的第一元件、第一组件或第一模块可称为第二元件、第二组件或第二模块。
25.除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本公开的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。
26.本公开所提供的加速器参数确定方法、加速器参数确定装置和计算机可读介质,可用于通过对神经网络进行压缩,并根据压缩后的神经网络的网络参数生成加速器的架构参数,以及对架构参数的评估,实现在不需要进行实际运行测试的前提下,有效缩短了加速器的设计周期,并得出给定硬件资源和性能要求下的近似最优解
27.图1为本公开实施例提供的一种加速器参数确定方法的流程图。如图1所示,该方法包括:
28.步骤s1、根据预先设置的压缩参数对神经网络进行压缩,并获取压缩后的神经网络的网络参数。
29.其中,压缩参数包括压缩比和神经网络模型的精度等,对神经网络进行压缩包括通过网络剪枝(pruning)和权重量化等方式对神经网络进行压缩,也即是对神经网络的权
重参数进行压缩。具体地,网络剪枝用于移除不重要的权重参数,鲁棒性较好,且支持预训练,其中,网络剪枝分为结构化剪枝和非结构化剪枝,结构化剪枝对硬件友好,但精度损失较大,非结构化剪枝对硬件不友好,但精度损失较小;权重量化具体有量化、共享和编码过程,与剪枝类似,实现对权重进行结构化、规整的处理,简单的量化、共享和编码过程更有利于硬件实现,但精度损失较大;复杂的量化、共享和编码过程精度损失较小,意味着能够提供更好的压缩效果,但是硬件控制较为复杂。
30.步骤s2、根据网络参数生成加速器的架构参数。
31.其中,根据网络参数并结合相应加速器的硬件环境和硬件特性,生成该加速器的架构参数,该加速器用于实现对神经网络的运算的加速,架构参数的生成原则为最大化利用加速器的逻辑单元阵列以及缓存。
32.特别地,针对卷积神经网络(convolutional neural network,简称cnn),其运算包括卷积计算,卷积计算涉及输入数据、卷积核和输出数据,三者均为三维数组。其中,输入数据具有行列属性,并具有多个层,对应多个通道;卷积核又称为权重,卷积核的层数与输入数据的层数相同,共有多个卷积核;输出数据即卷积计算的结果,输出数据的层数(通道数)取决于卷积核的个数;具体进行卷积时,针对一个卷积核,其在输入数据上滑动,在每个位置,卷积核上的数据点与覆盖的输入数据点一一相乘,所得的乘积,全部累加起来,再加上偏置,得到输出数据中的一个数据点;一个卷积核在输入数据上完成所有位置的滑动后,计算得到输出数据的一个通道;多个卷积核进行该过程,计算出输出数据的多个通道。
33.步骤s3、根据预先设置的资源要求和性能要求对架构参数进行评估,并在评估通过后,输出网络参数和架构参数。
34.其中,对架构参数进行评估,即对架构参数对应的加速器进行评估,当加速器占用的资源以及达到的性能均满足各自对应的资源要求和性能要求时,则评估通过。在一些实施例中,还包括;根据输出的网络参数和架构参数配置系统资源生成加速器。
35.有别于传统的加速器设计方法,需要等待加速器硬件开发完成,实际运行后才能测出性能和资源,耗时巨大,本公开实施例提供了一种加速器参数确定方法,该方法可用于通过对神经网络进行压缩,并根据压缩后的神经网络的网络参数生成加速器的架构参数,以及对架构参数的评估,实现在不需要进行实际运行测试的前提下确定架构参数,有效缩短加速器的设计周期,并得出给定硬件资源和性能要求下的近似最优解。
36.图2为本公开实施例提供的另一种加速器参数确定方法的流程图。如图2所示,该方法为基于图1所示方法的一种具体化可选实施方案。具体地,该方法不仅包括步骤s2和步骤s3,其中,步骤s1,根据预先设置的压缩参数对神经网络进行压缩,并获取压缩后的神经网络的网络参数的步骤,具体包括:步骤s101。
37.步骤s101、根据压缩参数对神经网络的每一层进行压缩,并获取压缩后的神经网络各层的网络参数。
38.具体地,针对卷积神经网络,根据压缩参数对其各卷积层进行压缩,并获取压缩后各层的网络层数,其中,各层对应的压缩参数可设置为相同或不同的。
39.图3为本公开实施例中步骤s3的一种具体实施方法流程图。具体地,该加速器为fpga(field programmable gate array)加速器,该架构参数包括存储器参数,该存储器参数包括神经网络各层对应的缓存(buffer)容量和存储器读写周期数,其中,存储器读写周
期数与读写存储器操作覆盖的循环层次有关,存储器读写周期数为一个测量值,需在评估测试的过程中计算得到,同时,缓存容量同样受读写存储器操作覆盖的循环层次影响;循环层次包括卷积核列、卷积核行、输出数据列、输出数据行、输入通道和输出通道;如图3所示,在步骤s3中,根据预先设置的资源要求和性能要求对架构参数进行评估的步骤,具体包括:步骤s301。
40.步骤s301、根据资源要求对缓存容量进行评估,以及根据性能要求对存储器读写周期数进行评估。
41.在一些实施例中,存储器读写周期数由一次读取的数据量和读取次数的乘积除以存储器带宽计算得到,其中,一次读取的数据量为读写存储器操作覆盖的内部循环层次所需的数据量,相应地,读取次数为读写存储器操作未覆盖的外部循环层次的循环次数。
42.在一些实施例中,该架构参数还包括层次循环顺序和分块(tiling)参数。
43.图4为本公开实施例提供的一种fpga加速器的结构框图。如图4所示,该fpga加速器包括存储器、输入数据缓存、权重缓存、输出数据缓存和逻辑单元阵列,其中,该存储器为双倍速率同步动态随机存储器(double data rate synchronous dynamic random access memory,简称ddr sdram,又称ddr),以外接的形式存在,起到内存的作用。
44.fpga加速器用于以较低的功耗,对神经网络的推理进行加速,得到较高的性能。针对卷积神经网络中一层卷积的加速,其工作流程为:将输入数据和卷积核存放在存储器中;从存储器中读取(部分)输入数据和卷积核到输入数据缓存和权重缓存;输入数据和卷积核进入逻辑单元阵列,进行乘加计算,结果缓存到输出数据缓存,重复进行本步骤,直到读取的输入数据和卷积核都使用完;将计算得到的(部分)输出数据保存到存储器中;重复上述步骤,直到存储器中的所有输入数据和卷积核都使用完。
45.其中,fpga加速器对神经网络的加速作用,主要依赖于大规模并行计算能力,其逻辑单元阵列中的单个逻辑单元一个时钟周期可以做一次乘加,在进行并行计算时,具备多少个逻辑单元则可做多少次乘加计算。因此,对应于架构参数中的分块参数,fpga加速器的一个设计选项是:在每个循环中,可取出切片,集合起来进行并行计算,这个过程称为分块;一层循环对应一个分块参数,分块参数的取值范围为大于或等于1的整数,若分块参数等于1,则该层循环不做分块处理,若分块参数大于1,则该层循环做分块处理。
46.另外,对应于架构参数中的层次循环顺序和存储器参数,fpga加速器的设计选项还包括:设置多层循环的先后顺序和读写存储器操作覆盖的循环层次。例如,共6层循环,循环顺序的排列为卷积核列、卷积核行、输出数据列、输出数据行、输入通道和输出通道;设置读取输入数据操作的内层有4层循环,排列为卷积核列、卷积核行、输出数据列和输出数据行,表示从存储器读取一次输入数据,存入片上缓存,供这4层循环使用,即该操作覆盖内层4层循环,此时,一次读取的数据量是内部4层循环所需的数据量,读取次数是外部2层循环的循环次数。
47.图5为本公开实施例中步骤s301的一种具体实施方法流程图。具体地,在步骤s301中,在对缓存容量的评估通过后,进行对存储器读写周期数的评估;如图5所示,在步骤s301中,根据资源要求对缓存容量进行评估的步骤,具体包括:步骤s301a-步骤s303a;在步骤s301中,根据性能要求对存储器读写周期数进行评估的步骤,具体包括:步骤s301b-步骤s303b;步骤s301还包括:步骤s301c。
48.步骤s301a、比较全部缓存容量是否小于或等于其各自对应的资源阈值。
49.在步骤s301a中,比较各层的缓存容量与其各自对应的资源阈值。
50.其中,该资源阈值是根据相应资源要求确定的,若比较出全部缓存容量均小于或等于其各自对应的资源阈值,则执行步骤s302a;若比较出存在至少一个缓存容量大于资源阈值,则执行步骤s303a。
51.在一些实施例中,各层的缓存容量对应的资源阈值不同,或者可设置为同一个。
52.步骤s302a、对缓存容量的评估结果为通过。
53.其中,若全部缓存容量均小于或等于其各自对应的资源阈值,则对缓存容量的评估通过。
54.步骤s303a、对架构参数进行调整,并判断是否符合预先设置的循环跳出条件。
55.其中,若存在至少一个缓存容量大于其对应的资源阈值,则对架构参数进行调整。在一些实施例中,若未设置循环跳出条件,则直接返回步骤s301a,比较全部缓存容量与其各自对应的资源阈值。
56.在步骤s303a中,若判断出不符合预先设置的循环跳出条件,则返回步骤s301a,比较全部缓存容量是否小于或等于其各自对应的资源阈值的步骤;若判断出符合预先设置的循环跳出条件,则执行步骤s301c。
57.其中,符合预先设置的循环跳出条件的实际意义为,无法通过对架构参数进行调整以使得全部缓存容量均小于或等于其各自对应的资源阈值(性能阈值)。在一些实施例中,该循环跳出条件可设置为循环次数大于或等于预先设置的次数阈值,或可根据控制台行为或用户行为进行跳出。
58.步骤s301b、比较全部存储器读写周期数的和是否小于或等于预先设置的性能阈值。
59.在步骤s301b中,比较全部存储器读写周期数的和与预先设置的性能阈值。
60.其中,该性能阈值是根据相应性能要求确定的,若比较出全部存储器读写周期数的和小于或等于性能阈值,则执行步骤s302b;若比较出全部存储器读写周期数的和大于性能阈值,则执行步骤s303b。
61.步骤s302b、对存储器读写周期数的评估结果为通过。
62.其中,若全部存储器读写周期数的和小于或等于性能阈值,则对存储器读写周期数的评估通过。
63.步骤s303b、对架构参数进行调整,并判断是否符合预先设置的循环跳出条件。
64.其中,若全部存储器读写周期数的和大于性能阈值,则对架构参数进行调整。在一些实施例中,若未设置循环跳出条件,则直接返回步骤s301b,比较全部存储器读写周期数的和与预先设置的性能阈值。
65.在步骤s303b中,若判断出不符合预先设置的循环跳出条件,则返回步骤s301b,比较比较全部存储器读写周期数的和是否小于或等于预先设置的性能阈值的步骤;若判断出符合预先设置的循环跳出条件,则执行步骤s301c。
66.其中,符合预先设置的循环跳出条件的实际意义为,无法通过对架构参数进行调整以使得全部存储器读写周期数的和小于或等于性能阈值。
67.步骤s301c、调整压缩参数,并根据调整后的压缩参数重新进行对神经网络的压
缩。
68.其中,当符合预先设置的循环跳出条件时,调整压缩参数,并根据调整后的压缩参数进行对神经网络的重新压缩,并基于该重新压缩后的神经网络返回步骤s1中,获取压缩后的神经网络的网络参数的步骤。此后继续进行上述评估步骤,进行循环,直到输出网络参数和架构参数。
69.需要说明的是,上文描述的对缓存容量的评估以及对存储器读写周期数的评估的执行顺序,仅为本公开中的一种可选实现方式,其不会对本公开的技术方案产生限制,即在本公开的技术方案中,步骤s301a~步骤s303a可位于步骤s301b~步骤s303b之前执行,或步骤s301a~步骤s303a可位于步骤s301b~步骤s303b之后执行,或者步骤s301a~步骤s303a与步骤s301b~步骤s303b穿插执行,其均属于本公开的保护范围。
70.本公开实施例提供了一种加速器参数确定方法,该方法可用于通过对神经网络进行压缩,并根据压缩后的神经网络的网络参数生成加速器的架构参数,以及对架构参数的评估,在评估时通过软硬件的多次快速交替迭代,降低参数测试周期,同时每次迭代过程中,可快速确定相应参数是否会受到资源限制或者性能限制,以及是否与软件神经网络模型不匹配,从而相互制约又相互接近,最终达到一个平衡点,得到整体上近似最优解。
71.下面对本公开提供的加速器参数确定方法结合实际应用进行详细描述。具体地,针对fpga加速器进行参数确定,该加速器在赛灵思(xilinx)zcu102硬件平台上进行实现,该加速器包括存储器、输入数据缓存、权重缓存、输出数据缓存和逻辑单元阵列;需加速的神经网络模型对象为yolov3-tiny模型。
72.首先,根据预先设置的压缩参数对该模型的各卷积层进行压缩,生成第一压缩模型并获取到该第一压缩模型各层的网络参数,其中,压缩参数包括压缩率和模型精度阈值,卷积层的压缩率均为30%,模型精度阈值为95%。
73.之后,根据获取到的网络参数生成加速器的架构参数,架构参数包括层次循环顺序、分块参数和存储器参数,存储器参数包括各层对应的缓存容量和存储器读写周期数,其中,存储器读写周期数为测量值,由读写存储器操作覆盖的循环层次进行体现。
74.具体地,循环层次包括卷积核列、卷积核行、输出数据列、输出数据行、输入通道和输出通道,生成架构参数的流程如下:
75.确定层次循环顺序,其中,设置卷积核3乘3全并行,则卷积核列和卷积核行被移入并行计算中不用再做设置,为最内层,而剩余需确定的顺序根据数据复用的层次确定;对于涉及的输入数据、权重和输出数据,根据数据量确定数据复用的层次,输入数据的复用层次为输出通道,权重的复用层次为输出数据列和输出数据行,输出数据的复用层次为输入通道、卷积核列和卷积核行;而对于yolov3-tiny模型,数据量最多的是conv12层,其中输入数据个数为86528,权重个数为4718592,输出数据个数为173056,权重和输出数据较多,因此首先满足两者的复用要求,将权重的复用层次输出数据列和输出数据行放在内层,输出数据的复用层次输入通道放在较外层次,输入数据的复用层次输出通道放在最外层,则最终确定出的循环顺序的排列为卷积核列、卷积核行、输出数据列、输出数据行、输入通道和输出通道。
76.确定分块参数,分块参数主要与逻辑单元个数相关,而逻辑单元个数由各循环层次的并行度确定,具体地,由各循环层次的并行度相乘得到;之前已设置卷积核3乘3全并
行,对于输入通道和输出通道,由于神经网络模型的卷积通道数一般都是16的倍数,尝试设置并行度为输入通道和输出通道均为16并行,得出逻辑单元个数为16*16*3*3=2304,大于芯片上逻辑单元总数为1728,该设置不满足逻辑单元总数要求,则设置并行度为输入通道16并行,输出通道8并行,得出逻辑单元个数为16*8*3*3=1152,满足逻辑单元总数要求,完成并行度设置。
77.确定读写存储器操作覆盖的循环层次,会对缓存容量和读写存储器次数产生影响。进行设置时,如果只考虑减小读写存储器次数,把读写存储器操作放在6层循环之外是最好的,只需读写一次,但这样设置缓存容量需要很大,超过片上缓存容量,因此要把读写操作放在某个循环层次里,并且尽量高于数据复用的层次。其中,三种数据读写操作的候选层次有,输入数据对应输入通道和输出通道,权重对应输入通道和输出通道,输出数据对应输出通道,则对以上位置,分别计算输入数据缓存容量、权重缓存容量、输出数据缓存容量,相加小于片上缓存容量即可。如果所有位置算出的缓存容量都过大,则要考虑减小分块参数,或者调整层次循环顺序。
78.在完成对架构参数的生成后,则需根据资源要求对缓存容量进行评估,以及根据性能要求对存储器读写周期数进行评估。先进行对缓存容量进行评估,预先设置各卷积层的缓存容量对应的资源阈值均为500kb,若存在至少一个缓存容量大于500kb,则对架构参数进行调整,若进行调整后无法通过对架构参数进行调整以使得全部缓存容量均小于或等于500kb,则在模型精度不低于模型精度阈值的前提下,对压缩率进行调整,生成第二压缩模型并循环进行上述步骤,直到全部缓存容量均小于或等于500kb;在对缓存容量的评估通过后进行对存储器读写周期数的评估,预先设置全部存储器读写周期数的和对应的性能阈值为100m,若全部存储器读写周期数的和大于100m,则对架构参数进行调整,若进行调整后无法通过对架构参数进行调整以使得全部存储器读写周期数的和小于或等于100m,则在模型精度不低于模型精度阈值的前提下,对压缩率进行调整,生成第三压缩模型并循环进行上述步骤,直到全部存储器读写周期数的和小于或等于100m。完成根据资源要求和性能要求的评估后,输出最终的网络参数和最终确定的架构参数。
79.本公开实施例还提供了一种加速器参数确定装置,包括:
80.一个或多个处理器;存储装置,用于存储一个或多个程序;当该一个或多个程序被该一个或多个处理器执行,使得该一个或多个处理器实现如上述实施例中的任一加速器参数确定方法。
81.本公开实施例还提供了一种计算机可读介质,其上存储有计算机程序,其中,该程序被处理器执行时实现如上述实施例中的任一加速器参数确定方法中的步骤。
82.本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用
于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
83.本文已经公开了示例实施例,并且虽然采用了具体术语,但它们仅用于并仅应当被解释为一般说明性含义,并且不用于限制的目的。在一些实例中,对本领域技术人员显而易见的是,除非另外明确指出,否则可单独使用与特定实施例相结合描述的特征、特性和/或元素,或可与其他实施例相结合描述的特征、特性和/或元件组合使用。因此,本领域技术人员将理解,在不脱离由所附的权利要求阐明的本公开的范围的情况下,可进行各种形式和细节上的改变。