首页 / 专利库 / 人工智能 / 机器人技术 / 生成指令序列的方法、执行神经网络运算的方法和装置

生成指令序列的方法、执行神经网络运算的方法和装置

阅读:1028发布:2020-09-05

专利汇可以提供生成指令序列的方法、执行神经网络运算的方法和装置专利检索,专利查询,专利分析的服务。并且公开了一种生成指令序列的方法、执行神经网络运算的方法和装置。其中,生成神经网络的指令序列的方法,包括:获取神经网络各层的属性数据;根据神经网络各层的属性数据,确定至少一个层级组及其拆分参数,所述层级组包括所述神经网络中的至少一个层,所述拆分参数包括至少一个预定维度和每个预定维度将被切分成的预定份数;以及,根据神经网络各层的属性数据、所述至少一个层级组的拆分参数,生成所述神经网络的指令序列。本 申请 实施例 通过将神经网络中各层分组来实现该神经网络中各层的同时拆分计算,在 存储器 容量有限的情况下,能够在不增加 硬件 成本的前提下同时提高硬件执行神经网络运算的效率和处理能 力 。,下面是生成指令序列的方法、执行神经网络运算的方法和装置专利的具体信息内容。

1.一种生成神经网络的指令序列的方法,包括:
获取神经网络各层的属性数据;
根据神经网络各层的属性数据,确定至少一个层级组及其拆分参数,所述层级组包括所述神经网络中的至少一个层,所述拆分参数包括至少一个预定维度和每个预定维度将被切分成的预定份数;以及
根据神经网络各层的属性数据、所述至少一个层级组的拆分参数,生成所述神经网络的指令序列;
其中,所述指令序列中包含所述至少一个层级组中各层的运算操作指令,所述运算操作指令中的输出参数指示所述至少一个层级组的输出特征数据,所述至少一个层级组的输出特征数据由所述至少一个层级组的输出特征图在所述至少一个预定维度上划分成所述预定份数而得到;
其中,所述确定至少一个层级组及其拆分参数,包括:
确定所述神经网络的前(i-1)层的具有最小运算操作开销的分组方式;以及基于所述神经网络的前(i-1)层的分组方式,确定所述神经网络的前i层的具有最小运算操作开销的分组方式,并且重复所述基于所述神经网络的前(i-1)层的分组方式,确定所述神经网络的前i层的具有最小运算操作开销的分组方式的步骤直到确定所述神经网络的具有最小运算操作开销的分组方式,从而获得与所述神经网络的具有最小运算操作开销的分组方式对应的至少一个层级组及其拆分参数,
其中,i为2至n的整数,n是所述神经网络包括的层数。
2.根据权利要求1所述的方法,其中,基于所述神经网络的前(i-1)层的分组方式,确定所述神经网络的前i层的具有最小运算操作开销的分组方式,包括:
对于从s=max(1,i-m+1)到s=i的多个s值,计算包括第s层至第i层的层级组的运算操作开销;
计算包括第s至i层的层级组的运算操作开销与前(s-1)层的运算操作开销的和,作为前i层的运算操作开销;
从与所述多个s值对应的多个前i层的运算操作开销中,选取最小的运算操作开销,从而确定所述神经网络的前i层的具有最小运算操作开销的分组方式,
其中,max是返回最大值的函数,m是层级组包括的最大层数。
3.根据权利要求2所述的方法,其中,计算包括第s层至第i层的层级组的运算操作开销,包括:
确定所述层级组的多个拆分参数及其对应的多个运算操作开销;以及
选择最小的运算操作开销及其对应的拆分参数。
4.根据权利要求3所述的方法,其中,确定所述层级组的多个拆分参数包括:
根据预设的拆分参数和所述层级组中各层的属性数据,确定所述层级组需要使用的缓存大小;
确定所述层级组需要使用的缓存大小是否超过高速缓冲存储器分配给所述神经网络的最大容量值;以及
在所述层级组需要使用的缓存大小超过所述最大容量值时,调整所述拆分参数,直到所述层级组需要使用的缓存大小不超过所述最大容量值。
5.根据权利要求1所述的方法,其中,
神经网络中一层的属性数据包括该层的输入特征图参数、运算参数、以及表征该层输入特征图来源的源参数;
生成所述神经网络的指令序列,包括:
根据所述至少一个层级组中各层的输入特征图参数、运算参数以及所述至少一个层级组的拆分参数,确定所述至少一个层级组中各层每次运算操作的输入参数、输出参数、以及运算参数;
根据所述至少一个层级组中各层的源参数、以及各层每次运算操作的输入参数和输出参数,确定所述至少一个层级组中各层每次运算操作的次序;以及
按照所述至少一个层级组中各层每次运算操作的次序,利用所述至少一个层级组中各层每次运算操作的输入参数、输出参数、以及运算参数生成所述至少一个层级组中各层每次运算操作的运算操作指令,以使得所述至少一个层级组中各层的运算操作指令在所述指令序列中按照所述次序排列。
6.根据权利要求5所述的方法,其中,确定所述至少一个层级组中各层每次运算操作的输入参数、输出参数、以及运算参数,包括:
根据所述至少一个层级组的拆分参数、以及所述至少一个层级组中最后层的输入特征图参数,确定所述至少一个层级组中最后层每次运算操作的输出参数;
根据所述至少一个层级组中最后层每次运算操作的输出参数,确定所述最后层每次运算操作的输入参数和运算参数;以及
根据所述至少一个层级组中最后层每次运算操作的输入参数、以及所述至少一个层级中其他层的源参数、运算参数、输入特征图参数,确定所述至少一个层级组中其他层每次运算操作的输出参数、输入参数以及运算参数。
7.根据权利要求6所述的方法,其中,确定所述至少一个层级组中最后层每次运算操作的输出参数,包括:
根据所述至少一个层级组中最后层的输入特征图参数、运算参数,确定所述最后层的输出特征图;
将所述最后层的输出特征图在所述至少一个预定维度上切分成所述预定份数以确定所述最后层每次运算操作的输出参数。
8.根据权利要求5所述的方法,其中,确定所述至少一个层级组中各层每次运算操作的次序,包括:
按照所述神经网络的层级次序和各层每次运算操作的输入参数和/或输出参数,交替排列所述至少一个层级组中各层的运算操作指令,以使得所述至少一个层级组中每个层的运算操作指令被其他层的运算操作指令分隔开,且一运算操作指令的输入特征数据是排序在其之前的至少一条运算操作指令的输出特征数据;
其中,所述神经网络的层级次序由所述神经网络各层的源参数确定。
9.一种电子设备,包括:
一个或多个处理器;以及
存储器,存储有计算机指令,所述计算机指令在被所述处理器运行时使所述处理器执行根据权利要求1至8中任一项所述的方法。
10.一种生成神经网络的指令序列的装置,包括:
获取单元,配置为获取神经网络各层的属性数据,所述属性数据用于表征神经网络中各层的属性;
层级组确定单元,配置为根据神经网络各层的属性数据,确定至少一个层级组及其拆分参数,所述层级组包括所述神经网络中的至少一个层,所述拆分参数包括至少一个预定维度和每个预定维度将被切分成的预定份数;以及
生成单元,配置为根据神经网络各层的属性数据、所述至少一个层级组的拆分参数,生成所述神经网络的指令序列;
其中,所述指令序列中包含所述至少一个层级组中至少一个层的运算操作指令,所述运算操作指令中的输出参数指示所述至少一个层级组的输出特征数据,所述至少一个层级组的输出特征数据由所述至少一个层级组的输出特征图在所述至少一个预定维度上划分成所述预定份数而得到;
其中,所述层级组确定单元包括:第一确定模,配置为确定所述神经网络的前(i-1)层的具有最小运算操作开销的分组方式;以及,第二确定模块,配置为基于所述神经网络的前(i-1)层的分组方式,确定所述神经网络的前i层的具有最小运算操作开销的分组方式,通过所述第一确定模块和所述第二确定模块的重复处理,确定所述神经网络的具有最小运算操作开销的分组方式,从而获得与所述神经网络的具有最小运算操作开销的分组方式对应的至少一个层级组及其拆分参数,其中,i为2至n的整数,n是所述神经网络包括的层数。

