本文作者:kaifamei

神经网络结构拆分方法及装置、映射方法、电子设备、介质与流程

更新时间:2025-12-21 06:10:43 0条评论

神经网络结构拆分方法及装置、映射方法、电子设备、介质与流程



1.本公开涉及人工智能技术领域,特别涉及一种神经网络结构拆分方法及装置、映射方法、电子设备、介质。


背景技术:



2.众核架构是提高程序运行并行度、加速神经网络执行的常见芯片架构。基于众核架构设计的众核芯片包括多个功能核组,每个功能核组包括多个功能核,每个功能核均可以执行计算任务。神经网络的计算任务被拆分成不同的子任务,再通过时空映射方式被分配到众核芯片中多个不同的功能核组中并行执行。这些功能核组之间按照流水的方式连续地处理输入数据,使得众核芯片具有很高的执行吞吐率。


技术实现要素:



3.本公开提供一种神经网络结构拆分方法及装置、映射方法、电子设备、介质。
4.第一方面,本公开提供了一种神经网络结构拆分方法,包括:
5.获取神经网络中各结点在众核芯片上执行的工作负载数据;所述众核芯片包括多个功能核组,每个所述功能核组包括一个或多个功能核;
6.基于各所述结点对应的工作负载数据对所述神经网络中的所述结点进行拆分,获得多个子结构;其中,每个所述子结构对应分配一个所述功能核组。
7.第二方面,本公开提供了一种神经网络映射方法,包括:
8.通过本公开提供的任意一项所述的神经网络结构拆分方法对所述神经网络进行拆分,获得多个子结构;
9.将所述多个子结构分别映射至众核芯片中对应的功能核组中。
10.第三方面,本公开提供了一种神经网络结构拆分装置,包括:
11.获取模块,用于获取神经网络中各结点在众核芯片上执行的工作负载数据;所述众核芯片分为多个功能核组,每个所述功能核组包括一个或多个功能核;
12.拆分模块,用于基于各所述结点对应的工作负载数据对所述神经网络中的所述结点进行拆分,获得多个子结构;其中,每个所述子结构对应分配一个所述功能核组。
13.第四方面,本公开提供了一种神经网络映射装置,包括:
14.拆分单元,用于对所述神经网络进行拆分,获得多个子结构;其中,所述拆分模块为本公开实施例提供的所述的神经网络结构拆分装置;
15.映射单元,用于将所述多个子结构分别映射至众核芯片中对应的功能核组中
16.第五方面,本公开提供了一种电子设备,该电子设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的一个或多个计算机程序,一个或多个所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的神经网络结构拆分方法或神经网络映射方法。
17.第六方面,本公开提供了一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序在被处理器/处理核执行时实现上述的神经网络结构拆分方法或神经网络映射方法。
18.本公开实施例提供的神经网络结构拆分方法,获取神经网络中各结点在众核芯片上执行的工作负载数据,并基于各结点对应的工作负载数据对神经网络中的结点进行拆分,获得多个子结构,将每个子结构对应分配一个功能核组,这样可以均衡每个功能核的工作负载,更好地实现众核芯片流水的数据处理,从而提高众核芯片的吞吐率;同时,提高拆分的通用性,既适用于对简单结构,又适用于复杂结构的神经网络的拆分。
19.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
20.附图用来提供对本公开的进一步理解,并且构成说明书的一部分,与本公开的实施例一起用于解释本公开,并不构成对本公开的限制。通过参考附图对详细示例实施例进行描述,以上和其他特征和优点对本领域技术人员将变得更加显而易见,在附图中:
21.图1为本公开实施例的一种功能核组应用场景图;
22.图2为本公开实施例的另一种功能核组的应用场景图;
23.图3为本公开实施例提供的一种神经网络结构拆分方法的流程图;
24.图4为本公开实施例计算任务图的示意图;
25.图5为本公开实施例遍历神经网络中各结点的流程图;
26.图6为本公开实施例中遍历神经网络中各结点过程中工作池的队列变化图;
27.图7为本公开实施例提供的一种神经网络结构拆分装置的框图;
28.图8为本公开实施例提供的神经网络映射装置的框图;
29.图9为本公开实施例提供的一种电子设备的框图。
具体实施方式
30.为使本领域的技术人员更好地理解本公开的技术方案,以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
31.在不冲突的情况下,本公开各实施例及实施例中的各特征可相互组合。
32.如本文所使用的,术语“和/或”包括一个或多个相关列举条目的任何和所有组合。
33.本文所使用的术语仅用于描述特定实施例,且不意欲限制本公开。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。还将理解的是,当本说明书中使用术语“包括”和/或“由
……
制成”时,指定存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其它特征、整体、步骤、操作、元件、组件和/或其组。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。
34.除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本公开的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。
35.神经网络的计算任务被拆分成不同的子任务,这些子任务被分配到众核芯片中多个不同的逻辑功能核组中并行执行。其中,功能核组可以为同一个芯片上的不同功能核组,也可以为不同芯片上的功能核组。这些功能核组之间按照流水的方式来连续的处理输入数据,使得众核芯片具有很高的执行吞吐率。
36.图1为本公开实施例的应用场景图。如图1所示,神经网络的计算任务被拆分为四个子任务,即第一子任务11、第二子任务12、第三子任务13和第四子任务14。众核芯片内的功能核被分为两个功能核组,即第一功能核组21和第二功能核组22,第一功能核组21和第二功能核组22内的功能核的数量可以相同,也可以不同。
37.子任务与功能核组的对应关系可以根据执行子任务的工作负载数据与功能核组能够提供的工作资源(如运算能力、存储能力等)确定。例如,第一子任务11和第二子任务12可以被分配至第一功能核组21,由第一功能核组21执行第一子任务11和第二子任务12的计算任务。第三子任务13和第四子任务14可以被分配至第二功能核组22,由第二功能核组22执行第三子任务13和第四子任务14的计算任务。
38.在一些实施例中,当第一子任务11和第二子任务12需求的工作负载能力不同时,第一功能核组21各功能核为第一子任务11和第二子任务12分配的资源不同。
39.在图1中示出的应用场景中,第一功能核组21和第二功能核组22内的功能核均来自于同一众核芯片中的功能核,但本公开实施例并不局限于此。第一功能核组21和第二功能核组22内的功能核也可以来自于不同的众核芯片。
40.图2为本公开实施例的另一种功能核组的应用场景图。如图2所示,第一功能核组21内的功能核来自于第一众核芯片31,第二功能核组22内的功能核来自于第二众核芯片32。
41.需要说明的是,上述应用场景是将神经网络的计算任务拆分为四个子任务,并利用两个功能核组执行四个子任务为例进行说明,但本公开实施例并不局限于此。神经网络的计算任务可以被拆分为其它数量的子任务,功能核组的数量也可以是三个或更多个。
42.当神经网络的网络结构比较复杂时,如存在大量多级并行结构时,神经网络在众核架构上的切分则更加具有挑战性,需要平衡不同功能核组间每一个功能核的资源消耗,才能提高众核芯片的执行吞吐率。然而,相关领域的神经网络结构拆分方法不能满足结构复杂的神经网络的实际需求。
43.根据本公开实施例的神经网络结构拆分方法,能够对复杂神经网络的网络结构进行精细拆分,提高众核芯片的执行吞吐率。
44.根据本公开实施例的神经网络结构拆分方法,可以由终端设备或服务器等电子设备执行,终端设备可以为车载设备、用户设备(user equipment,ue)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(personal digital assistant,pda)、手持设备、计算设备、车载设备、可穿戴设备等,方法可以通过处理器调用存储器中存储的计算机可读程序指令的方式来实现。或者,可通过服务器执行方法。
45.图3为本公开实施例提供的一种神经网络结构拆分方法的流程图。参照图3,该方法包括:
46.步骤s301,获取神经网络中各结点在众核芯片上执行的工作负载数据;众核芯片包括多个功能核组,每个功能核组包括一个或多个功能核。
47.神经网络包括多个结点,各结点的计算任务可以相同,也可以不同;在将神经网络中的结点映射至众核芯片上执行时,各结点对应的工作负载可以相同,也可以不同。
48.在一些实施例中,一个功能核组可以对应一个结点,也可以对应多个结点。功能核组对应的结点的数量与结点的工作负载相关,即功能核组内各功能核的平均工作负载能力大于或等于该功能核组对应的结点的平均工作负载需求,或者,功能核组内各功能核的总工作负载能力大于或等于该功能核组对应的结点的总工作负载需求。
49.在一些实施例中,结点在众核芯片上执行的工作负载数据是指结点的网络参数在众核芯片上执行时需要占用功能核的资源。结点的网络参数是指算法中函数的配置参数,以卷积运算为例,结点的网络参数可以包括卷积运算中特征图大小、卷积核尺寸、输入输出通道。
50.在一些实施例中,步骤s301,获取神经网络中各结点在众核芯片上执行的工作负载数据,包括:依次遍历神经网络中各结点的网络参数,并将各所述结点的网络参数转换为众核芯片上执行的工作负载数据。
51.在本公开实施例中,可以通过遍历方式获得神经网络中各结点的网络参数,再将网络参数转换为各结点在众核芯片上执行的工作负载数据。示例性的,在卷积运算中,可以根据输入特征图大小、卷积核尺寸、输入输出通道等网络参数,得到完成网络执行所需的算法执行参数(例如,计算量和所需存储),进一步结合当前众核芯片的硬件计算单元并行度、数据精度、运行机制等特性,将网络执行所需的算法执行参数(计算量和存储需求)转换为当前众核芯片上的工作负载数据。
52.在一些实施例中,工作负载数据包括结点的计算量、动态数据存储量、静态数据存储量和路由量中的一种或多种。
53.步骤s302,基于各结点对应的工作负载数据对神经网络中的结点进行拆分,获得多个子结构;其中,每个子结构对应分配一个功能核组。
54.在本公开实施例中,根据各结点的工作负载数据对神经网络中的结点进行拆分,将神经网络拆分为多个子结构,每个子结构包括一个或多个结点,每个子结构对应分配一个功能核组。
55.示例地,根据结点的计算量、动态数据存储量、动态数据存储量以及输入数据量中任意之一种将神经网络拆分为多个子结构,或者,根据结点的计算量、动态数据存储量、动态数据存储量以及输入数据量中任意两者、三者或全部将神经网络拆分为多个子结构。
56.本公开实施例提供的神经网络结构拆分方法,获取神经网络中各结点在众核芯片上执行的工作负载数据,并基于各结点的工作负载数据对神经网络中的结点进行拆分,获得多个子结构,使每个子结构对应分配一个功能核组,该方法可以均衡每个功能核的工作负载,更好地实现众核芯片流水的数据处理,从而提高众核芯片的吞吐率;同时,提高拆分的通用性,既适用于对简单结构,又适用于复杂结构的神经网络的拆分。
57.在一些实施例中,步骤s302,基于各结点的工作负载数据对神经网络中的结点进
行拆分,获得多个子结构之前,还包括:对众核芯片内的功能核进行分组,获得多个功能核组,每个分组对应一个功能核组;其中,功能核组的数量预先设定。其中,功能核组的数量可以预先设定。本公开实施例对功能核的分组方式不做限定,例如,可以根据众核芯片的物理特性对功能核进行划分得到功能核组;其中,众核芯片的物理特性可以包括各功能核的计算能力、存储能力等。
58.步骤s302,基于各结点对应的工作负载数据对神经网络中的结点进行拆分,获得多个子结构,包括:按照分组遍历各结点对应的工作负载数据,对神经网络中的结点进行拆分,获得多个子结构。
59.在一些实施例中,在对众核芯片内各功能核分组后,即可确定每个功能核组内功能核的数量,以及可以确定各功能核组的总工作负载能力,以及每个功能核的平均工作负载能力。
60.在一些实施例中,从第一个功能核组开始(功能核组的顺序预先设定),计算该功能核组内累积的结点对应的平均工作负载,并根据平均工作负载判断结点是否满足拆分条件,如满足拆分条件,则从该结点进行拆分,然后对下一个功能核组进行计算,以此类推,直至遍历神经网络中的所有结点,从而获得多个子结构。
61.在一些实施例中,步骤s302,基于各结点对应的工作负载数据对神经网络中的结点进行拆分,获得多个子结构,包括:
62.依次遍历神经网络中各个结点,判断上一拆分结点之后的第一个结点至当前结点的工作负载数据是否满足拆分条件;在满足拆分条件的情况下,将上一个拆分结点到当前结点之间的结点作为一个子结构。
63.在本公开实施例中,在遍历神经网络中各个结点时,在确定上一拆分结点之后的第一个结点至当前结点的工作负载数据满足拆分条件的情况下,将当前结点的前一个结点确定为拆分结点,将上一个拆分结点到当前结点之间的结点构成一个子结构。需要说明的是,上一个拆分结点和当前结点均不包括在该子结构中,上一个拆分结点为上一个子结构中的结点,当前结点为下一个子结构中的结点;当前结点的前一个结点(即拆分结点)包括在该子结构中。
64.示例地,假设第一个功能核组包括五个功能核,在执行任务时,多个任务依次均匀部署至该五个功能核内执行的过程中,判断该功能核组内的每个功能核上部署的平均工作负载是否满足拆分条件。具体的,计算第一结点在第一个功能核组内执行时,每个功能核的第一平均工作负载,若该第一平均工作负载小于或等于平均工作负载阈值,则累积第二结点对应的工作负载,再根据第一结点和第二结点的工作负载数据计算第一功能核组内每个功能核的第二平均工作负载;若第二平均工作负载大于平均工作负载阈值,则确定第二结点的前一个结点(即第一结点)为拆分结点,将第一结点作为一个子结构;若第二平均工作负载小于或等于平均工作负载阈值,则累积第三结点对应的工作负载,再根据第一结点、第二结点和第三结点的工作负载数据计算第一功能核组内每个功能核的第三平均工作负载。若第三平均工作负载小于平均工作负载阈值,则继续累积第四结点的工作负载;若第三平均工作负载大于或等于平均工作负载阈值,则确定第三结点的前一个结点(即第二结点)为拆分结点,将第一结点和第二结点作为一个子结构。该子结构对应第一功能核组。然后,根据第二功能核组内每个功能核的平均工作负载能力,从第三结点开始,继续确定下一个拆
分结点。
65.在一些实施例中,判断当前结点是否满足拆分条件,包括:统计上一个拆分结点之后的第一个结点到当前结点的工作负载数据;基于上一个拆分结点之后的第一个结点到当前结点的工作负载数据获得拆分得分;在拆分得分大于预设阈值的情况下,判断当前结点满足拆分条件。
66.在本公开实施例中,在遍历结点的过程中,按照预设顺序依次叠加结点对应的工作负载数据,并根据叠加的工作负载数据获得拆分得分,再依据拆分得分判断当前结点是否满足拆分条件。
67.在一些实施例中,工作负载数据包括计算量、动态数据存储量、静态数据存储量、路由量中的一种或多种。其中,动态数据存储量是指动态数据的存储量,动态数据是计算过程中发生变化的数据。如,结点的输入数据和输出数据。需要说明的是,一个结点的输出数据可以是另一个结点的输入数据。静态数据存储量是指静态数据的存储量,静态数据是网络执行过程中需要保持不变的数据,例如,神经网络中不可训练的参数;或者,静态数据是网络执行过程中需要占用固定存储空间的动态数据,例如,神经网络的可训练的参数(例如,权重)。第一计算量系数、动态存储量系数、静态存储量系数是预先设定的。
68.其中,拆分得分基于计算量和第一计算量系数、动态数据存储量和动态存储量系数、动态数据存储量和静态存储量系数、以及路由量和路由量系数中的一对或多对获得。其中,计算量是执行每个结点任务所需的计算操作数,不同类型的神经网络的结点,具有不同的计算量。在一些实施例中,使用macs(multiply

accumulate operations,乘加计算数)作为计算量的统计单位。macs的含义是乘加累积操作的数量,1macs包含一个乘法操作与一个加法操作。
69.在一些实施例中,计算量为上一个拆分结点之后的第一个结点到当前结点的累积计算量,动态数据存储量为从上一个拆分结点之后的第一个结点到当前结点在计算过程中输入的动态数据的总和,静态数据存储量为从上一个拆分结点之后的第一个结点到当前结点在计算过程中需要的静态数据的总和。路由量为上一个拆分结点之后的第一个结点到当前结点的累积数据传输量的总和。
70.在一些实施例中,拆分得分等于计算量和第一计算量系数的乘积、动态数据存储量和动态存储量系数的乘积、静态数据存储量和静态存储量系数乘积之和。其中,第一计算量系数、动态存储量系数、静态存储量系数、路由量系数可以为[0-1]之间的任意数值。
[0071]
在一些实施例中,当拆分得分大于预设的拆分阈值时,将当前结点的前一个结点作为拆分结点。或者,当上一个拆分结点到当前结点累积的结点数量超过预设的结点数量阈值时,将当前结点的前一个结点作为拆分结点。
[0072]
在一些实施例中,工作负载数据包括计算量占比、存储利用率以及路由量占比中的一种或多种。拆分得分基于计算量占比和第二计算量系数、存储利用率和存储量系数、路由量占比和路由量系数中的一对或多对获得;其中,第二计算量系数、存储量系数和路由量系数是预先设定的,第二计算量系数、存储量系数、路由量系数可以为[0-1]之间的任意数值。
[0073]
在进行拆分判断时,可以按照目前功能核的分组情况以及每个分组内功能核数量,将统计的结点的计算量和存储需求转换为每个功能核上的累积存储利用率,以及累积
计算量占比,并根据动态存储得到计算结点间的路由传输估计量,以下进行示例性说明。
[0074]
计算量占比为上一个拆分结点之后的第一个结点到当前结点的累积计算量与神经网络中所有结点的计算量的比值。
[0075][0076]
存储利用率为上一个拆分结点之后的第一个结点到当前结点的累积静态存储量和累积动态存储量之和,与对应功能核组的总存储量的比值;其中,累积动态存储量为上一个拆分结点之后的第一个结点到当前结点的动态存储量,与对应的动态存储系数的乘积之和;累积静态存储量为上一个拆分结点之后的第一个结点到当前结点的静态存储量与对应的静态存储系数的乘积之和;功能核组的总存储量为该功能核组内各功能核的存储量之和。
[0077][0078]
其中,动态存储系数为预定义参数,表示动态数据存储量实际占用的空间和数据量之间的平均估计值;静态存储系数为自定义系数,可根据存储利用率的实际值进行自定义或调整,本示例并不限制。
[0079]
路由占比为上一个拆分结点之后的第一个结点到当前结点的累积输入动态存储量,与神经网络中各结点累积输入动态存储量的比值。
[0080][0081]
拆分得分=计算量占比
×
第二计算量系数+存储利用率
×
存储量系数+路由量占比
×
路由量系数
[0082]
在一些实施例中,基于拆分得分判断当前结点的前一个结点是否是拆分结点。例如,当拆分得分大于预设的拆分阈值时,则当前结点的前一个结点为拆分结点。或者,当上一个拆分结点之后的第一个结点到当前结点累积的结点数量超过预设的结点数量阈值时,则确定当前结点的前一个结点为拆分结点。
[0083]
在一些实施例中,在功能核组无法满足神经网络中各结点的工作负载的情况下,可重新基于各结点的工作负载数据对神经网络中的结点进行拆分,获得多个子结构。
[0084]
示例地,在对神经网络各结点的拆分过程中,若功能核组无法满足神经网络中各结点的工作负载的情况,说明当前的拆分结果不理想,可以重新对神经网络中各结点进行拆分。
[0085]
在一些实施例中,在功能核组无法满足神经网络中各结点的工作负载的情况下,新增功能核组,即增加功能核组的数量,该新增的功能核组可以在与原功能核组相同的众核芯片中,也可以在与原功能核组不同的众核芯片中。
[0086]
在一些实施例中,将神经网络结构表示为计算任务图模式,从神经网络的输入结点开始,使用工作池轮询的方式来遍历整个网络。图4为本公开实施例计算任务图的示意
图,假设神经网络包括八个结点a、b、
……
、h。
[0087]
图5为本公开实施例遍历神经网络中各结点的流程图。结合参阅图4和图5所示,遍历神经网络中各结点包括循环以下步骤,直至工作池中的队列为空:
[0088]
步骤s501,对工作池中位于预设位置的待遍历结点进行访问;其中,工作池内的结点以队列形式顺序排列。
[0089]
在一些实施例中,预设位置可以是工作池中任意一个位置,例如,预设位置是工作池中的第一位置,即首位。在工作池中队列的长度可以根据需要任意设定,本公开对此不作限定。
[0090]
步骤s502,将访问后的待遍历结点从工作池移除,并将队列中未访问的待遍历结点顺序不变整体前移。
[0091]
例如,当工作池中第一位置为结点c,在遍历结点c后,将结点c移除,并将结点d前移一位,即,移除结点c后,结点d占据工作池中第一位置。
[0092]
步骤s503,将待遍历结点的后继结点移入工作池,并排列在队列的尾部。
[0093]
例如,在遍历结点c后,将结点c移除,并将结点d前移一位后,本步骤可以将待遍历的后继结点e移入工作池,并排列在队列的尾部,即结点e排列在结点d之后。
[0094]
在一些实施例中,步骤s501,对工作池中位于预设位置的待遍历结点进行访问之前,还包括:利用神经网络的输入结点对工作池进行初始化,将输入结点排列在工作池的预设位置。
[0095]
需要说明的是,若结点为汇聚点,则合并该结点的所有输入结点;若结点为分流点,则将结点的所有输出添加到工作池的末尾;若结点即不是分流点也不是汇聚点,则将结点的所有输出添加到工作池的末尾。
[0096]
对于图4所示的神经网络,利用神经网络的输入结点a对工作池进行初始化,将输入结点排列在工作池的预设位置。
[0097]
图6为本公开实施例中遍历神经网络中各结点过程中工作池的队列变化图,图中,
①‑⑧
是指遍历的步骤,

