一种任务编译方法、装置和编译器与流程

文档序号:31152209发布日期:2022-08-17 04:18阅读:76来源:国知局
一种任务编译方法、装置和编译器与流程
一种任务编译方法、装置和编译器
【技术领域】
1.本发明实施例涉及人工智能(artificial intelligence,ai)技术领域,尤其涉及一种任务编译方法、装置和编译器。


背景技术:

2.随着科技的发展,ai产业发展迅速,对于图像或视频的处理需求在不断增加。嵌入式神经网络处理器(nueral-network processing unit,npu)作为一种专门用于加速神经网络推理的处理器,npu主要采用专用集成电路(application specific integrated circuit,asic)技术通过硬件模拟神经网络的方式,弥补了中央处理单元(central processing unit,cpu)、图像处理单元(graphics processing unit,gpu)对于神经网络计算架构设计上的不足,大大提高了ai芯片的运算速度。
3.相关技术中,为了进一步提高ai芯片的运算速度,对于npu的设计不可避免地朝着多核架构的方向发展。目前,多核npu的发展尚未形成完整的体系,缺乏成熟且具有针对性的编译器分析前端模型,无法根据任务对后端硬件配置进行合理分配,导致运算速度有所降低。


技术实现要素:

4.有鉴于此,本发明实施例提供了一种任务编译方法、装置和编译器,通过编译器实现合理分配npu的硬件资源,用以提高npu的运算速度。
5.第一方面,本发明实施例提供了一种任务编译方法,所述方法包括:
6.接收用户输入的至少一个编译任务;
7.判断所述编译任务是否包括多个分支任务;
8.若判断出所述编译任务包括多个分支任务时,则根据多个分支任务对获取的嵌入式神经网络处理器npu的硬件资源进行划分,生成硬件分配结果;
9.根据所述硬件分配结果、用户输入的编译参数和获取的每个npu核心计算需要的核心参数,生成第一编译指令;
10.将所述第一编译指令发送给调度器,以供所述调度器根据所述第一编译指令对所述硬件资源进行调度。
11.可选地,所述根据多个分支任务对获取的嵌入式神经网络处理器npu的硬件资源进行划分,生成硬件分配结果,包括:
12.对多个分支任务进行聚类,生成多个任务类别数据;
13.根据多个任务类别数据对所述硬件资源进行划分,生成硬件分配结果。
14.可选地,还包括:
15.若判断出所述编译任务不包括分支任务时,则根据所述编译参数和核心参数,生成第二编译指令;
16.将所述第二编译指令发送给调度器,以供所述调度器根据所述第二编译指令对所
述硬件资源进行调度。
17.可选地,所述编译任务的数量为多个,所述判断所述编译任务是否包括多个分支任务之前,还包括:
18.若判断出所述编译任务的数目小于或等于所述npu集群的数目时,则将每个编译任务分配至对应的npu集群,并行执行判断所述编译任务是否包括多个分支任务的步骤。
19.可选地,所述编译任务的数量为多个,所述方法还包括:
20.若判断出所述编译任务的数目大于所述npu集群的数目时,则计算每个编译任务的计算需求量;
21.从用户输入的多个编译任务中选取出特定数目个编译任务,所述特定数目个编译任务的计算需求量均小于用户输入的多个编译任务中其它编译任务的计算需求量,所述特定数目等于所述npu集群的数目;
22.将特定数目个编译任务中的每个编译任务分配至对应的npu集群,并行执行判断所述编译任务是否包括多个分支任务的步骤。
23.第二方面,本发明实施例提供了一种任务编译装置,所述装置包括:
24.接收模块,用于接收用户输入的至少一个编译任务;
25.获取模块,用于获取npu的硬件资源;
26.判断模块,用于判断所述编译任务是否包括多个分支任务;
27.生成模块,用于若所述判断模块判断出所述编译任务包括多个分支任务时,则根据多个分支任务对所述硬件资源进行划分,生成硬件分配结果;根据所述硬件分配结果、编译参数和核心参数,生成第一编译指令;
28.发送模块,用于将所述第一编译指令发送给调度器,以供所述调度器根据所述第一编译指令对所述硬件资源进行调度。
29.可选地,所述生成模块包括:
30.第一生成子模块,用于对多个分支任务进行聚类,生成多个任务类别数据;
31.第二生成子模块,用于根据多个任务类别数据对所述硬件资源进行划分,生成硬件分配结果。
32.可选地,还包括:
33.生成模块还用于若所述判断模块判断出所述编译任务不包括分支任务时,则根据所述编译参数和核心参数,生成第二编译指令;
34.发送模块还用于将所述第二编译指令发送给调度器,以供所述调度器根据所述第二编译指令对所述硬件资源进行调度。
35.第三方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,在所述程序运行时控制所述计算机可读存储介质所在设备执行第一方面或第一方面任一可能的实现方式中的任务编译方法。
36.第四方面,本发明实施例提供一种编译器,包括:一个或多个处理器;存储器;以及一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述存储器中,所述一个或多个计算机程序包括指令,当所述指令被所述设备执行时,使得所述设备执行第一方面或第一方面任一可能的实现方式中的任务编译方法。
37.本发明实施例提供的技术方案中,编译器接收用户输入的至少一个编译任务,编
译器判断编译任务是否包括多个分支任务,若判断出编译任务包括多个分支任务时,则根据多个分支任务对获取的嵌入式神经网络处理器npu的硬件资源进行划分,生成硬件分配结果,根据硬件分配结果、用户输入的编译参数和获取的每个npu核心计算需要的核心参数,生成第一编译指令;编译器将第一编译指令发送给调度器,以供调度器根据第一编译指令对硬件资源进行调度,从而通过编译器实现了合理分配npu的硬件资源,提高了npu的运算速度。
【附图说明】
38.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
39.图1为本发明实施例提供的一种任务编译方法的流程图;
40.图2为本发明实施例提供的另一种任务编译方法的流程图;
41.图3为本发明实施例提供的另一种任务编译方法的流程图;
42.图4为本发明实施例提供的一种任务编译装置的结构示意图;
43.图5为本发明实施例提供的一种编译器的示意图。
【具体实施方式】
44.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
45.应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
46.在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
47.应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,甲和/或乙,可以表示:单独存在甲,同时存在甲和乙,单独存在乙这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
48.取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
49.图1为本发明实施例提供的一种任务核编译方法的流程图,如图1所示,该方法包括:
50.步骤101、编译器接收用户输入的至少一个编译任务。
51.至少一个编译任务包括一个编译任务或多个编译任务。编译器接收用户通过编译
器前端输入的一个编译任务或多个编译任务。
52.步骤102、编译器获取npu的硬件资源。
53.作为一种可选方案,当编译任务为一个编译任务时,npu包括多个npu核心,则硬件资源包括多个npu核心的标识。例如,多个npu核心的标识包括核心1至核心8。
54.作为另一种可选方案,当编译任务为多个编译任务时,npu包括多个npu集群,并且每个npu集群包括多个npu核心,则硬件资源包括多个npu集群的标识和每个npu集群的多个npu核心的标识。例如,多个npu集群的标识包括集群1至集群3,集群1的多个npu核心的标识包括核心1至核心4,集群2的多个npu核心的标识包括核心5至核心8,集群3的多个npu核心的标识包括核心9至核心16。
55.需要说明的是:例如,步骤101还可以在步骤102之后执行。
56.步骤103、编译器判断编译任务是否包括多个分支任务,若是,则执行步骤104;若否,则执行步骤108。
57.编译任务包括多个任务,每个任务为编译任务的一个分支任务。若编译器判断出编译任务包括多个分支任务,表明可以并行执行多个分支任务,此时,需要对硬件资源进行划分,则执行步骤104;若编译器判断出编译任务不包括分支任务,表明不需要对硬件资源进行划分,则执行步骤108。
58.作为一种可选方案,当编译任务为一个编译任务时,编译器判断一个编译任务是否包括多个分支任务,若编译器判断出一个编译任务包括多个分支任务,表明可以并行执行多个分支任务,此时,需要对多个npu核心的标识进行划分,则执行步骤104;若编译器判断出一个编译任务不包括分支任务,表明不需要对多个npu核心的标识进行划分,则执行步骤108。
59.作为另一种可选方案,当编译任务为多个编译任务时,编译器将多个编译任务分配至对应的npu集群,此时,编译器判断单个npu集群中的编译任务是否包括多个分支任务,若编译器判断出单个npu集群中的编译任务包括多个分支任务,表明可以并行执行多个分支任务,此时,需要对单个npu集群的多个npu核心的标识进行划分,则执行步骤104;若编译器判断出单个npu集群中的编译任务不包括分支任务,表明不需要对单个npu集群的多个npu核心的标识进行划分,则执行步骤108。
60.步骤104、编译器根据多个分支任务对硬件资源进行划分,生成硬件分配结果。
61.作为一种可选方案,当编译任务的数目为一个时,编译器根据多个分支任务对多个npu核心的标识进行划分,生成硬件分配结果。例如,多个npu核心的标识包括核心1至核心8,多个分支任务包括分支任务1、分支任务2和分支任务3,编译器根据分支任务1、分支任务2和分支任务3对核心1至核心8进行划分,生成硬件分配结果,其中,硬件分配结果包括将核心1对应的npu核心和核心2对应的npu核心分配给分支任务1、将核心3对应的npu核心和核心4对应的npu核心分配给分支任务2和将核心5对应的npu核心至核心8对应的npu核心分配给分支任务3。编译器通过对多个npu核心的标识的划分实现了对硬件资源的划分。
62.作为另一种可选方案,当编译任务的数目为多个时,编译器根据多个编译任务对多个npu集群的标识进行划分,将多个编译任务分配至对应的npu集群,编译器根据每个编译任务的多个分支任务对单个npu集群的多个npu核心的标识进行划分,生成硬件分配结果。例如,多个编译任务包括编译任务1和编译任务2,编译任务1包括分支任务1和分支任务
own codegen,byoc)机制的张量虚拟机(tensor virtual machine,tvm)。tvm作为开放式深度学习编译器,并针对各类ai处理器提供了一种通用的编译模式。tvm支持主流的深度学习前端框架,包括tensorflow、mxnet、pytorch或keras,同时tvm能够部署到宽泛的硬件后端,包括cpu、gpu、npu以及其它各种专用加速器等。tvm编译器的通用性较好但专用性较差。tvm的编译模式无法获取处理器的硬件配置,tvm通过机器学习等理论算法选择模型编译的最优配置,实现对硬件配置的自动调整与调度,因此,tvm实际应用效果并不理想,硬件的利用率与计算效率还有很大的提升空间。为了弥补tvm的不足,可以引进byoc机制,允许硬件厂商将自己的目标代码生成器加入tvm,加入目标代码生成器的tvm即为基于byoc机制的tvm。
74.本发明实施例提供的一种任务核编译方法的技术方案中,编译器接收用户输入的至少一个编译任务,编译器判断编译任务是否包括多个分支任务,若判断出编译任务包括多个分支任务时,则根据多个分支任务对获取的嵌入式神经网络处理器npu的硬件资源进行划分,生成硬件分配结果,根据硬件分配结果、用户输入的编译参数和获取的每个npu核心计算需要的核心参数,生成第一编译指令;编译器将第一编译指令发送给调度器,以供调度器根据第一编译指令对硬件资源进行调度,从而通过编译器实现了合理分配npu的硬件资源,提高了npu的运算速度。
75.图2为本发明实施例提供的另一种任务核编译方法的流程图,如图2所示,该方法包括:
76.步骤201、编译器接收用户输入的编译任务。
77.编译任务包括一个编译任务,即编译任务的数目为1。编译器接收用户通过编译器前端输入的一个编译任务。
78.步骤202、编译器获取npu的硬件资源。
79.当编译任务为一个编译任务时,npu包括多个npu核心,则硬件资源包括多个npu核心的标识。例如,多个npu核心的标识包括核心1至核心8。
80.步骤203、编译器判断编译任务是否包括多个分支任务,若是,则执行步骤204;若否,则执行步骤211。
81.若编译器判断出编译任务包括多个分支任务,表明可以并行执行多个分支任务,此时,需要对硬件资源进行划分,则执行步骤204;若编译器判断出编译任务不包括分支任务,表明不需要对硬件资源进行划分,则执行步骤211。例如,当编译任务为一个编译任务时,编译器判断一个编译任务是否包括多个分支任务,若编译器判断出一个编译任务包括多个分支任务,表明可以并行执行多个分支任务,此时,需要对多个npu核心的标识进行划分,则执行步骤204;若编译器判断出一个编译任务不包括分支任务,表明不需要对多个npu核心的标识进行划分,使用所有核心并发的最大算力完成编译任务的编译,则执行步骤211。
82.步骤204、编译器对多个分支任务进行聚类,生成多个任务类别数据。
83.任务类别数据包括算子聚类数据。编译器将每个分支任务的第一个算子作为初始聚类中心,根据k均值算法对其它算子进行迭代聚类,直到所有算子到类中心的距离之和最小为止,根据算子聚类的类别进行任务划分,生成多个任务类别数据。例如,当一个编译任务的多个分支任务包括分支任务1、分支任务3和分支任务3,对分支任务1、分支任务2和分支任务3进行聚类生成多个任务类别数据,其中,多个任务类别数据包括算子聚类数据1、算
子聚类数据2和算子聚类数据3。
84.步骤205、编译器根据多个任务类别数据对硬件资源进行划分,生成硬件分配结果。
85.硬件资源包括多个npu核心的标识,例如,多个npu核心的标识包括核心1至核心8,编译任务包括分支任务1、分支任务2和分支任务3,多个任务类别数据包括算子聚类数据1、算子聚类数据2和算子聚类数据3。编译器根据算子聚类数据1、算子聚类数据2和算子聚类数据3对核心1至核心8进行划分,生成硬件分配结果,其中,硬件分配结果包括将核心1对应的npu核心和核心2对应的npu核心分配给分支任务1、将核心3对应的npu核心和核心4对应的npu核心分配给分支任务2和将核心5对应的npu核心至核心8对应的npu核心分配给分支任务3。编译器通过对多个npu核心的标识的划分实现了对硬件资源的划分。
86.步骤206、编译器根据硬件分配结果、用户输入的编译参数和获取的每个npu核心计算需要的核心参数,生成第一编译指令。
87.用户输入的编译参数包括但不限于权重压缩参数、精度参数、调度参数中至少一个。每个npu核心计算需要的核心参数包括但不限于最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个。编译器对硬件分配结果、权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个进行二进制转换,生成第一编译指令。
88.步骤207、编译器将第一编译指令发送给调度器。
89.步骤208、调度器对第一编译指令进行解析,得到配置参数。
90.配置参数包括硬件分配结果、权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个。调度器对第一编译指令进行二进制反序列解析,得到硬件分配结果、权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个。
91.步骤209、调度器判断npu是否包括空闲核心,若是,则执行步骤210;若否,则执行步骤209。
92.若调度器判断出npu包括空闲核心,表明可以对npu空闲核心进行调度,以完成对编译任务的编译,则执行步骤210;若调度器判断出npu不包括空闲核心,表明不可以对npu核心进行调度,无法对编译任务进行编译,则继续等待npu的空闲核心,则执行步骤209。
93.步骤210、调度器根据配置参数对硬件资源进行调度,流程结束。
94.调度器根据硬件分配结果、权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个对编译任务的特征图和权重进行张量分割;调度器根据分割后的编译任务对硬件资源进行调度。例如,调度器根据硬件分配结果、权重压缩参数、最小内存容量、填充尺寸、卷积步长对编译任务的特征图和权重进行张量分割,调度器根据分割后的编译任务对核心1对应的npu核心至核心8对应的npu核心进行调度。
95.步骤211、编译器根据编译参数和核心参数,生成第二编译指令。
96.编译器对权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个进行二进制转换,生成第二编译指令。
97.步骤212、编译器将第二编译指令发送给调度器。
98.步骤213、调度器对第二编译指令进行解析,得到配置参数。
99.配置参数包括权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积
核参数、卷积步长中至少一个。调度器对第二编译指令进行二进制反序列解析,得到权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个。
100.步骤214、调度器判断npu是否包括空闲核心,若是,则执行步骤215;若否,则执行步骤214。
101.若调度器判断出npu包括空闲核心,表明可以对npu空闲核心进行调度,以完成对任务的编译,则执行步骤215;若调度器判断出npu不包括空闲核心,表明不可以对npu核心进行调度,无法对任务进行编译,继续等待npu的空闲核心,则执行步骤214。
102.步骤215、调度器根据配置参数对硬件资源进行调度,流程结束。
103.调度器根据权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个对编译任务的特征图和权重进行张量分割;调度器根据分割后的编译任务对硬件资源进行调度。例如,调度器根据权重压缩参数、最小内存容量、填充尺寸、卷积步长对编译任务的特征图和权重进行张量分割,调度器根据分割后的编译任务对核心1对应的npu核心至核心8对应的npu核心进行调度。
104.本发明实施例提供的另一种任务核编译方法的技术方案中,编译器接收用户输入的编译任务,获取npu的硬件资源;编译器若判断出编译任务包括多个分支任务,则对多个分支任务进行聚类,生成多个任务类别数据,并根据多个任务类别数据对硬件资源进行划分,生成硬件分配结果;编译器根据硬件分配结果、用户输入的编译参数和获取的每个npu核心计算需要的核心参数,生成第一编译指令,并将第一编译指令发送给调度器;调度器对第一编译指令进行解析,得到配置参数,若调度器判断出npu包括空闲核心,调度器根据配置参数对硬件资源进行调度,从而通过编译器自适应划分编译任务,实现了合理分配npu的硬件资源,提升了npu的硬件资源的利用率,提高了npu的运算速度,并改善了神经网络模型在npu上执行任务的性能。
105.图3为本发明实施例提供的另一种任务核编译方法的流程图,如图3所示,该方法包括:
106.步骤301、编译器接收用户输入的多个编译任务。
107.编译任务包括多个编译任务,即编译任务的数目大于或等于2。编译器接收用户通过编译器前端输入的多个编译任务。
108.步骤302、编译器获取npu的硬件资源。
109.当编译任务为多个编译任务时,npu包括多个npu集群,并且每个npu集群包括多个npu核心,则硬件资源包括多个npu集群的标识和每个npu集群的多个npu核心的标识。例如,多个npu集群的标识包括集群1至集群3,集群1的多个npu核心的标识包括核心1至核心4,集群2的多个npu核心的标识包括核心5至核心8,集群3的多个npu核心的标识包括核心9至核心16。
110.步骤303、编译器判断编译任务的数目是否小于或等于npu集群的数目,若是,则执行步骤304;若否,则执行步骤318。
111.若编译器判断出编译任务的数目小于或等于npu集群的数目,表明可以将在npu集群中并行执行每个编译任务,此时,需要对npu集群的标识进行分配,则执行步骤304;若编译器判断出编译任务的数目大于npu集群的数目,表明需要根据每个编译任务的计算需求量对npu集群的标识进行分配,则执行步骤318。
112.步骤304、编译器将每个编译任务分配至对应的npu集群。
113.编译器根据单个npu集群中npu核心的数目将每个编译任务分配至对应的npu集群。
114.本发明实施例中,单个npu集群中npu核心可以共同访问单个npu集群中的共享核间内存。
115.步骤305、编译器判断编译任务是否包括多个分支任务,若是,则执行步骤306;若否,则执行步骤313。
116.若编译器判断出编译任务包括多个分支任务,表明可以并行执行多个分支任务,此时,需要对硬件资源进行划分,则执行步骤306;若编译器判断出编译任务不包括分支任务,表明不需要对硬件资源进行划分,则执行步骤313。例如,当编译任务为多个编译任务时,编译器将多个编译任务分配至对应的npu集群,此时,编译器判断单个npu集群中的编译任务是否包括多个分支任务,若编译器判断出单个npu集群中的编译任务包括多个分支任务,表明可以并行执行多个分支任务,此时,需要对单个npu集群的多个npu核心的标识进行划分,则执行步骤306;若编译器判断出单个npu集群中的编译任务不包括分支任务,表明不需要对单个npu集群的多个npu核心的标识进行划分,使用单个npu集群中的所有核心并发的最大算力完成任务的编译,则执行步骤313。
117.本发明实施例中,编译器并行执行判断每个npu集群中的编译任务是否包括多个分支任务。
118.步骤306、编译器对多个分支任务进行聚类,生成多个任务类别数据。
119.编译器将单个npu集群中的每个分支任务的第一个算子为初始聚类中心,根据k均值算法对单个npu集群中的每个分支任务的其它算子进行迭代聚类,直到所有算子到类中心的距离之和最小为止,根据算子聚类的类别进行任务划分,生成任务类别数据。例如,当单个npu集群中的一个编译任务的多个分支任务包括分支任务1和分支任务2时,对分支任务1和分支任务2进行聚类生成多个任务类别数据,其中,多个任务类别数据包括算子聚类数据1和算子聚类数据2。
120.步骤307、编译器根据多个任务类别数据对硬件资源进行划分,生成硬件分配结果。
121.硬件资源包括多个npu集群的标识和单个npu集群的多个npu核心的标识,例如,多个编译任务包括编译任务1和编译任务2,编译任务1包括分支任务1和分支任务2,编译任务2包括分支任务3至分支任务6,多个任务类别数据包括算子聚类数据1至算子聚类数据6,多个npu集群的标识包括集群1至集群3,集群1的多个npu核心的标识包括核心1至核心4,集群2的多个npu核心的标识包括核心5至核心8,集群3的多个npu核心的标识包括核心9至核心16。编译器根据编译任务1和编译任务2对集群1至集群3进行划分,编译器将编译任务1分配至集群1,将编译任务2分配至集群3,编译器根据编译任务1的算子聚类数据1和算子聚类数据2对集群1的核心1至核心4进行划分,生成硬件分配结果,其中,硬件分配结果包括将集群1的核心1对应的npu核心和核心2对应的npu核心分配给分支任务1和将集群1的核心3对应的npu核心和核心4对应的npu核心分配给分支任务2;编译器根据编译任务2的算子聚类数据3至算子聚类数据6对集群3的核心9至核心16进行划分,生成硬件分配结果,其中,硬件分配结果包括将集群3的核心9对应的npu核心和核心10对应的npu核心分配给分支任务3、将
集群3的核心11对应的npu核心和核心12对应的npu核心分配给分支任务4、将集群3的核心13对应的npu核心和核心14对应的npu核心分配给分支任务5和将集群3的核心15对应的npu核心和核心16对应的npu核心分配给分支任务6。编译器通过对多个npu集群的标识和多个npu核心的标识的划分实现了对硬件资源的划分。
122.步骤308、编译器根据硬件分配结果、用户输入的编译参数和获取的每个npu核心计算需要的核心参数,生成第一编译指令。
123.用户输入的编译参数包括但不限于权重压缩参数、精度参数、调度参数中至少一个。每个npu核心计算需要的核心参数包括但不限于最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个。编译器对硬件分配结果、权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个进行二进制转换,生成第一编译指令。
124.步骤309、编译器将第一编译指令发送给调度器。
125.步骤310、调度器对第一编译指令进行解析,得到配置参数。
126.配置参数包括硬件分配结果、权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个。调度器对第一编译指令进行二进制反序列解析,得到硬件分配结果、权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个。
127.步骤311、调度器判断npu是否包括空闲核心,若是,则执行步骤312;若否,则执行步骤311。
128.若调度器判断出npu包括空闲核心,表明可以对npu空闲核心进行调度,以完成对编译任务的编译,则执行步骤312;若调度器判断出npu不包括空闲核心,表明不可以对npu核心进行调度,无法对编译任务进行编译,则继续等待npu的空闲核心,则执行步骤311。
129.步骤312、调度器根据配置参数对硬件资源进行调度,流程结束。
130.调度器根据硬件分配结果、权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个对编译任务的特征图和权重进行张量分割;调度器根据分割后的编译任务对硬件资源进行调度。例如,调度器根据硬件分配结果、权重压缩参数、最小内存容量、填充尺寸、卷积步长对编译任务1的特征图和权重进行张量分割,调度器根据分割后的编译任务1对集群1的核心1对应的npu核心至核心4对应的npu核心进行调度。
131.步骤313、编译器根据编译参数和核心参数,生成第二编译指令。
132.编译器对权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个进行二进制转换,生成第二编译指令。
133.步骤314、编译器将第二编译指令发送给调度器。
134.步骤315、调度器对第二编译指令进行解析,得到配置参数。
135.配置参数包括权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个。调度器对第二编译指令进行二进制反序列解析,得到权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个。
136.步骤316、调度器判断npu是否包括空闲核心,若是,则执行步骤317;若否,则执行步骤316。
137.若调度器判断出npu包括空闲核心,表明可以对npu空闲核心进行调度,以完成对
编译任务的编译,则执行步骤317;若调度器判断出npu不包括空闲核心,表明不可以对npu核心进行调度,无法对编译任务进行编译,继续等待npu的空闲核心,则执行步骤316。
138.步骤317、调度器根据配置参数对硬件资源进行调度,流程结束。
139.调度器根据权重压缩参数、精度参数、调度参数、最小内存容量、填充尺寸、卷积核参数、卷积步长中至少一个对编译任务的特征图和权重进行张量分割;调度器根据分割后的编译任务对硬件资源进行调度。例如,调度器根据权重压缩参数、最小内存容量、填充尺寸、卷积步长对编译任务1的特征图和权重进行张量分割,调度器根据分割后的编译任务1对集群1的核心1对应的npu核心至核心4对应的npu核心进行调度。
140.步骤318、编译器计算每个编译任务的计算需求量。
141.计算需求量包括时间。编译器根据每个编译任务的参数量计算每个编译任务的时间。
142.步骤319、编译器从用户输入的多个编译任务中选取出特定数目个编译任务,特定数目个编译任务的计算需求量均小于用户输入的多个编译任务中其它编译任务的计算需求量,特定数目等于npu集群的数目。
143.编译器根据每个编译任务的计算需求量的大小选取出特定数目个编译任务,通过最短作业优先(shortest job first,sjf)算法将计算需求量小的编译任务优先分配至对应的npu集群。
144.本发明实施例中,计算需求量大的其它编译任务将等待分配至对应的npu集群。
145.步骤320、编译器将特定数目个编译任务中的每个编译任务分配至对应的npu集群,并行执行步骤305。
146.编译器根据npu集群中npu核心的数目将特定数目个编译任务分配至对应的npu集群,编译器判断单个npu集群中的编译任务是否包括多个分支任务。
147.本发明实施例提供的另一种任务核编译方法的技术方案中,编译器接收用户输入的多个编译任务,获取npu的硬件资源,若编译器判断出编译任务的数目小于或等于npu集群的数目,则将每个编译任务分配至对应的npu集群;若编译器判断出编译任务包括多个分支任务,编译器对多个分支任务进行聚类,生成多个任务类别数据,并根据多个任务类别数据对硬件资源进行划分,生成每个分支任务对应的硬件分配结果;编译器根据硬件分配结果、用户输入的编译参数和获取的每个npu核心计算需要的核心参数,生成第一编译指令,并将第一编译指令发送给调度器;调度器对第一编译指令进行解析,得到配置参数;若调度器判断出npu包括空闲核心,调度器根据配置参数对硬件资源进行调度,从而通过编译器自适应划分编译任务,实现了合理分配npu的硬件资源,提升了npu的硬件资源的利用率,提高了npu的运算速度,并改善了神经网络模型在npu上执行任务的性能。
148.图4为本发明实施例提供的一种任务编译装置的结构示意图,如图4所示,该装置包括:接收模块11、获取模块12、判断模块13、生成模块14和发送模块15。
149.接收模块11和获取模块12连接,获取模块12和判断模块13连接,判断模块13和生成模块14连接,生成模块14和发送模块15连接。
150.接收模块11用于接收用户输入的至少一个编译任务;获取模块12用于获取npu的硬件资源;判断模块13用于判断编译任务是否包括多个分支任务;生成模块14用于若判断模块13判断出编译任务包括多个分支任务时,则根据多个分支任务对硬件资源进行划分,
生成硬件分配结果;根据硬件分配结果、编译参数和核心参数,生成第一编译指令;发送模块15用于将第一编译指令发送给调度器,以供调度器根据第一编译指令对硬件资源进行调度。
151.本发明实施例中,生成模块14包括:第一生成子模块141和第二生成子模块142。第一生成子模块141和第二生成子模块142连接。
152.第一生成子模块141用于对多个分支任务进行聚类,生成多个任务类别数据;第二生成子模块142用于根据多个任务类别数据对硬件资源进行划分,生成硬件分配结果。
153.本发明实施例中,生成模块14还用于若判断模块13判断出编译任务不包括分支任务时,则根据编译参数和核心参数,生成第二编译指令;发送模块15还用于将第二编译指令发送给调度器,以供调度器根据第二编译指令对硬件资源进行调度。
154.本发明实施例中,编译任务的数量为多个,该装置还包括:分配模块16。分配模块16和判断模块13连接。
155.判断模块13还用于判断编译任务的数目是否小于或等于npu集群的数目;分配模块16用于若判断模块13判断出编译任务的数目小于或等于npu集群的数目时,则将每个编译任务分配至对应的npu集群,触发判断模块13并行执行判断编译任务是否包括多个分支任务的步骤。
156.本发明实施例中,编译任务的数量为多个,该装置还包括:计算模块17和选取模块18。计算模块17与判断模块13和选取模块18连接。
157.计算模块17用于若判断模块13判断出编译任务的数目大于npu集群的数目时,则计算每个编译任务的计算需求量;选取模块18用于从用户输入的多个编译任务中选取出特定数目个编译任务,特定数目个编译任务的计算需求量均小于用户输入的多个编译任务中其它编译任务的计算需求量,特定数目等于npu集群的数目;分配模块16还用于将特定数目个编译任务中的每个编译任务分配至对应的npu集群,触发判断模块13并行执行判断编译任务是否包括多个分支任务的步骤。
158.本发明实施例提供的任务编译装置的技术方案中,编译器接收用户输入的至少一个编译任务,编译器判断编译任务是否包括多个分支任务,若判断出编译任务包括多个分支任务时,则根据多个分支任务对获取的嵌入式神经网络处理器npu的硬件资源进行划分,生成硬件分配结果,根据硬件分配结果、用户输入的编译参数和获取的每个npu核心计算需要的核心参数,生成第一编译指令;编译器将第一编译指令发送给调度器,以供调度器根据第一编译指令对硬件资源进行调度,从而通过编译器实现了合理分配npu的硬件资源,提高了npu的运算速度。
159.图5为本发明实施例提供的一种编译器的示意图,如图5所示,编译器21包括:处理器211、存储器212以及存储在存储器212中并可在处理器211上运行的计算机程序213,该计算机程序213被处理器211执行时实现实施例中的任务编译方法,为避免重复,此处不一一赘述。
160.编译器21包括,但不仅限于,处理器211、存储器212。本领域技术人员可以理解,图5仅仅是编译器21的示例,并不构成对编译器21的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如编译器还可以包括输入输出设备、网络接入设备、总线等。
161.所称处理器211可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
162.存储器212可以是编译器21的内部存储单元,例如编译器21的硬盘或内存。存储器212也可以是编译器21的外部存储设备,例如编译器21上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,存储器212还可以既包括编译器21的内部存储单元也包括外部存储设备。存储器212用于存储计算机程序以及网络设备所需的其他程序和数据。存储器212还可以用于暂时地存储已经输出或者将要输出的数据。
163.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
164.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1