说明书全文

生成指令序列的方法、执行神经网络运算的方法和装置

技术领域

[0001] 本申请涉及人工智能技术领域,尤其涉及一种应用于神经网络的生成指令序列的方法、执行神经网络运算的方法和装置。

背景技术

[0002] 神经网络已成功应用于图像处理、自动驾驶等诸多领域。在高速缓冲存储器容量有限的情况下,对于通过神经网络处理高分辨率图像的应用场景,因数据量巨大,硬件执行神经网络运算的效率低下且处理能不足。
[0003] 因此,期望提供一种应用于神经网络的新的方法和装置,在存储器容量有限的情况下,能够以不增加硬件成本为前提来同时提高硬件执行神经网络运算的效率和处理能力。发明内容
[0004] 本申请的实施例提供了一种应用于神经网络的生成指令序列的方法和装置、执行神经网络运算的方法和装置。
[0005] 根据本申请的一个方面,提供了一种生成神经网络的指令序列的方法,包括:获取神经网络各层的属性数据;根据神经网络各层的属性数据,确定至少一个层级组及其拆分参数,所述层级组包括所述神经网络中的至少一个层,所述拆分参数包括至少一个预定维度和每个预定维度将被切分成的预定份数;以及根据神经网络各层的属性数据、所述至少一个层级组的拆分参数,生成所述神经网络的指令序列;其中,所述指令序列中包含所述至少一个层级组中各层的运算操作指令,所述运算操作指令中的输出参数指示所述至少一个层级组的输出特征数据,所述至少一个层级组的输出特征数据由所述至少一个层级组的输出特征图在所述至少一个预定维度上划分成所述预定份数而得到。
[0006] 根据本申请的一个方面,提供了一种电子设备,包括:一个或多个处理器;以及存储器,存储有计算机指令,所述计算机指令在被所述处理器运行时使所述处理器执行上述生成神经网络的指令序列的方法。
[0007] 根据本申请的一个方面,提供了一种生成神经网络的指令序列的装置,包括:获取单元,配置为获取神经网络各层的属性数据,所述属性数据用于表征神经网络中各层的属性;层级组确定单元,配置为根据神经网络各层的属性数据,确定至少一个层级组及其拆分参数,所述层级组包括所述神经网络中的至少一个层,所述拆分参数包括至少一个预定维度和每个预定维度将被切分成的预定份数;以及生成单元,配置为根据神经网络各层的属性数据、所述至少一个层级组的拆分参数,生成所述神经网络的指令序列;其中,所述指令序列中包含所述至少一个层级组中至少一个层的运算操作指令,所述运算操作指令中的输出参数指示所述至少一个层级组的输出特征数据,所述至少一个层级组的输出特征数据由所述至少一个层级组的输出特征图在所述至少一个预定维度上划分成所述预定份数而得到。
[0008] 根据本申请的一个方面,提供了一种执行神经网络运算的方法,包括:从片外存储器读取一个层级组的一输入特征数据,所述层级组包括神经网络中的至少一个层;使用所述输入特征数据,按照层级次序依次执行所述层级组中各层的一次运算操作,以获得所述层级组的一输出特征数据;将所述输出特征数据存储到所述片外存储器中;
其中,所述输出特征数据是所述层级组的输出特征图在至少一个预定维度上划分成预定份数而得到的多份输出特征数据中的一份。
[0009] 根据本申请的一个方面,提供了一种电子设备,包括:控制单元、计算单元和片外存储器,其中,所述控制单元配置为运行指令以根据所述指令来控制所述计算单元和所述片外存储器实现上述执行神经网络运算的方法。
[0010] 根据本申请的一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行上述生成神经网络的指令序列的方法和/或执行神经网络运算的方法。
[0011] 通过本申请实施例的方法和/或装置,通过将神经网络中各层分组来实现该神经网络中各层的同时拆分计算,在存储器容量有限的情况下,这不仅实现了神经网络对高分辨率图像的处理,而且显著减少了访存次数、降低了功耗和/或减少运行时间,在不增加硬件成本的前提下提高了硬件执行神经网络运算的效率和处理能力。附图说明
[0012] 通过结合附图对本申请实施例进行更详细的描述,本申请的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与本申请实施例一起用于解释本申请,并不构成对本申请的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
[0013] 图1是本申请所适用的系统的示例性结构图。
[0014] 图2是本申请一示例性实施例提供的一电子设备的示例性结构图。
[0015] 图3是本申请一示例性实施例提供的另一电子设备的示例性结构图。
[0016] 图4是本申请一示例性实施例提供的生成神经网络的指令序列的方法的流程示意图。
[0017] 图5是本申请一示例性实施例提供的方法中确定至少一个层级组及其拆分参数的步骤的流程示意图。
[0018] 图6是本申请一示例性实施例提供的方法中生成指令序列的步骤的示例性流程示意图。
[0019] 图7是本申请一示例性实施例提供的执行神经网络运算的方法的流程示意图。
[0020] 图8是本申请一示例性实施例提供的执行神经网络运算的方法的流程示意图。
[0021] 图9是本申请一示例性实施例提供的生成神经网络的指令序列的装置的示例性结构图。
[0022] 图10是本申请一示例性实施例提供的生成神经网络的指令序列的装置的示例性结构图。

具体实施方式