表示第一步,

表示第一步,其它以此类推。为更清楚地了解本公开实施例中结点遍历的过程,结合图4和图6。
[0098]
第一步

:初始化,使用神经网络的输入结点a对工作池进行初始化,初始化后工作池队列的状态为:[a]。
[0099]
第二步

:访问并移除工作池队列中第一个位置的结点a,并把结点a的后继结点b放入到工作池中队列的尾部,经过该过程后工作池队列的状态为:[b]。
[0100]
第三步

:访问并移除工作池队列中第一个位置的结点b,并把b的后继结点c、d同时放入到工作池队列的尾部,经过该过程后工作池队列的状态为:[c,d]。
[0101]
第四步

:访问并移除工作池队列中第一个位置的结点c,并把结点c的后继结点e放入到工作池队列的尾部,并使队列整体前移,经过该过程后工作池队列的状态为:[d,e]。
[0102]
第五步

:访问并移除工作池队列中第一个位置的结点d,并把结点d的后继结点f放入到工作池队列的尾部,经过该过程后工作池队列的状态为:[e,f]。
[0103]
第六步

:访问并移除工作池队列中第一个位置的结点e,此时结点e的后继结点为汇聚点g,将工作池队列中结点g的两个输入合并,经过该过程后工作池队列的状态为:[g]。
[0104]
第七步