[0023] 下面,将参考附图详细地描述根据本申请的示例实施例。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是本申请的全部实施例,应理解,本申请不受这里描述的示例实施例的限制。
[0024] 申请概述随着卷积神经网络(Convoltional Neural Networks, CNN)的持续发展,扩充了更多的应用场景,其中一些应用场景不仅对准确率有要求,还对功耗成本非常敏感。尤其是在一些嵌入式设备上,为了降低成本,会尽量减小高速缓冲存储器(例如,静态随机存储器(Static Random-Access Memory,SRAM))的容量,但是为了保证神经网络的精度,需使用较高分辨率的输入图像,这就使得神经网络中每层获得的特征图(featuremap)数据量较大,无法全部储存在高速缓冲存储器中,从而导致硬件无法完成神经网络的运算。
[0025] 一种常用的方法是单层拆分计算。即,在神经网络中某一层数据量太大而无法将该层的全部数据存储在高速缓冲存储器中时,将该层的计算和数据都拆分成多个部分,每次只处理其中一部分。每次处理时,从片外存储器中读取所需的部分数据到高速缓冲存储器中,对该部分数据进行计算,在高速缓冲存储器中得到该部分数据的计算结果,再将该计算结果写到片外存储器中。以上处理过程重复若干次,直到该层计算全部完成。相比于一次完整的计算来说,这种拆分后的计算对高速缓冲存储器的需求可以大大降低,但每层的输入特征图和输出特征图都需在片外存储器和高速缓冲存储器间读写一遍,对访存带宽、功耗和运行速度都可能带来不利影响,这降低了硬件执行神经网络运算的效率。
[0026] 为解决单层拆分计算的上述问题,发明人发现一种多层同时拆分计算的方法,即把多层看作一层,拆分成多个部分,每次从片外存储器中读取一部分输入特征数据,经过多层计算后,得到一部分输出特征数据再写回片外存储器。这种多层同时拆分的方法和单层拆分计算的方法相比,中间结果不必写回片外存储器,可节省带宽、降低功耗,从而提高硬件执行神经网络运算的效率。
[0027] 发明人也发现,对神经网络中哪些层进行同时拆分能更有效节省访存带宽、降低功耗、提高速度,是实现同时拆分计算和提高硬件执行神经网络运算效率的关键。以卷积运算为例,如果单拆特征数据(feature)或单拆权重数据(weight),那么没拆的那个数据将不随拆分次数的增加而减小,使得多层同时拆分的层数有上限。如果既拆分特征数据又拆分权重数据,那么需要重复从片外存储器中读取特征数据或权重数据,又带来了额外的访存。因此,多层同时拆分的层数并不是越多越好。也就是说,对于一个包含n层的神经网络,要想获得较佳的访存带宽、功耗或速度,需要合理分组进行拆分计算。
[0028] 针对上述技术问题,本申请实施例的基本构思包括提出一种生成神经网络的指令序列的方法、装置、电子设备以及计算机存储介质,基于神经网络各层的属性数据确定至少一个层级组及拆分参数,并基于该至少一个层级组及其拆分参数来生成神经网络的指令序列,指令序列中包含至少一个层级组中各层的运算操作指令,运算操作指令中的输出参数指示至少一个层级组的输出特征数据,该至少一个层级组的输出特征数据由至少一个层级组的输出特征图在至少一个预定维度上划分成预定份数而得到。由此,本申请实施例通过对神经网络各层进行合理分组来生成实现多层同时拆分计算的指令序列,这些指令序列不仅能使硬件完成神经网络的多层同时拆分计算,同时还能够通过合理划分神经网络中各层的分组来显著减少硬件的访存次数、降低功耗、提高运行速度,从而在不增加硬件成本的前提下能够同时提高硬件执行神经网络运算的效率和处理能力。
[0029] 针对上述技术问题,本申请实施例的基本构思还包括提出一种执行神经网络运算的方法、装置、电子设备以及计算机存储介质,从片外存储器读取一个层级组的一输入特征数据,使用输入特征数据并按照层级次序依次执行层级组中各层的一次运算操作,以获得层级组的一输出特征数据,最后将层级组的输出特征数据存储到片外存储器中;其中,输出特征数据是层级组的输出特征图在至少一个预定维度上划分成预定份数而得到的多份输出特征数据中的一份。其中,层级组包括神经网络中的至少一个层。由此,本申请实施例能够对神经网络中各层分组进行同时拆分计算,每个层级组中最先层的输出特征数据、以及中间层的输入特征数据和输出特征数据无需向片外存储器读写,在存储器容量有限的情况下,这不仅实现了神经网络对高分辨率图像的处理,而且显著减少了访存次数、降低了功耗,从而在不增加硬件成本的前提下提高了硬件执行神经网络运算的效率和处理能力。
[0030] 本申请实施例适用于各类场景。一些实施例中,本申请实施例适用于执行神经网络运算的硬件存储器容量有限且对神经网络的精度要求较高的应用场景。例如,使用低成本的嵌入式设备处理高分辨率图像的场景。
[0031] 示例性系统和示例性电子设备图1为本申请实施例适用的系统的示例性结构10,包括:相互连接或通信的编译侧设备
101和运行侧设备102,编译侧设备101负责基于神经网络的参数来生成神经网络的指令序列,运行侧设备102负责通过运行编译侧设备101提供的指令序列来执行神经网络的运算,这些运算包括但不限于:卷积、激活函数的计算、池化、矩阵乘、张量加减、维度变换等。可以理解,图1仅为本申请实施例使用的系统的一示例性结构,具体应用中本申请实施例可应用于支持神经网络运算的任意系统。
[0032] 至少一些实施例中,编译侧设备101可通过如图2所示的电子设备20来实现。该电子设备20可以为(但不限于)个人计算机、服务器计算机、多处理器系统、基于微处理器的系统等。
[0033] 至少一些实施例中,运行侧设备102可通过如如图3所示的电子设备30来实现。该电子设备30可以为(但不限于)神经网络加速器等。
[0034] 图2是本申请实施例中电子设备20的示例性结构示意图。如图2所示,电子设备20可以包括:一个或多个处理器21和用于存储所述处理器可执行指令的存储器22,处理器21用于执行下文“示例性方法”中所述生成神经网络的指令序列的方法的步骤。
[0035] 处理器21可以是强性能的CPU、GPU等支持神经网络指令序列编译的处理器,或者具有编译处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备20中的其他组件以执行期望的功能。
[0036] 存储器22可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器21可以运行所述程序指令,以实现下文“示例性方法”中所述生成神经网络的指令序列的方法以及/或者其他期望的功能。
[0037] 在一个示例中,电子设备20还可以包括:输入装置23和输出装置24,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。该输入装置23还可以包括例如键盘鼠标等等,可供编译人员输入卷积神经网络的属性数据,例如,神经网络每层的输入参数、输出参数、运算参数等。该输出装置24可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等,可供编译人员查看编译的最终结果或编译过程中的任何中间数据等。
[0038] 当然,为了简化,图2中仅示出了该电子设备20中的部分组件,省略了诸如总线、输入/输出接口等的组件。除此之外,根据具体应用情况,电子设备20还可以包括任何其他适当的组件。
[0039] 图3是本申请实施例中电子设备30的示例性结构示意图。如图3所示,本申请的电子设备30可以包括:控制单元31、计算单元32和片外存储器34,其中,控制单元31配置为运行指令以控制计算单元32和片外存储器34执行下文“示例性方法”中所述执行神经网络运算的方法。
[0040] 控制单元31可以包括一个或多个处理器或者具有神经网络运算能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备30中的其他组件以执行期望的功能。上述处理器可以包括但不限于GPU、大脑处理器(BPU,Brain Processing Unit)、张量处理单元(TPU,Tensor Processing Unit)等支持神经网络相关计算的处理器。至少一些实施例中,控制单元31负责根据指令(例如,下文“生成神经网络的指令序列的方法”中获得的运算操作指令)控制计算单元32执行神经网络的运算操作。
[0041] 计算单元32包括运算电路,该运算电路可配置为执行神经网络的运算操作,该运算操作包括但不限于卷积、激活函数的计算、池化、矩阵乘、张量加减、维度变换等运算操作中的任一项或多项。至少一些实施例中,该运算电路包括乘法累加器阵列。一种示例中,该乘法累加器阵列可由多个乘法器和多个加法器连接而成,配置为对输入特征数据执行至少一次运算操作(例如,下文的卷积运算操作等)。具体应用中,计算单元32的结构可采用各种形式,只需要支持神经网络的运算操作即可。
[0042] 至少一些实施例中,计算单元32可以包括控制器和运算电路,该控制器基于控制单元31下发的指令控制多个乘法器和多个加法器执行下文的多条运算操作指令。一个示例中,控制单元31可以通过译码将下文的运算操作指令转换为计算单元32能够执行的指令格式并下发给计算单元32的控制器,控制器根据控制单元31下发的指令控制各个乘法器和加法器执行乘加运算操作,从而完成相应的运算操作。
[0043] 至少一些实施例中,电子设备30还可以包括但不限于高速缓冲存储器33。
[0044] 高速缓冲存储器33可以包括一个或多个独立的缓存存储器或者具有数据高速缓存能力的处理单元,并且可以在控制单元31的控制下对片外存储器34进行访存。至少一些实施例中,高速缓冲存储器31可以为速度快、容量小的静态存取存储器,比如,静态随机存取存储器(SRAM,Static Random Access Memory)。一个示例中,高速缓冲存储器33可配置为接收来自片外存储器34的输入特征数据的至少一部分和/或运算数据并缓存以供计算单元32使用,以及还可配置为接收并缓存计算单元32计算得到的输出特征数据,并将该输出特征数据输出到片外存储器34中。
[0045] 片外存储器34可以包括一个或多个独立的存储器或者具有数据存储能力的处理单元,并且可以在控制单元31的控制下供高速缓冲存储器33访问。至少一些实施例中,片外存储器34为速度慢、容量大的动态存取存储器,比如动态随机存取存储器(DRAM,Dynamic Random Access Memory)。在至少一个实施例中,片外存储器34为双倍数据速率(Double Data Rate,DDR)DRAM。一个示例中,片外存储器34可配置为向高速缓冲存储器33提供输入特征数据的至少一部分和/或运算数据(以卷积运算为例,该运算数据可以包括权重、偏移量等)以便计算单元32使用,以及还可配置为接收并存储来自高速缓冲存储器33的输出特征数据(该输出特征数据是由计算单元32使用输入特征数据执行运算操作而得到的)。
[0046] 在一个示例中,电子设备30中控制单元31、计算单元32、高速缓冲存储器33和片外存储器34之间可以通过总线(图中未示出)或其他方式连接。
[0047] 当然,为了简化,图3中仅示出了该电子设备30中的部分部件,省略了诸如总线等的部件。除此之外,根据具体应用情况,电子设备30还可以包括任何其他适当的部件。
[0048] 示例性方法图4示出了本申请实施例的生成神经网络的指令序列的示例性方法400,该方法通过图
2所示的电子设备20执行。示例性方法400,可以包括:
步骤410,获取神经网络各层的属性数据;
步骤420,根据神经网络各层的属性数据,确定至少一个层级组及其拆分参数,层级组包括神经网络中的至少一个层,拆分参数包括至少一个预定维度和每个预定维度将被切分成的预定份数;
步骤430,根据神经网络各层的属性数据、至少一个层级组的拆分参数,生成神经网络的指令序列;
其中,指令序列中包含至少一个层级组中各层的运算操作指令,运算操作指令中的输出参数指示至少一个层级组的输出特征数据,至少一个层级组的输出特征数据由至少一个层级组的输出特征图在至少一个预定维度上划分成预定份数而得到。
[0049] 本申请实施例的示例性方法400,通过对神经网络各层进行合理分组来生成可实现神经网络的多层同时拆分计算的指令序列,该指令序列不仅能使硬件完成神经网络的多层同时拆分计算,同时还能够通过合理划分神经网络中各层的分组来显著减少硬件执行神经网络运算时的访存次数、降低功耗、提高运行速度,从而在不增加硬件成本的前提下同时提高硬件执行神经网络运算的效率和处理能力。
[0050] 本申请实施例中,一个层级组中可以包括神经网络中的一个或多个层,层级组的拆分参数用于指示该层级组在哪些维度上进行拆分计算、以及在这些维度上将层级组的输出特征图所分的份数。例如,一层级组的拆分参数定义了宽度维度2份、高度维度2份,那么该层级组具有4份输出特征数据,是通过将层级组的输出特征图(即层级组中各个最后层的输出特征图)在宽度维度上分为2份、高度维度上分为2份而得到。
[0051] 至少一些实施例中,层级组中包括神经网络中的多个层时,这多个层在神经网络中这些层的层级可以相邻,但这些层的运算操作可以相同、也可以不同,且层级组中各层的层级次序与这些层在神经网络中的层级次序一致,层级组的输出特征数据包括层级组中所有最后层的输出特征数据,层级组的输入特征数据包括层级组中所有最先层的输入特征数据。
[0052] 举例来说,假设一层级组包括神经网络S1中的四个卷积层,即层L1、层L2、层L3和层L4。如果这四个层在神经网络S1中的层级次序是L1→L2→L3→L4,那么该层级组中各层的层级次序也是L1→L2→L3→L4,即层L1是该层级组的最先层,层L2和层L3是该层级组的中间层,层L4则是该层级组的最后层,层级组的输出特征数据是层L4的输出特征数据,层级组的拆分参数指示层L4在哪些维度上进行拆分计算、以及在这些维度上将层L4的输出特征图切分为多少份。如果这四个层在神经网络S1中的层级次序是L1→L2→L3&L4,那么该层级组中各层的层级次序也是L1→L2→L3&L4,即层L1是该层级组的最先层,层L2是该层级组的中间层,层L3和层L4则是该层级组的最后层,层级组的输出特征数据包括层L3的输出特征数据和层L4的输出特征数据,层级组的拆分参数指示层L3和层L4在哪些维度上进行拆分计算、以及在这些维度上将层L3和层L4的输出特征图切分为多少份。例如,层级组的拆分参数定义了宽度维度2份、高度维度2份,那么该层级组具有4份输出特征数据,每份输出特征数据包括层L3的一输出特征数据和层L4的一输出特征数据,层L3的输出特征数据是通过将层L3的输出特征图在宽度维度上分为2份、高度维度上分为2份而得到,层L4的输出特征数据是通过将层L4的输出特征图在宽度维度上分为2份、高度维度上分为2份而得到。
[0053] 本申请实施例中,指令序列配置为运行于电子设备(例如,上文电子设备30)时由电子设备执行神经网络的运算。在至少一些实施例中,一指令序列中可以包括神经网络每个层的运算操作指令。一条运算操作指令对应一个层的一次运算操作,一条运算操作指令包括用于一次运算操作的运算参数、输入参数、输出参数等。于其他实现方式中,神经网络中的每个层具有一条运算操作指令,电子设备通过运行该一条运算操作指令(即一次运算操作)来完成该层的运算。而本申请实施例中,每个层级组中的每个层可以具有多条运算操作指令,一条运算操作指令表示一次运算操作,电子设备通过运行这多条运算操作指令(即多次运算操作)来完成该层的运算。
[0054] 图5示出了步骤420中确定至少一个层级组及其拆分参数的一示例性流程。如图5所示,在至少一些实施例中,步骤420中确定至少一个层级组及其拆分参数,可以包括:步骤421,确定神经网络通过多种预设分组方式进行运算所消耗的运算操作开销量;
步骤422,确定具有最小运算操作开销的预设分组方式,从而确定与该分组方式对应的至少一个层级组及其拆分参数。
[0055] 本申请实施例中,由上述预设分组方式确定的每个层级组至少在一拆分参数下需要使用的缓存大小不超过高速缓冲存储器能够分配给神经网络的最大容量,该技术细节将在下文详述。
[0056] 在至少一些实施例中,步骤420中确定至少一个层级组及其拆分参数,可以包括:确定神经网络的前(i-1)层的具有最小运算操作开销的分组方式;以及,基于神经网络的前(i-1)层的分组方式,确定神经网络的前i层的具有最小运算操作开销的分组方式,并且重复该步骤直到确定所述神经网络的具有最小运算操作开销的分组方式,从而获得与神经网络的具有最小运算操作开销的分组方式对应的至少一个层级组及其拆分参数,其中,i为2至n的整数,n是神经网络包括的层数。
[0057] 在至少一个实施例中,基于神经网络的前(i-1)层的分组方式,确定神经网络的前i层的具有最小运算操作开销的分组方式,可以包括:步骤a,对于从s=max(1,i-m+1)到s=i的多个s值,计算包括第s层至第i层的层级组的运算操作开销;步骤b,计算包括第s至i层的层级组的运算操作开销与前(s-1)层的运算操作开销的和,作为前i层的运算操作开销;步骤c,从与所述多个s值对应的多个前i层的运算操作开销中,选取最小的运算操作开销,从而确定所述神经网络的前i层的具有最小运算操作开销的分组方式。其中,max是返回最大值的函数,m是层级组包括的最大层数。
[0058] 经实验发现,一个层级组包括的层数越多,其运算数据和特征数据也越多,越难找到符合高速缓冲存储器容量限制的拆分参数。鉴于此,本申请实施例的上述实施例中通过预先设置的一阈值m来高效地确定神经网络的分组方式,这样,只需要约n*m次尝试即可得到限定条件下的较佳分组。至少一些实施例中,m为不小于2、不大于n的整数,n是神经网络包括的卷积层的层数,m可以取经验值,不同的神经网络或不同的应用场景下m的取值可以不同。
[0059] 至少一个实施例中,步骤420中确定至少一个层级组及其拆分参数的具体执行流程可以包括如下步骤:步骤1,i=1时,前0层的开销为0;
步骤2,对于从i=2至i=n的每个i值,执行如下子步骤21-22:
步骤21,将前i层的运算操作开销设置为预定值,该预定值大于或等于对各个层单独进行拆分时的运算操作开销;
步骤22,对于从s=max(1,i-m+1)到s=i的每个s值,执行如下子步骤221-222:步骤221,计算包括第s至i层的层级组的运算操作开销及其对应的拆分参数;步骤222,当第s至i层的运算操作开销与前(s-1)层的运算操作开销的和小于所记录的前i层的运算操作开销时,用第s至i层的运算操作开销与前(s-1)层的运算操作开销的和来更新前i层(即第1至i层)的运算操作开销。
[0060] 由上述步骤1-步骤2可确定神经网络具有最小运算操作开销时的层级组及其拆分参数。其中,运算操作开销的预定值可以取经验值,该经验值是足够大的值,以确保通过上述实施例的方式能够找到神经网络具有最小运算操作开销时的层级组及其拆分参数。
[0061] 至少一些实施例中,计算包括第s至i层的层级组的运算操作开销及其对应的拆分参数,可以包括:确定层级组的多个拆分参数及其对应的多个运算操作开销;以及,选择最小的运算操作开销及其对应的拆分参数。
[0062] 至少一个实施例中,确定层级组的多个拆分参数,可以包括:根据预设的拆分参数和层级组中各层的属性数据,确定层级组需要使用的缓存大小;确定层级组需要使用的缓存大小是否超过高速缓冲存储器分配给神经网络的最大容量值;以及,在层级组需要使用的缓存大小超过所述最大容量值时,调整拆分参数,直到层级组需要使用的缓存大小不超过最大容量值。
[0063] 至少一个实施例中,首次可以使用预设的拆分参数来确定层级组需要使用的缓存大小。一个示例中,该预设的拆分参数中,预定维度可以选取高度、宽度和通道这三个维度中至少之一,每个预定维度对应的预定份数可取较小值(例如,2、3等)。
[0064] 本申请实施例中,只要层级组需要使用的缓存大小不超过高速缓冲存储器分配给神经网络的最大容量值,该拆分参数即可用。上述实施例中,可通过多次调整拆分参数获得一层级组的多个拆分参数,以便从中选择运算操作开销最小的一个。
[0065] 至少一些实施例中,确定层级组需要使用的缓存大小的方式可以有多种。
[0066] 一个示例,硬件(例如,电子设备30)没有对齐、片(slice)冲突等要求的情况下,可以直接根据层级组中各层的属性数据、拆分参数来估算该层级组需要使用的缓存大小。一个示例中,硬件(例如,电子设备30)有对齐、slice冲突等要求的情况下,可以根据层级组中各层的属性数据、拆分参数、以及高速缓冲存储器的参数(例如,slice冲突、对齐等参数)来估算该层级组需要使用的缓存大小。
[0067] 下面举例来详细说明硬件(例如,电子设备30)没有对齐、slice冲突等要求的情况下如何确定层级组的拆分参数。
[0068] 例如,假设神经网络S中的卷积层L1,输入特征数据feature0的大小是300x300x16(即高度为300、宽度为300、通道数为16)(下文该表示含义与此相同,不再赘述),权重weight0的大小是32x5x5x16(即数量为32、高度为300、宽度为300、通道数为16)(下文该表示含义与此相同,不再赘述),输出特征数据feature1的大小是300x300x32,数据量分别是1.44MB、12.8KB、2.88MB,再假设高速缓冲存储器分配给神经网络S的最大容量是1MB,那么卷积层L1的数据是无法完整存在高速缓冲存储器中的,也就是说硬件不能通过一次运算操作来完成卷积层L1的运算。
[0069] 假设神经网络S中的卷积层L2,输入特征数据feature1(即卷积层L1的输出特征数据)的大小是300x300x32,权重weight1的大小是8x3x3x32,输出特征数据feature3是150x150x8,数据量分别是2.88MB、2.3KB、180KB,那么卷积层L2的数据也是无法完整存在高速缓冲存储器中的,也就是说硬件也不能通过一次运算操作来完成卷积层L2的运算。
[0070] 如果将卷积层L1和卷积层L2作为一个层级组来同时拆分,经过尝试,在高度维度上拆分2份、3份、4份都失败,即都无法完整存在高速缓冲存储器中,在高度维度上拆分5份时,卷积层L2每次计算30x150x8的feature2,占用36KB,需要用到完整的weight1,需占用2.3KB,需要用到最多61x300x32的 feature1,占用595.2KB,这部分feature 1用卷积层L1计算时,需要用到完整的 weight0,占用12.8KB,还需要使用65x300x16的feature0,占用
316.8KB,如果硬件没有对齐、slice冲突等要求,卷积层L2和卷积层L1每次计算时需要使用的feature2、weight1、feature1、weight0和feature0的数据量相加即为由卷积层L1和卷积层L2构成的层级组需要使用的缓存大小,这些数据的数据量相加小于1MB,说明该层级组一次计算的相关数据可以完整存入高速缓冲存储器中,这样,“高度维度上分为5份”可以确定为由卷积层L1和卷积层L2构成的层级组的一拆分参数。
[0071] 硬件(例如,电子设备30)有对齐、slice冲突等要求的情况下确定层级组的拆分参数的过程与上述示例基本相同,只是在确定层级组需要使用的缓存大小时不能简单相加而需要考虑硬件(例如,电子设备30)的对齐、slice冲突等要求。
[0072] 下面举例来详细说明硬件(例如,电子设备30)有对齐、slice冲突等要求的情况下如何确定层级组需要使用的缓存大小。
[0073] 例如,一硬件(例如,电子设备30)要求指令(例如,运算操作指令)中指定的高速缓冲存储器的地址必须是1024字节对齐的,假设根据该层级组中各层的属性数据可以确定其一条运算操作指令需要1024字节的输入特征数据、512+64字节的运算数据(例如,512字节的权重和64字节的偏移量)以及1024字节的输出特征数据,那么该层级组需要使用的缓存大小不是1024+512+64+1024字节,而是1024*4字节。
[0074] 再例如,一硬件(例如,电子设备30)要求指令(例如,运算操作指令)中指定的高速缓冲存储器的地址必须是某个片(slice)开头,假设根据该层级组中各层的属性数据可以确定其一条运算操作指令需要1个slice的输入特征数据、0.5+0.1个slice的运算数据(例如,0.5个slice的权重和0.1个slice的偏移量)以及1个slice的输出特征数据,那么该层级组需要使用的缓存大小不是1+0.5+0.1+1个slice,而是4个slice。
[0075] 又例如,一硬件(例如,电子设备30)要求指令(例如,运算操作指令)中指定的各数据的slice范围不能重叠,假设根据该层级组中各层的属性数据可以确定其一条运算操作指令(例如,池化操作指令)的输入特征数据A占0.4个slice、输出特征数据B占0.1个slice,那么为了避免冲突,输入特征数据A和输出特征数据B必须分配在高速缓冲存储器中的不同slice中,而不能分配在同一个slice中。输入特征数据A所在的slice中剩余的0.6个slice如果要分配给其它运算操作指令的数据C(例如,输入特征数据),也必须保证没有指令同时使用A和C。输出特征数据B所在的slice中剩余的0.9个slice也同理。因此,需要在满足“没有指令同时使用同一slice中的数据”的条件下确定该层级组需要使用的缓存大小。
[0076] 本申请实施例中,运算操作开销可以包括但不限于如下之一:向片外存储器访存的数据量、运行所需的时间、产生的功耗等。
[0077] 至少一些实施例中,向片外存储器访存的数据量可以通过遍历片外存储器和高速缓冲存储器间的读取指令(load)和存储指令(store)并累加得到。或者,向片外存储器访存的数据量可以通过一层级组的输入参数、输出参数、以及运算参数来估算。
[0078] 至少一些实施例中,运行所需的时间可以通过估算硬件执行一层级组的所有运算操作指令的时长来确定,该运算操作指令中可以包括计算指令、以及片外存储器和高速缓冲存储器间的读取指令和存储指令。一个示例中,对于计算指令,可以根据计算指令中的运算次数和硬件中的运算器数量来估算该计算指令需要的时钟周期。以卷积指令为例,一条卷积指令有x个乘加运算,硬件(例如,电子设备30)具有y个乘法器,如果硬件乘法器利用率是100%,那么这条卷积指令需要x/y个时钟周期。一个示例中,对于片外存储器和高速缓冲存储器间的读取指令和存储指令,由于涉及总线、DDR缺页等因素,一般不能得到某一条指令的精确时钟周期(cycle)数,但可以从统计学的度构建性能评估模型,利用该性能评估模型来估计这些指令的时钟周期。例如,从片外存储器读数据到高速缓冲存储器,前16个字节需要x个cycle,之后每16个字节需要y个cycle(x通常大于y,因为有寻址等开销),那么根据x和y即可容易地估算出从片外存储器读数据到高速缓冲存储器的读取指令的时间开销。
[0079] 至少一些实施例中,功耗可以根据预定的功耗评估模型来估算。一个示例中,假设硬件(例如,电子设备30)空闲时功耗为x毫瓦,硬件(例如,电子设备30中计算单元的乘法器)满负荷运行时功耗为y毫瓦,高速缓冲存储器的功耗是z毫瓦,每读写p字节需要q焦尔。那么,基于该x、y、z、p和q以及片外存储器和高速缓冲存储器间的读取指令和存储指令中定义的数据量,即可估算出硬件完成一层级组的所有运算操作指令产生的功耗。
[0080] 在至少一些实施例中,神经网络中一层的属性数据可以包括该层的输入特征图参数、运算参数、以及表征该层输入特征图来源的源参数。至少一些实施例中,输入特征图参数可以指示神经网络中某层的输入特征图在各个数据维度(包括但不限于数量、高度、宽度、通道)上的大小、起点坐标等,运算参数可以指示神经网络中某层运算操作的参数在各个数据维度(包括但不限于数量、高度、宽度、通道)上的大小、坐标等。在至少一个实施例中,对于神经网络中的中间层或最后层,其源参数可以表征其输入特征图是神经网络中哪个层或哪些层的输出特征图。而对于神经网络中的第一层来说,其源参数可以通过原始图像的标识或存储地址等来表示。换言之,神经网络中各层的源参数可以指示神经网络中各层的关系,其中,各层的关系包括但不限于神经网络中各层的层级次序。以神经网络中的一卷积层为例,输入特征图参数指示该卷积层的输入特征图在各个数据维度上(包括但不限于数量、高度、宽度、通道)上的大小、起点坐标等,以便在执行运算时从存储器中读取到相应的输入特征图中的所有数据,运算参数包括但不限于权重和偏移量,该权重包括卷积核的数量以及卷积核在各个数据维度(包括但不限于高度、宽度、通道)上的大小、起点坐标等,以便在执行运算时能够从存储器中读取到相应的卷积核的所有数据,源参数可以包括以该卷积层的输入特征图作为输出的层级的标识,该标识可以是层级的序号或其他类似的信息。
[0081] 图6示出了步骤430中生成神经网络的指令序列的示例性流程。如图6所示,在至少一些实施例中,步骤430中生成所述神经网络的指令序列,可以包括如下步骤:步骤431,根据至少一个层级组中各层的输入特征图参数、运算参数以及至少一个层级组的拆分参数,确定至少一个层级组中各层每次运算操作的输入参数、输出参数、以及运算参数;
步骤432,根据至少一个层级组中各层的源参数、以及各层每次运算操作的输入参数和输出参数,确定至少一个层级组中各层每次运算操作的次序;
步骤433,按照至少一个层级组中各层每次运算操作的次序,利用至少一个层级组中各层每次运算操作的输入参数、输出参数、以及运算参数生成至少一个层级组中各层每次运算操作的运算操作指令,以使得至少一个层级组中各层的运算操作指令在所述指令序列中按照所述次序排列。
[0082] 本申请实施例生成的指令序列中,层级组中各层的运算操作指令按照层级组中各层每次运算操作的次序排列,使得硬件(例如,电子设备30)能够同时对该层级组中所有层进行拆分计算,这样,在硬件执行该层级组的各层的运算时,层级组中最先层的输出特征数据、中间层的输入特征数据和输出特征数据无需在片外存储器和高速缓冲存储器间读写,从而减少了访存,降低了功耗,同时提高了硬件执行神经网络运算的效率和处理能力。
[0083] 在至少一个实施例中,步骤431中确定至少一个层级组中各层每次运算操作的输入参数、输出参数、以及运算参数,可以包括如下步骤:步骤1,根据至少一个层级组的拆分参数、以及至少一个层级组中最后层的输入特征图参数,确定至少一个层级组中最后层每次运算操作的输出参数;
步骤2,根据至少一个层级组中最后层每次运算操作的输出参数,确定最后层每次运算操作的输入参数和运算参数;
步骤3,根据至少一个层级组中最后层每次运算操作的输入参数、以及至少一个层级中其他层的源参数、运算参数、输入特征图参数,确定至少一个层级组中其他层每次运算操作的输出参数、输入参数以及运算参数。
[0084] 本申请实施例中,通过层级组中最后层的参数来反推层级组中其他层的参数,不仅能够确保一个层级组一次运算操作相关的所有数据能够完整存储到高速缓冲存储器中,而且可以确保对该层级组中各层同时拆分计算得到的结果组合起来的结果与整体计算(即不做拆分计算)得到的结果一致。
[0085] 在至少一个实施例中,步骤3中确定至少一个层级组中最后层每次运算操作的输出参数,可以包括:步骤3a,根据至少一个层级组中最后层的输入特征图参数、运算参数,确定所述最后层的输出特征图;步骤3b,将最后层的输出特征图在至少一个预定维度上切分成所述预定份数以确定所述最后层每次运算操作的输出参数。
[0086] 一个示例中,在步骤3b中可以按照预定规则将最后层的输出特征图在至少一个预定维度上切分成预定份数。该预定规则可以包括但不限于:1)平均切分;2)按照维度坐标靠前的较小、维度坐标在中间的较大、维度坐标靠后的较小的方式切分,更利于执行运算操作或者更利于提高执行运算操作的速度;3)其他任意规则,只需要符合神经网络的运算要求(比如,卷积运算的要求),确保神经网络的运算操作能够获得正确的结果即可。
[0087] 在至少一个实施例中,步骤433中确定至少一个层级组中各层每次运算操作的次序,可以包括:按照神经网络的层级次序和各层每次运算操作的输入参数和/或输出参数,交替排列所述至少一个层级组中各层的运算操作指令,以使得至少一个层级组中每个层的运算操作指令被其他层的运算操作指令分隔开,且一运算操作指令的输入特征数据是排序在其之前的至少一条运算操作指令的输出特征数据;其中,神经网络的层级次序由神经网络各层的源参数确定。
[0088] 本申请实施例生成的指令序列中,按照神经网络的层级次序和各层每次运算操作的输入参数和/或输出参数,交替排列一个层级组中各层的运算操作指令,使得硬件(例如,电子设备30)能够同时对该层级组中所有层进行拆分计算,且拆分运算过程中层级组的每个中间层无需在片外存储器和高速缓冲存储器间读写,以便减少硬件执行神经网络运算时的访存、降低硬件执行神经网络运算时的功耗、提高硬件执行神经网络运算的速度。
[0089] 举例来说,假设一神经网络包括L1 L4这四个层级,且层级次序是L1→L2→L3→~L4,经过分组,层L1和层L2为一层级组G1,层L3和层L4为一层级组G2。
[0090] 如果层级组G1的拆分参数是高度维度上拆分5份,那么层L1的运算操作指令被分成了A1、A2、A3、A4和A5,层L2的运算操作指令被分成了B1、B2、B3、B4和B5,层级组G1中各层运算操作指令的执行顺序可以是A1→B1→A2→B2→A3→B3→A4→B4→A5→B5。其中,硬件(例如,电子设备30)执行B1的运算时使用的输入特征数据是硬件执行A1的运算操作获得的输出特征数据;硬件(例如,电子设备30)执行B2的运算时使用的输入特征数据是硬件执行A2的运算操作获得的输出特征数据,或者硬件(例如,电子设备30)执行B2的运算时使用的输入特征数据是硬件执行A1的运算操作获得的输出特征数据中的至少一部分以及硬件执行A1的运算操作获得的输出特征数据,其他运算操作指令的特征数据之间的关系类似,不再赘述。
[0091] 如果层级组G2的拆分参数是高度维度上拆分4份,拆分后,层L3的运算操作指令被分成了C1、C2、C3、C4,层L4的运算操作指令被分成了D1、D2、D3、D4,层级组G2各层运算操作指令的执行顺序可以是 C1→D1→C2→D2→C3→D3→C4→D4。中,硬件(例如,电子设备30)执行D1的运算时使用的输入特征数据是硬件执行C1的运算操作获得的输出特征数据;硬件(例如,电子设备30)执行D2的运算时使用的输入特征数据是硬件执行C2的运算操作获得的输出特征数据,或者硬件(例如,电子设备30)执行D2的运算时使用的输入特征数据是硬件执行C1的运算操作获得的输出特征数据中的至少一部分以及硬件执行C1的运算操作获得的输出特征数据,其他运算操作指令之间的特征数据之间的关系类似,不再赘述。
[0092] 上述神经网络四个层级运算操作指令的执行顺序可以是A1→B1→A2→B2→A3→B3→A4→B4→A5→B5→C1→D1→C2→D2→C3→D3→C4→D4。
[0093] 图7示出了本申请实施例的执行神经网络的运算操作的示例性方法700,该示例性方法700可以由图3所示的电子设备30通过运行示例性方法400获得的指令序列来实现。
[0094] 如图7所示,本申请实施例的示例性方法700,可以包括:步骤710,从片外存储器读取一个层级组的一输入特征数据,层级组包括神经网络中的至少一个层;
步骤720,使用输入特征数据,按照层级次序依次执行层级组中各层的一次运算操作,以获得层级组的一输出特征数据;
步骤730,将输出特征数据存储到片外存储器中;
其中,输出特征数据是层级组的输出特征图在至少一个预定维度上划分成预定份数而得到的多份输出特征数据中的一份。
[0095] 本申请实施例的示例性方法700,将一层级组中的所有层同时拆分计算,层级组中最先层的输出特征数据、以及中间层的输入特征数据和输出特征数据无需向片外存储器读写,在存储器容量有限的情况下,这不仅实现了神经网络对高分辨率图像的处理,同时显著减少了访存次数、降低了功耗,从而在不增加硬件成本的前提下提高了硬件执行神经网络运算的效率。
[0096] 本申请实施例的示例性方法700中,层级组的输入特征数据是层级组中最先层的输入特征数据,该输入特征数据通过上文示例性方法400中指令序列中运算操作指令的输入参数来定义。
[0097] 本申请实施例的示例性方法700中,层级组的输出特征数据包括层级组中所有最后层的输出特征数据,该输出特征数据通过上文示例性方法400中指令序列中运算操作指令的输出参数来定义,层级组中每个最后层的一输出特征数据是该最后层的输出特征图在至少一个预定维度上划分成预定份数而得到的多份输出特征数据中的一份。
[0098] 关于层级组的最先层、中间层、最后层及其输入特征数据、输出特征数据等的具体细节可参照上文示例性方法400中的相关记载,不再赘述。
[0099] 图8示出了示例性方法700的一示例性执行流程,该示例中,示例性方法700中还可以包括:步骤740,从片外存储器读取层级组中每个层执行运算操作需使用的运算数据,以便执行所述每个层的运算操作。需要说明的是,步骤740和步骤710可以并行,也可以分别执行,其执行先后顺序不限。
[0100] 至少一些实施例中,步骤720中按照层级次序依次执行层级组中各层的一次运算操作,可以包括如下步骤:步骤1,使用输入特征数据执行层级组中最先层的运算操作,以获得最先层的一输出特征数据,并将该最先层的输出特征数据缓存至高速缓冲存储器中;步骤2,从高速缓冲存储器中读取最先层的输出特征数据,使用最先层的输出特征数据执行其下一层的运算操作以获得其下一层的一输出特征数据,并将该输出特征数据缓存至所述高速缓冲存储器中;如此顺序执行,直到获得层级组中最后层的一输出特征数据并缓存至所述高速缓冲存储器中。
[0101] 仍以上文包括L1 L4这四个层级的神经网络为例,层L1和层L2为一层级组G1,层L1~为层级组G1的最先层,层L2是层级组G2的第二层(也是最后层),如果层级组G1的运算操作指令的执行顺序是A1→B1→A2→B2→A3→B3→A4→B4→A5→B5,其中,层L1的运算操作指令包括A1、A2、A3、A4和A5,层L2的运算操作指令包括B1、B2、B3、B4和B5,以层级组G1的一次运算操作“A1→B1”为例,层级组一次运算操作的执行过程包括:从片外存储器读取A1的输入特征数据到高速缓冲存储器中,计算单元从高速缓冲存储器中读取A1的输入特征数据并执行A1的计算,A1的计算完成则在高速缓冲存储器中存有A1的输出特征数据,计算单元直接从高速缓冲存储器中读取A1的输出特征数据并执行B1的计算,B1的计算完成则在高速缓冲存储器中存有B1的输出特征数据,最后将B1的输出特征数据写入片外存储器。其中,A1的输出特征数据无需向片外存储器读写。类似的,A2的输出特征数据、A3的输出特征数据、A4的输出特征数据、A5的输出特征数据均无需向片外存储器读写。而采用单独拆分时,即层L1和层L2分别拆分计算,A1的输出特征数据、A2的输出特征数据、A3的输出特征数据、A4的输出特征数据、A5的输出特征数据均需向片外存储器读写。由此可见,相较于单独拆分,本申请实施例的示例性方法700至少能够节省5次向片外存储器读写的次数。
[0102] 需要说明的是,硬件执行层级组中某一层的一条运算操作时,输入特征数据取决于运算操作指令中的输入参数。例如,如果B2的输入特征数据是A1的部分输出特征数据和A2的输出特征数据,那么在执行B2的计算时需从高速缓冲存储器中读取A1的部分输出特征数据和A2的输出特征数据。
[0103] 示例性装置图9示出了本申请实施例的生成神经网络的指令序列的示例性装置90,该装置可通过软件、硬件或两者的结合来实现,可设置于图2所示的电子设备20中或直接通过图2所示的电子设备20来实现。
[0104] 如图9所示,本申请实施例的生成神经网络的指令序列的示例性装置90可以包括:获取单元91,配置为获取神经网络各层的属性数据,所述属性数据用于表征神经网络中各层的属性;
层级组确定单元92,配置为根据神经网络各层的属性数据,确定至少一个层级组及其拆分参数,所述层级组包括所述神经网络中的至少一个层,所述拆分参数包括至少一个预定维度和每个预定维度将被切分成的预定份数;以及
生成单元93,配置为根据神经网络各层的属性数据、所述至少一个层级组的拆分参数,生成所述神经网络的指令序列;
其中,指令序列中包含至少一个层级组中至少一个层的运算操作指令,运算操作指令中的输出参数指示至少一个层级组的输出特征数据,至少一个层级组的输出特征数据由至少一个层级组的输出特征图在至少一个预定维度上划分成所述预定份数而得到。
[0105] 至少一些实施例中,层级组确定单元92可以是配置为:确定所述神经网络通过多种预设分组方式进行运算所消耗的运算操作开销量;以及,确定具有最小运算操作开销的预设分组方式,从而确定与该分组方式对应的至少一个层级组及其拆分参数。
[0106] 图10示出了本申请实施例的生成神经网络的指令序列的另一示例性装置100。示例性装置100中,层级组确定单元92包括:第一确定模921,配置为确定所述神经网络的前(i-1)层的具有最小运算操作开销的分组方式;以及,第二确定模块922,配置为基于所述神经网络的前(i-1)层的分组方式,确定所述神经网络的前i层的具有最小运算操作开销的分组方式,通过第一确定模块921和第二确定模块922的重复处理,确定所述神经网络的具有最小运算操作开销的分组方式,从而获得与所述神经网络的具有最小运算操作开销的分组方式对应的至少一个层级组及其拆分参数,其中,i为2至n的整数,n是所述神经网络包括的层数。
[0107] 至少一些实施例中,第二确定模块922,配置为基于所述神经网络的前(i-1)层的分组方式,确定所述神经网络的前i层的具有最小运算操作开销的分组方式,包括:对于从s=max(1,i-m+1)到s=i的多个s值,计算包括第s层至第i层的层级组的运算操作开销;计算包括第s至i层的层级组的运算操作开销与前(s-1)层的运算操作开销的和,作为前i层的运算操作开销;从与所述多个s值对应的多个前i层的运算操作开销中,选取最小的运算操作开销,从而确定所述神经网络的前i层的具有最小运算操作开销的分组方式,其中,max是返回最大值的函数,m是层级组包括的最大层数。至少一个实施例中,计算包括第s层至第i层的层级组的运算操作开销,可以包括:确定所述层级组的多个拆分参数及其对应的多个运算操作开销;以及,选择最小的运算操作开销及其对应的拆分参数。
[0108] 至少一些实施例中,第二确定模块922,配置为通过如下处理来确定所述层级组的多个拆分参数:根据预设的拆分参数和所述层级组中各层的属性数据,确定所述层级组需要使用的缓存大小;确定所述层级组需要使用的缓存大小是否超过高速缓冲存储器分配给所述神经网络的最大容量值;以及,在所述层级组需要使用的缓存大小超过所述最大容量值时,调整拆分参数,直到所述层级组需要使用的缓存大小不超过所述最大容量值。
[0109] 至少一些实施例中,神经网络中一层的属性数据可以包括该层的输入特征图参数、运算参数、以及表征该层输入特征图来源的源参数。如图10所示,生成单元93,可以包括:参数确定模块931,配置为根据所述至少一个层级组中各层的输入特征图参数、运算参数以及所述至少一个层级组的拆分参数,确定所述至少一个层级组中各层每次运算操作的输入参数、输出参数、以及运算参数;次序确定模块932,配置为根据所述至少一个层级组中各层的源参数、以及各层每次运算操作的输入参数和输出参数,确定所述至少一个层级组中各层每次运算操作的次序;以及,指令生成模块933,配置为按照至少一个层级组中各层每次运算操作的次序,利用所述至少一个层级组中各层每次运算操作的输入参数、输出参数、以及运算参数生成至少一个层级组中各层每次运算操作的运算操作指令,以使得至少一个层级组中各层的运算操作指令在所述指令序列中按照所述次序排列。
[0110] 至少一些实施例中,参数确定模块931,配置为通过如下处理来确定所述至少一个层级组中各层每次运算操作的输入参数、输出参数、以及运算参数:根据所述至少一个层级组的拆分参数、以及所述至少一个层级组中最后层的输入特征图参数,确定所述至少一个层级组中最后层每次运算操作的输出参数;根据所述至少一个层级组中最后层每次运算操作的输出参数,确定所述最后层每次运算操作的输入参数和运算参数;以及,根据至少一个层级组中最后层每次运算操作的输入参数、以及至少一个层级中其他层的源参数、运算参数、输入特征图参数,确定至少一个层级组中其他层每次运算操作的输出参数、输入参数以及运算参数。
[0111] 至少一些实施例中,参数确定模块931,配置为通过如下处理来确定所述至少一个层级组中最后层每次运算操作的输出参数:根据所述至少一个层级组中最后层的输入特征图参数、运算参数,确定所述最后层的输出特征图;将所述最后层的输出特征图在所述至少一个预定维度上切分成所述预定份数以确定所述最后层每次运算操作的输出参数。
[0112] 至少一些实施例中,次序确定模块932,配置为通过如下处理来确定至少一个层级组中各层每次运算操作的次序,包括:按照所述神经网络的层级次序和各层每次运算操作的输入参数和/或输出参数,交替排列所述至少一个层级组中各层的运算操作指令,以使得所述至少一个层级组中每个层的运算操作指令被其他层的运算操作指令分隔开,且一运算操作指令的输入特征数据是排序在其之前的至少一条运算操作指令的输出特征数据;其中,所述神经网络的层级次序由所述神经网络各层的源参数确定。
[0113] 本申请实施例的示例性装置90,通过对神经网络各层进行合理分组来生成可实现神经网络的多层同时拆分计算的指令序列,该指令序列不仅能使硬件完成神经网络的多层同时拆分计算,同时还能够通过合理划分神经网络中各层的分组来显著减少硬件执行神经网络运算时的访存次数、降低功耗、提高运行速度,从而在不增加硬件成本的前提下同时提高硬件执行神经网络运算的效率和处理能力。
[0114] 示例性计算机程序产品和计算机可读存储介质除了上述方法和设备以外,本申请的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的生成神经网络的指令序列的方法的步骤和/或执行神经网络运算的方法中的步骤。
[0115] 所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本申请实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
[0116] 此外,本申请的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的生成神经网络的指令序列的方法的步骤和/或执行神经网络运算的方法中的步骤。
[0117] 所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0118] 以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。
[0119] 本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
[0120] 还需要指出的是,在本申请的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。
[0121] 提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
[0122] 为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本申请的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