:访问并移除工作池队列中第一个位置的结点g,并把结点g的后继结点h放入到工作池队列的尾部,经过该过程后工作池队列的状态为:[h]。
[0105]
第八步

:访问并移除工作池中第一个结点h,h无后继结点,经过该过程后工作池队列为空。
[0106]
需要说明的是,遍历的起始点可以为神经网络的输入结点,也可以是神经网络的中间结点。当遍历的起始点为神经网络的输入结点时,遍历过程从输入结点开始一直到神经网络的末结点。当遍历的起始点为神经网络的中间结点时,遍历过程从中间结点开始一直到神经网络的末结点,再从输入结点继续遍历,直至起始点。换言之,不论遍历的起始点是神经网络的哪个结点,均需要遍历神经网络的全部结点。
[0107]
在一些实施例中,神经网络用于执行图像处理任务、语音处理任务、文本处理任务、视频处理任务中的任意一种。
[0108]
可以理解,本公开提及的上述各个方法实施例,在不违背原理逻辑的情况下,均可以彼此相互结合形成结合后的实施例,限于篇幅,本公开不再赘述。本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
[0109]
本公开实施例还提供一种神经网络映射方法,包括:通过本公开实施例提供的任意一项所述的神经网络结构拆分方法对所述神经网络进行拆分,获得多个子结构;将所述多个子结构分别映射至众核芯片中对应的功能核组中。
[0110]
本公开实施例提供的神经网络映射方法,可以均衡每个功能核的工作负载,更好地实现众核芯片流水的数据处理。
[0111]
此外,本公开还提供了神经网络结构拆分装置、神经网络映射装置、电子设备、计算机可读存储介质,上述均可用来实现本公开提供的任一种神经网络结构拆分方法,相应技术方案和描述和参见方法部分的相应记载,不再赘述。
[0112]
图7为本公开实施例提供的一种神经网络结构拆分装置的框图。
[0113]
参照图7,本公开实施例提供了一种神经网络结构拆分装置,该神经网络结构拆分装置700包括:
[0114]
获取模块701,用于获取神经网络中各结点在众核芯片上执行的工作负载数据;所述众核芯片分为多个功能核组,每个所述功能核组包括一个或多个功能核。
[0115]
拆分模块702,用于基于各所述结点对应的工作负载数据对所述神经网络中的所述结点进行拆分,获得多个子结构;其中,每个所述子结构对应分配一个所述功能核组。
[0116]
本公开所提供的实施例提供的神经网络结构拆分装置,利用获取模块获取神经网络中各结点在众核芯片上执行的工作负载数据,拆分模块基于各结点的工作负载数据对神经网络中的结点进行拆分,获得多个子结构,使每个子结构对应分配一个功能核组,该装置可以均衡每个功能核的工作负载,更好地实现众核芯片流水的数据处理,从而提高众核芯片的吞吐率;同时,提高拆分的通用性,既适用于对简单结构,又适用于复杂结构的神经网络的拆分。
[0117]
在一些实施例中,神经网络结构拆分装置还包括:
[0118]
分组模块,用于在基于各所述结点对应的工作负载数据对所述神经网络中的所述结点进行拆分,获得多个子结构之前,对众核芯片内的功能核进行分组,每个分组对应一个
所述功能核组;其中,所述功能核组的数量预先设定。
[0119]
拆分模块702,按照所述分组遍历各所述结点对应的工作负载数据,对所述神经网络中的所述结点进行拆分,获得多个子结构。
[0120]
在一些实施例中,获取模块701依次遍历神经网络中各所述结点的网络参数,并将各所述结点的网络参数转换为众核芯片上执行的工作负载数据。
[0121]
在一些实施例中,工作负载数据包括所述结点的计算量、动态数据存储量、静态数据存储量和路由量中的一种或多种。
[0122]
在一些实施例中,拆分模块702包括:
[0123]
判断模块,用于依次遍历所述神经网络中各个所述结点,判断上一拆分结点之后的第一个结点至当前结点的工作负载数据是否满足拆分条件;即判断上一拆分结点之后的第一个结点至当前结点的总工作负载数据是否满足拆分条件;
[0124]
生成模块,用于在满足拆分条件的情况下,将上一个拆分结点到当前结点之间的结点作为一个所述子结构。
[0125]
在一些实施例中,判断模块包括:
[0126]
统计单元,用于统计上一个拆分结点之后的第一个结点到所述当前结点的工作负载数据。
[0127]
计算单元,用于基于上一个拆分结点之后的第一个结点到所述当前结点的工作负载数据获得拆分得分。
[0128]
判断单元,在所述拆分得分大于预设的拆分阈值的情况下,判断所述当前结点满足所述拆分条件。
[0129]
在一些实施例中,所述结点的网络参数为算法中函数的配置参数,以卷积运算为例,结点的网络参数可以包括卷积运算中特征图大小、卷积核尺寸、输入输出通道。工作负载数据包括计算量、动态数据存储量、静态数据存储量、路由量中的一种或多种;所述拆分得分基于所述计算量和第一计算量系数、动态数据存储量和动态存储量系数、静态数据存储量和静态存储量系数、路由量和路由量系数中的一对或多对获得;其中,所述第一计算量系数、动态存储量系数、静态存储量系数、路由量系数是预先设定的。
[0130]
在一些实施例中,工作负载数据包括计算量占比、存储利用率以及路由量占比中的一种或多种;所述拆分得分基于所述计算量占比和第二计算量系数、存储利用率和存储量系数、路由量占比和路由量系数中的一对或多对获得;其中,所述第二计算量系数、所述存储量系数和所述路由量系数是预先设定的。
[0131]
在一些实施例中,所述计算量占比为上一个拆分结点到所述当前结点的累积计算量与所述神经网络中的所有所述结点的计算量的比值;
[0132]
所述存储利用率为上一个拆分结点之后的第一个结点到当前结点的累积静态存储量和累积动态存储量之和,与对应功能核组的总存储量的比值;其中,累积动态存储量为上一个拆分结点之后的第一个结点到当前结点的动态存储量,与对应的动态存储系数的乘积之和;累积静态存储量为上一个拆分结点之后的第一个结点到当前结点的静态存储量与对应的静态存储系数的乘积之和;功能核组的总存储量为该功能核组内各功能核的存储量之和。
[0133]
所述路由占比为上一个拆分结点之后的第一个结点到当前结点的累积输入动态
存储量,与神经网络中各结点累积输入动态存储量的比值。
[0134]
在一些实施例中,神经网络结构拆分装置还包括:遍历模块,用于遍历所述神经网络中各所述结点,包括循环以下步骤,直至工作池中的队列为空:对工作池中位于预设位置的待遍历结点进行访问;其中,所述工作池内的结点以队列形式顺序排列;将访问后的所述待遍历结点从所述工作池移除,并将队列中未访问的所述待遍历结点顺序不变整体前移;将所述待遍历结点的后继结点移入所述工作池,并排列在所述队列的尾部。
[0135]
遍历模块,还用于在对工作池中位于预设位置的待遍历结点进行访问之前,利用所述神经网络的输入结点对所述工作池进行初始化,将所述输入结点排列在工作池的所述预设位置。
[0136]
图8为本公开实施例提供的一种神经网络映射装置的框图。
[0137]
参照图8,本公开实施例还提供一种神经网络映射装置。本公开实施例提供的神经网络映射装置800,包括:
[0138]
拆分单元801,用于对所述神经网络进行拆分,获得多个子结构;其中,所述拆分模块为本公开实施例提供的神经网络结构拆分装置。
[0139]
映射单元802,用于将多个子结构分别映射至众核芯片中对应的功能核组中。
[0140]
本公开所提供的实施例提供的神经网络映射装置,拆分单元基于各结点的工作负载数据对神经网络中的结点进行拆分,获得多个子结构,使每个子结构对应分配一个功能核组,在通过映射单元用于将多个子结构分别映射至众核芯片中对应的功能核组中,该装置可以均衡每个功能核的工作负载,更好地实现众核芯片流水的数据处理,从而提高众核芯片的吞吐率;同时,提高拆分的通用性,既适用于对简单结构,又适用于复杂结构的神经网络的拆分。
[0141]
图9为本公开实施例提供的一种电子设备的框图。
[0142]
参照图9,本公开实施例提供了一种电子设备,该电子设备包括:至少一个处理器901;至少一个存储器902,以及一个或多个i/o接口903,连接在处理器901与存储器502之间;其中,存储器902存储有可被至少一个处理器901执行的一个或多个计算机程序,一个或多个计算机程序被至少一个处理器901执行,以使至少一个处理器901能够执行上述的神经网络结构拆分方法。
[0143]
在一些实施例中,该电子设备可以是类脑芯片,由于类脑芯片可以采用向量化计算方式,且需要通过外部内存例如双倍速率(double data rate,ddr)同步动态随机存储器调入神经网络模型的权重信息等参数。因此,本公开实施例采用批处理的运算效率较高。
[0144]
本公开实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其中,计算机程序在被处理器/处理核执行时实现上述的神经网络结构拆分方法。计算机可读存储介质可以是易失性或非易失性计算机可读存储介质。
[0145]
本公开实施例还提供了一种计算机程序产品,包括计算机可读代码,或者承载有计算机可读代码的非易失性计算机可读存储介质,当计算机可读代码在电子设备的处理器中运行时,电子设备中的处理器执行上述神经网络结构拆分方法。
[0146]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个
物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读存储介质上,计算机可读存储介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。
[0147]
如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读程序指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom)、静态随机存取存储器(sram)、闪存或其他存储器技术、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读程序指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
[0148]
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
[0149]
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
[0150]
这里所描述的计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(software development kit,sdk)等等。
[0151]
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0152]
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
[0153]
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0154]
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0155]
本文已经公开了示例实施例,并且虽然采用了具体术语,但它们仅用于并仅应当被解释为一般说明性含义,并且不用于限制的目的。在一些实例中,对本领域技术人员显而易见的是,除非另外明确指出,否则可单独使用与特定实施例相结合描述的特征、特性和/或元素,或可与其他实施例相结合描述的特征、特性和/或元件组合使用。因此,本领域技术人员将理解,在不脱离由所附的权利要求阐明的本公开的范围的情况下,可进行各种形式和细节上的改变。

技术特征:


1.一种神经网络结构拆分方法,其特征在于,包括:获取神经网络中各结点在众核芯片上执行的工作负载数据;所述众核芯片包括多个功能核组,每个所述功能核组包括一个或多个功能核;基于各所述结点对应的工作负载数据对所述神经网络中的所述结点进行拆分,获得多个子结构;其中,每个所述子结构对应分配一个所述功能核组。2.根据权利要求1所述的神经网络结构拆分方法,其特征在于,所述基于各所述结点对应的工作负载数据对所述神经网络中的所述结点进行拆分,获得多个子结构之前,还包括:对所述众核芯片内的功能核进行分组,每个分组对应一个所述功能核组;其中,所述功能核组的数量预先设定;所述基于各所述结点对应的工作负载数据对所述神经网络中的所述结点进行拆分,获得多个子结构,包括:按照所述分组遍历各所述结点对应的工作负载数据,对所述神经网络中的所述结点进行拆分,获得多个子结构。3.根据权利要求2所述的神经网络结构拆分方法,其特征在于,所述获取神经网络中各结点在众核芯片上执行的工作负载数据,包括:依次遍历神经网络中各所述结点的网络参数,并将各所述结点的网络参数转换为众核芯片上执行的工作负载数据;其中,所述结点的网络参数为算法中函数的配置参数;所述工作负载数据包括计算量、动态数据存储量、静态数据存储量和路由量中的一种或多种。4.根据权利要求2所述的神经网络结构拆分方法,其特征在于,所述基于各所述结点对应的工作负载数据对所述神经网络中的所述结点进行拆分,获得多个子结构,包括:依次遍历所述神经网络中各个所述结点,判断上一拆分结点之后的第一个结点至当前结点的工作负载数据是否满足拆分条件;在满足拆分条件的情况下,将上一个拆分结点到当前结点之间的结点作为一个所述子结构。5.根据权利要求4所述的神经网络结构拆分方法,其特征在于,所述判断当前结点是否满足拆分条件,包括:统计上一个拆分结点之后的第一个结点到所述当前结点的工作负载数据;基于上一个拆分结点之后的第一个结点到所述当前结点的工作负载数据获得拆分得分;在所述拆分得分大于预设的拆分阈值的情况下,判断所述当前结点满足所述拆分条件。6.根据权利要求5所述的神经网络结构拆分方法,其特征在于,所述工作负载数据包括计算量、动态数据存储量、静态数据存储量、路由量中的一种或多种;所述拆分得分基于计算量、动态数据存储量、静态数据存储量、路由量中的一个或多个获得。7.根据权利要求5所述的神经网络结构拆分方法,其特征在于,所述工作负载数据包括计算量占比、存储利用率以及路由量占比中的一种或多种;所述拆分得分基于所述计算量占比、存储利用率、路由量占比中的一个或多个获得。8.根据权利要求7所述的神经网络结构拆分方法,其特征在于,
所述计算量占比为上一个拆分结点之后的第一个结点到所述当前结点的累积计算量与所述神经网络中的所有所述结点的计算量的比值;所述存储利用率为上一个拆分结点之后的第一个结点到所述当前结点的累积静态存储量和累积动态存储量之和,与对应功能核组的总存储量的比值;其中,所述累积动态存储量为上一个拆分结点之后的第一个结点到所述当前结点的动态存储量,与对应的动态存储系数的乘积之和;所述累积静态存储量为上一个拆分结点之后的第一个结点到所述当前结点的静态存储量与对应的静态存储系数的乘积之和;所述功能核组的总存储量为该功能核组内各功能核的存储量之和;所述路由占比为上一个拆分结点之后的第一个结点到所述当前结点的累积输入动态存储量,与所述神经网络中各所述结点累积输入动态存储量的比值。9.根据权利要求3或4所述的神经网络结构拆分方法,其特征在于,所述遍历所述神经网络中各所述结点包括循环以下步骤,直至工作池中的队列为空:对工作池中位于预设位置的待遍历结点进行访问;其中,所述工作池内的结点以队列形式顺序排列;将访问后的所述待遍历结点从所述工作池移除,并将队列中未访问的所述待遍历结点顺序不变整体前移;将所述待遍历结点的后继结点移入所述工作池,并排列在所述队列的尾部。10.一种神经网络映射方法,其特征在于,包括:通过权利要求1-9任意一项所述的神经网络结构拆分方法对所述神经网络进行拆分,获得多个子结构;将所述多个子结构分别映射至众核芯片中对应的功能核组中。11.一种神经网络结构拆分装置,其特征在于,包括:获取模块,用于获取神经网络中各结点在众核芯片上执行的工作负载数据;所述众核芯片分为多个功能核组,每个所述功能核组包括一个或多个功能核;拆分模块,用于基于各所述结点对应的工作负载数据对所述神经网络中的所述结点进行拆分,获得多个子结构;其中,每个所述子结构对应分配一个所述功能核组。12.一种神经网络映射装置,其特征在于,包括:拆分单元,用于对所述神经网络进行拆分,获得多个子结构;其中,所述拆分模块为权利要求11所述的神经网络结构拆分装置;映射单元,用于将所述多个子结构分别映射至众核芯片中对应的功能核组中。13.一种电子设备,其特征在于,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的一个或多个计算机程序,一个或多个所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1-9中任一项所述的神经网络结构拆分方法或权利要求10中所述的神经网络映射方法。14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序在被处理器执行时实现如权利要求1-9中任一项所述的神经网络结构拆分方法或权利要求
10中所述的神经网络映射方法。

技术总结


本公开提供了一种神经网络结构拆分方法及装置、映射方法、电子设备、介质,该方法包括:获取神经网络中各结点在众核芯片上执行的工作负载数据;众核芯片包括多个功能核组,每个功能核组包括一个或多个功能核;基于各结点对应的工作负载数据对神经网络中的结点进行拆分,获得多个子结构;其中,每个子结构对应分配一个功能核组。根据本公开的实施例能够均衡每个功能核的工作负载,提高拆分的通用性。提高拆分的通用性。提高拆分的通用性。


技术研发人员:

王冠睿 祝夭龙 张伟豪

受保护的技术使用者:

北京灵汐科技有限公司

技术研发日:

2022.10.13

技术公布日:

2023/1/19


文章投稿或转载声明

本文链接:http://www.wtabcd.cn/zhuanli/patent-1-78817-0.html

来源:专利查询检索下载-实用文体写作网版权所有,转载请保留出处。本站文章发布于 2023-01-26 04:32:54

发表评论

验证码:
用户名: 密码: 匿名发表
评论列表 (有 条评论
2人围观
参与讨论