一种神经网络的编译方法、装置、计算机设备及存储介质与流程

文档序号:29716525发布日期:2022-04-16 18:42阅读:159来源:国知局
一种神经网络的编译方法、装置、计算机设备及存储介质与流程

1.本公开涉及计算机技术领域,具体而言,涉及一种神经网络的编译方法、装置、计算机设备及存储介质。


背景技术:

2.人工智能(artificial intelligence,ai)加速芯片时提高神经网络推理性能的有效途径,它在硬件层面上实现了神经网络中的常见计算,提升了网络的推理过程。为了在ai加速芯片上推理一个神经网络,需要编译器把原始的神经网络编译为ai加速卡芯片的指令。
3.然而,常用的编译框架主要面向于通用的硬件加速器,也即更适用于可拆分为简单运算操作的机器指令,而并不适用于直接采用卷积运算等运算操作的机器指令,因此不适用于将神经网络编译在ai加速芯片这样的数据处理芯片上。


技术实现要素:

4.本公开实施例至少提供一种神经网络的编译方法、装置、计算机设备及存储介质。
5.第一方面,本公开实施例提供了一种神经网络的编译方法,包括:对中间程序进行解析,得到所述中间程序的内部数据结构;所述内部数据结构包括对象以及对象之间的关联关系;所述对象包括:操作语句、以及与所述操作语句对应的变量和变量定义语句;其中,所述中间程序是利用预设中间语言和目标高级语言之间的转换关系信息,将基于目标高级语言编写的目标神经网络的原始程序转换为预设中间语言编写的程序;基于所述内部数据结构,生成所述操作语句的配置信息;基于所述操作语句对数据处理芯片的指令封装关系、以及所述配置信息,生成所述数据处理芯片在运行所述目标神经网络时的机器指令。
6.一种可选的实施方式中,所述操作语句的配置信息包括:与所述操作语句对应的变量的目标存储地址;所述基于所述内部数据结构,生成每条所述操作语句的配置信息,包括:针对所述操作语句中的目标操作语句,基于所述目标操作语句对应变量的变量定义语句,为所述目标操作语句对应的变量分配对应的目标存储地址;所述目标存储地址包括内存中的存储地址、和/或高速缓存中的存储地址。
7.一种可选的实施方式中,所述基于所述内部数据结构,生成每条所述操作语句的配置信息之前,还包括:基于所述操作语句的类型、以及所述操作语句对应的变量,从所述操作语句中,确定对预设存储空间进行重复访存的待删除操作语句;从所述操作语句中删除所述待删除操作语句,得到所述目标操作语句。
8.一种可选的实施方式中,所述操作语句的类型包括:变量存储、以及变量读取;所述基于所述操作语句的类型、以及所述操作语句对应的变量,从所述操作语句中,确定对预设存储空间进行重复访存的待删除操作语句,包括:针对每个类型为变量存储的第一操作语句,基于所述第一操作语句对应的变量,确定是否存在与所述第一操作语句对应的变量为同一变量、且类型为变量读取的第二操作语句;其中,所述第一操作语句和所述第二操作
语句分别属于相邻的不同网络层;若存在,则将所述第一操作语句与对应的第二操作语句确定为所述待删除操作语句。
9.一种可选的实施方式中,所述变量包括:各个网络层分别对应的输入变量、输出变量、以及中间变量;所述基于所述目标操作语句对应变量的变量定义语句,为所述目标操作语句对应的变量分配对应的目标存储地址,包括:响应于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为输入变量,为所述目标操作语句对应的变量分配内存、以及高速缓存中的存储地址;响应于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为输出变量,为所述目标操作语句对应的变量分配内存、以及高速缓存中的存储地址;响应于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为中间变量,为所述目标操作语句对应的变量分配高速缓存中的存储地址。
10.一种可选的实施方式中,所述基于所述操作语句对数据处理芯片的指令封装关系、以及所述配置信息,生成所述数据处理芯片在运行所述目标神经网络时的机器指令之前,还包括:针对每条操作语句,根据所述每条操作语句和其他操作语句之间的关联关系,为所述每条操作语句添加等待信息;所述等待信息用于指示所述每条操作指令的执行顺序。
11.一种可选的实施方式中,所述针对每条操作语句,根据所述每条操作语句和其他操作语句之间的关联关系,为所述每条操作语句添加等待信息之后,还包括:基于操作语句、以及为所述操作语句添加的等待信息,生成第一调试信息;所述第一调试信息用于对所述目标神经网络的原始程序进行调试。
12.一种可选的实施方式中,所述基于所述内部数据结构,生成所述操作语句的配置信息之后,还包括:基于所述操作语句、以及所述操作语句对应的所述配置信息,生成第二调试信息;所述第二调试信息用于对所述目标神经网络的原始程序进行调试。
13.一种可选的实施方式中,所述编译方法还包括:响应于对多所述数据处理芯片的多条机器指令的封装操作,生成与所述封装操作对应的操作语句;建立所述操作语句与所述目标高级语言之间的转换关系。
14.第二方面,本公开实施例还提供一种神经网络的编译装置,包括:解析模块,用于对中间程序进行解析,得到所述中间程序的内部数据结构;所述内部数据结构包括对象以及对象之间的关联关系;所述对象包括:操作语句、以及与所述操作语句对应的变量和变量定义语句;其中,所述中间程序是利用预设中间语言和目标高级语言之间的转换关系信息,将基于目标高级语言编写的目标神经网络的原始程序转换为预设中间语言编写的程序;第一生成模块,用于基于所述内部数据结构,生成所述操作语句的配置信息;第二生成模块,用于基于所述操作语句对数据处理芯片的指令封装关系、以及所述配置信息,生成所述数据处理芯片在运行所述目标神经网络时的机器指令。
15.一种可选的实施方式中,所述操作语句的配置信息包括:与所述操作语句对应的变量的目标存储地址;所述第一生成模块在基于所述内部数据结构,生成每条所述操作语句的配置信息时,用于:针对所述操作语句中的目标操作语句,基于所述目标操作语句对应变量的变量定义语句,为所述目标操作语句对应的变量分配对应的目标存储地址;所述目标存储地址包括内存中的存储地址、和/或高速缓存中的存储地址。
16.一种可选的实施方式中,所述第一生成模块在基于所述内部数据结构,生成每条所述操作语句的配置信息之前,还用于:基于所述操作语句的类型、以及所述操作语句对应的变量,从所述操作语句中,确定对预设存储空间进行重复访存的待删除操作语句;从所述操作语句中删除所述待删除操作语句,得到所述目标操作语句。
17.一种可选的实施方式中,所述操作语句的类型包括:变量存储、以及变量读取;所述第一生成模块在基于所述操作语句的类型、以及所述操作语句对应的变量,从所述操作语句中,确定对预设存储空间进行重复访存的待删除操作语句时,用于:针对每个类型为变量存储的第一操作语句,基于所述第一操作语句对应的变量,确定是否存在与所述第一操作语句对应的变量为同一变量、且类型为变量读取的第二操作语句;其中,所述第一操作语句和所述第二操作语句分别属于相邻的不同网络层;若存在,则将所述第一操作语句与对应的第二操作语句确定为所述待删除操作语句。
18.一种可选的实施方式中,所述变量包括:各个网络层分别对应的输入变量、输出变量、以及中间变量;所述第一生成模块在基于所述目标操作语句对应变量的变量定义语句,为所述目标操作语句对应的变量分配对应的目标存储地址时,用于:响应于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为输入变量,为所述目标操作语句对应的变量分配内存、以及高速缓存中的存储地址;响应于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为输出变量,为所述目标操作语句对应的变量分配内存、以及高速缓存中的存储地址;响应于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为中间变量,为所述目标操作语句对应的变量分配高速缓存中的存储地址。
19.一种可选的实施方式中,所述第二生成模块在基于所述操作语句对数据处理芯片的指令封装关系、以及所述配置信息,生成所述数据处理芯片在运行所述目标神经网络时的机器指令之前,还用于:针对每条操作语句,根据所述每条操作语句和其他操作语句之间的关联关系,为所述每条操作语句添加等待信息;所述等待信息用于指示所述每条操作指令的执行顺序。
20.一种可选的实施方式中,所述第二生成模块在针对每条操作语句,根据所述每条操作语句和其他操作语句之间的关联关系,为所述每条操作语句添加等待信息之后,还用于:基于操作语句、以及为所述操作语句添加的等待信息,生成第一调试信息;所述第一调试信息用于对所述目标神经网络的原始程序进行调试。
21.一种可选的实施方式中,所述第一生成模块在基于所述内部数据结构,生成所述操作语句的配置信息之后,还用于:基于所述操作语句、以及所述操作语句对应的所述配置信息,生成第二调试信息;所述第二调试信息用于对所述目标神经网络的原始程序进行调试。
22.一种可选的实施方式中,所述编译装置还包括处理模块,用于:响应于对多所述数据处理芯片的多条机器指令的封装操作,生成与所述封装操作对应的操作语句;建立所述操作语句与所述目标高级语言之间的转换关系。
23.第三方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器
执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
24.第四方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
25.本公开实施例提供的神经网络的编译方法,可以利用对中间程序进行解析得到的内部数据结构,进一步的生成操作语句的配置信息,然后利用操作语句对数据处理芯片的指令封装关系以及配置信息,生成机器指令。这样,由于可以预先建立预设中间语言对数据处理芯片的指令进行封装的指令封装关系,因此可以根据数据处理芯片实际上能够支持的运算类型,利用中间语言构建对应的操作语句,这样,在将目标高级语言编写的原始程序转换为机器指令的过程中,无需将其细化为加、减、乘等基础机器指令,而是将其转换为数据处理芯片能够支持的运算类型对应的机器指令,实现对数据处理芯片的运算能力进行更加充分的利用。
26.为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
27.为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
28.图1示出了本公开实施例所提供的一种神经网络的编译方法的流程图;
29.图2示出了本公开实施例所提供的一种编译器的示意图;
30.图3示出了本公开实施例所提供的一种确定待删除操作语句的示例图;
31.图4示出了本公开实施例所提供的一种进行编译时的具体实施例对应的流程图;
32.图5示出了本公开实施例所提供的一种神经网络的编译装置的示意图;
33.图6示出了本公开实施例所提供的一种计算机设备的示意图。
具体实施方式
34.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
35.经研究发现,在数据处理芯片中,ai加速芯片是提高神经网络推理性能的有效途径,为了在ai加速芯片上推理一个网络,需要由编译器把原始网络编译为ai加速卡芯片的指令。根据ai加速芯片的硬件设计,每执行一次特定的计算,需要配置几十个寄存器参数,
同时还需要考虑多个计算在并行执行时的同步问题。编译器直接生成机器指令的做法不具备可调试性和大型网络的可扩展性,因此需要中间语言来连接编译器的前端和后端:前端负责解析网络和实现算子,生成中间语言;后端侧重优化和生成机器指令。目前常用的编译框架,其对应的中间语言主要面向通用的硬件加速器,而通用的硬件加速器通常是利用了基础机器指令,执行数据处理任务,基础机器指令可以为加、减、乘等基础计算对应的指令;而随着神经网络中算子类型不断增加,为了适应算子类型的增加,越来越多的ai加速芯片实现了将更复杂的运算固化在硬件中,例如卷积运算、池化运算等;当前的神经网络编译方法由于只能将神经网络编译为基础机器指令,因此无法对ai加速芯片的运算能力进行充分的利用,不适用于将神经网络编译在ai加速芯片上。
36.针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
37.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
38.为便于对本实施例进行理解,首先对本公开实施例所公开的一种神经网络的编译方法进行详细介绍,本公开实施例所提供的神经网络的编译方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(user equipment,ue)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(personal digital assistant,pda)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该神经网络的编译方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
39.下面对本公开实施例提供的神经网络的编译方法加以说明。
40.参见图1所示,为本公开实施例提供的一种神经网络的编译方法的流程图,所述方法包括步骤s101~s103,其中:
41.s101:对中间程序进行解析,得到所述中间程序的内部数据结构;所述内部数据结构包括对象以及对象之间的关联关系;所述对象包括:操作语句、以及与所述操作语句对应的变量和变量定义语句;其中,所述中间程序是利用预设中间语言和目标高级语言之间的转换关系信息,将基于目标高级语言编写的目标神经网络的原始程序转换为预设中间语言编写的程序;
42.s102:基于所述内部数据结构,生成所述操作语句的配置信息;
43.s103:基于所述操作语句对数据处理芯片的指令封装关系、以及所述配置信息,生成所述数据处理芯片在运行所述目标神经网络时的机器指令。
44.本公开实施例在将目标神经网络的原始程序转换为利用预设中间语言编写的中间程序后,可以利用对中间程序进行解析得到的内部数据结构,进一步的生成操作语句的配置信息,然后利用操作语句对数据处理芯片的指令封装关系以及配置信息,生成机器指令。这样,由于可以预先建立预设中间语言对数据处理芯片的指令进行封装的指令封装关系,因此可以根据数据处理芯片实际上能够支持的运算类型,利用中间语言构建对应的操作语句,这样,在将目标高级语言编写的原始程序转换为机器指令的过程中,无需将其细化为加、减、乘等基础机器指令,而是将其转换为数据处理芯片能够支持的运算类型对应的机
syntax tree,ast)进行表示,或者也可以采用其他的数据结构表示。以内部抽象语法树为例,内部抽象语法树是源代码语法结构的一种抽象表示,以树状的形式表现编程语言的语法结构,也即可以以树状的形式表现中间程序frontend.gil程序的语法结构,其中,在树上的每个节点均表示源代码中的一种结构。若对内部抽象语法树进行优化,具体可以包括将在树上的节点进行替换或者删除的处理,具体替换或者删除处理的处理逻辑与该节点对应的语法结构有关,例如在存储和读取数据时可以通过删除处理相关语句的方式进行优化,反映在内部抽象语法树上可以对应于将这些语句对应的节点进行删除。最终基于优化后的抽象语法树生成机器指令。在下文中将对这样的优化方式进行原理性的说明和解释。
55.具体地,在得到内部数据结构的情况下,内部数据结构包括对象以及对象的关联关系信息。其中,对象包括:操作语句、以及与所述操作语句对应的变量和变量定义语句。具体地,对象是一种封装的概念,是一个类的概念下的实体;多个对象例如可以属于同一类。操作语句例如可以包括具体的运算操作,或者具体的变量存储以及变量读取类型的操作。其中,变量例如可以包括待存储的具体数据,而对于不同的数据而言,数据类型等也有所不同,则可以采用变量定义语句确定对应的数据类型等信息。
56.针对上述s102,在确定内部数据结构的情况下,还可以相应的生成操作语句的配置信息。
57.在具体实施中,操作语句的配置信息,例如包括:目标操作语句对应的变量的目标存储地址、以及为操作语句添加的等待消息。
58.其中,在目标操作语句执行的过程中,可能会产生、或者使用某些变量;在执行目标操作语句之前,需要为目标操作语句对应的变量预先分配目标存储地址;在目标操作语句执行的过程中,若存在需要将变量进行存储的情况,可以基于为其预先分配的目标存储地址,将变量存储至目标存储地址指示的存储空间。
59.等待消息是指对在执行某条操作语句之前,需要执行的其他操作语句的具体信息的描述。基于该等待消息,可以限定不同操作语句的执行顺序,从而保证操作语句能够按照程序的逻辑顺利执行。
60.由于内部数据结构中可能会存在冗余的语句,例如重复访存的操作语句,因此在确定操作语句的配置信息的步骤之前,例如可以先确定可以删除的待操作语言,以得到目标操作语句,并生成目标操作语句对应的配置信息。这样,可以减少不必要的读取和读取操作,得到的配置信息更精简。
61.具体地,例如可以采用下述方式确定目标操作语句:基于所述操作语句的类型、以及所述操作语句对应的变量,从所述操作语句中,确定对预设存储空间进行重复访存的待删除操作语句;从所述操作语句中删除所述待删除操作语句,得到所述目标操作语句。
62.其中,操作语句的类型包括:变量存储、以及变量读取。在具体实施中,在从操作语句中确定对预设存储空间进行重复访存的待删除操作语句时,例如可以针对每个类型为变量存储的第一操作语句,基于所述第一操作语句对应的变量,确定是否存在与所述第一操作语句对应的变量为同一变量、且类型为变量读取的第二操作语句;其中,所述第一操作语句和所述第二操作语句分别属于相邻的不同网络层;若存在,则将所述第一操作语句与对应的第二操作语句确定为所述待删除操作语句。
63.示例性的,参见图3所示,为本公开实施例提供的一种确定待删除操作语句的示例
图。在该示例图中,在上方位置表示了两个网络层,对应的在下方位置描述了两个网络层分别对应的操作语句。在该示例中,包括两个相邻的网络层:网络层l1以及网络层l2。在该过程中,由于ai加速芯片的硬件计算单元仅能访问高速缓存,而不能直接访问内存,因此针对于网络层l1,其对应的输出数据为网络层l2的输入数据,由网络层l1传输至网络层l2的数据例如为变量a。在网络层l1中,变量a例如可以从高速缓存中读取出并进行计算,由于变量a对应的数值可能会发生变化,因此将计算后的变量a表示为a’。在得到a’后,可以将其存储至内存中。在网络层l2中,从内存中读取a’,并将a’存放至高速缓存中进行计算。也即,对于网络层l1以及网络层l2,具体在进行对变量a的计算时,例如可以采用实线箭头指示的流程进行操作。其中,为便于说明,为变量存储对应的操作语句标注f1,并为变量读取对应的操作语句标注f2。
64.而对于中间程序解析得到的内部数据结构而言,如果高速缓存中可以存放足够数量的数据,则可以不通过内存存放数据,而由下一层网络层直接从高速缓存中继续读取数据并对a’进行计算。也即,根据上述示例,针对类型为变量存储的操作语句而言,例如f1,若将该操作语句f1作为第一操作语句,则可以基于第一操作语句对应的变量,也即a,确定是否存在对应的变量为同一变量a、且类型为变量读取的第二操作语句,也即操作语句f2。并且,对于操作语句f1以及操作语句f2,其分别属于两个网络层,因此可以将确定得到的第一操作语句f1以及第二操作语句f2均作为待删除操作语句。在图3中,以虚线框的形式,框选出了可以删除的待删除操作语句f1以及f2。
65.在上述示例中,按照删除操作之前的逻辑:数据在放到高速缓存中,会再被存储到内存;读取的时候,会从内存读取到高速缓存,然后再从高速缓存中读取后进行处理,所以放入内存的步骤实际上是可以省略的。所以删除的语句,是将数据从高速缓存存储到内存,以及将其从内存再读取到高速缓存中的相关语句。
66.在确定待删除操作语句的情况下,即可以从操作语句中删除待删除操作语句,以得到目标操作语句。
67.在一种可能的情况下,在确定目标操作语句的情况下,还可以为目标操作语句对应的变量分配对应的目标存储地址。具体地,例如可以采用下述方式:针对所述操作语句中的目标操作语句,基于所述目标操作语句对应变量的变量定义语句,为所述目标操作语句对应的变量分配对应的目标存储地址;所述目标存储地址包括内存中的存储地址、和/或高速缓存中的存储地址。其中,所述操作语句的配置信息包括:与所述操作语句对应的变量的目标存储地址。
68.在具体实施中,对于上述说明的目标操作语句,利用变量对应的变量定义语句,可以为不同的变量确定合适的目标存储地址。具体地,针对于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为输入变量,为所述目标操作语句对应的变量分配内存、以及高速缓存中的存储地址。针对于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为输出变量,为所述目标操作语句对应的变量分配内存、以及高速缓存中的存储地址。
69.示例性的,对于各个网络层的输入数据以及输出数据,由于数量较多,因此更适合采用内存进行存储,而对于在各个网络层中具体在计算中产生的中间数据等,为了保证计算的效率,因此可以采用高速缓存进行存储。
70.在一种可能的情况下,由于输入数据和/或输出数据也会参与内参数据的运算,在该种情况下,例如也可以为输入数据和/或输出数据分配高速缓存中的存储地址,由于为输入数据和/或输出数据分配存储地址的语句,并非可以删除的语句,且是图3中进行存储和读取操作中也包含的语句,因此并不会由于分配地址的语句而影响效率,但在高速缓存中将数据进行存储和读取,可以提高计算的效率。
71.也即,针对所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为中间变量,为所述目标操作语句对应的变量分配高速缓存中的存储地址。
72.在本公开另一实施例中,针对每条操作语句,例如还可以根据所述每条操作语句和其他操作语句之间的关联关系,为所述每条操作语句添加等待信息;所述等待信息用于指示所述每条操作指令的执行顺序。
73.其中,对于多条操作语句而言,在现有技术中主要采用手工计算等待技术的方式,确定每条操作语句的执行次序。也即,每条操作语句对应的执行次序与多条操作语句均有联系。这样,若存在操作语句的添加或者删减,会需要对每条操作语句进行次序上的重新调整,这对于操作语句较多的情况是非常不便的。
74.在本公开实施例中,采用操作语句之间的关联关系信息,可以减少一条操作语句与多条操作语句之间的联系,而仅与和该条操作指令具有关联关系信息的操作语句之间存在联系。这样,在对操作语句进行添加或者删减时,不会由于一条操作语句的变化,而导致多条操作语句需要相应的进行调整,在提升灵活性的同时,也可以有效的避免重新对多条操作语句进行排列导致的执行顺序错误。
75.示例性的,在添加等待信息时,等待信息例如可以指示相邻的两个操作语句在执行时的执行顺序。例如,对于操作指令p1以及操作指令p2,若操作指令p1以及操作指令p2顺序执行,则例如可以为操作指令p1添加等待信息w1,等待信息w1可以指示在操作指令p1完成后,继续执行操作指令p2。
76.另外,针对每条操作语句,根据所述每条操作语句和其他操作语句之间的关联关系,为所述每条操作语句添加等待信息之后,例如还可以基于操作语句、以及为所述操作语句添加的等待信息,生成第一调试信息;所述第一调试信息用于对所述目标神经网络的原始程序进行调试。
77.此处,对原始程序的调试的原理类似于通过程序调试软件对程序的调试过程,在为操作语句添加等待信息后,再次对原始程序进行调试。在原理上,通过添加等待信息,可以避免多条操作语句在执行顺序上的错误,但仍需要通过调试的方式进行验证,以确定是否会出现原始程序在按照添加等待信息后的顺序执行时出现错误,也即是否会出现人工添加时的错误操作,导致的等待信息错误。
78.具体地,由于在添加等待信息时,可能会出现由于人工添加时的错误操作,而导致添加的等待信息错误。例如,在根据每条操作语句和其他操作语句之间的关联关系为每条操作语句确定等待信息时,错误地为部分操作语句设置了并不具有关联关系的其他操作语句对应的等待信息。因此,利用操作语句以及为操作语句添加的等待信息,可以生成第一调试信息。第一调试信息例如可以包括:以文字或者字符描述的等待信息的添加原则,使得工作人员根据第一调试信息、以及程序所需要的执行逻辑,对原始程序进行调试。利用第一调试信息可以辅助判断是否存在上述说明的错误添加的等待信息,以对目标神经网络的原始
程序进行调试,从而减少错误的发生。
79.这样,即可以根据内部数据结构,生成所述操作语句的配置信息。
80.在本公开另一实施例中,在生成所述操作语句的配置信息之后,还可以基于所述操作语句、以及所述操作语句对应的所述配置信息,生成第二调试信息;所述第二调试信息用于对所述目标神经网络的原始程序进行调试。
81.此处,与上述生成第一调试信息相似的,利用得到的第二调试信息,也可以相应的对得到的配置信息进行进一步的检查,以减少错误的发生。这里的第二调试信息在对原始程序进行调试时,是通过对配置信息的检查,实现对原始程序的调试。上述第一调试信息是为了判断是否存在错误添加的等待信息,以实现对原始程序的调试。
82.针对上述s103,在确定配置信息的情况下,利用操作语句对人工智能数据处理芯片的指令封装关系、以及所述配置信息,即可以生成利用所述数据处理芯片执行所述目标神经网络的推理任务时的机器指令。此处,数据处理芯片具体包括ai加速芯片,配置信息对操作语句具有具体的影响,例如对目标操作语句对应的变量分配对感应的目标存储地址等,具体可以参见上述s102中的说明。而操作语句可以用于生成机器指令,具体可以参见下述说明,因此配置信息也会通过影响操作语句的方式,影响最后生成的机器指令。
83.在利用配置信息生成机器指令时,若配置信包括:变量的目标存储地址,则生成的机器指令中携带有该目标存储地址,用于ai加速芯片执行对应机器指令时,从目标存储地址获取变量。
84.若配置信息包括:等待消息,则生成的机器指令中可以携带对应等待消息,以指示ai加速芯片对不同机器指令的执行顺序。
85.另外,等待消息也可以用于确定各个机器指令在由不同机器指令构成的指令流中的位置。该指令流中各个机器指令的顺序,即表征了机器指令的执行顺序。
86.在基于内部数据结构,生成操作语句的配置信息时,也是在内部数据结构的基础之上进行目标存储地址的生成、以及等待消息的生成。在生成了配置信息后,在内部数据结构的基础上为对应的操作语句添加对应的目标存储地址、以及等待消息,并构成最终的内部数据结构,然后利用最终的内部数据结构,生成机器指令。
87.在具体实施中,在确定配置信息的情况下,可以利用操作语句对ai加速芯片的指令封装关系,为每条操作语句按顺序生成机器指令,此处生成的机器指令也即利用ai加速芯片在实际部署在硬件设备上执行目标神经网络的推理任务时的机器指令。由于选取的ai加速芯片不同的情况下,加速芯片可执行的机器指令也有所不同,因此对于不同的ai加速芯片而言,操作语句对人工智能ai加速芯片的指令封装关系也不相同。
88.此处,指令封装关系,是指操作语句和ai加速芯片的芯片指令之间的转换关系。操作语句对ai加速芯片的指令封装关系,可以用于将操作语句对应的转换为ai加速芯片的指令。
89.在本公开另一实施例中,例如还可以响应于对多ai加速芯片的多条机器指令的封装操作,生成与所述封装操作对应的操作语句;建立所述操作语句与所述目标高级语言之间的转换关系。
90.示例性的,在对目标神经网络进行编译时,例如可以采用不同的高级语言,这样目标神经网络具有与高级语言的对应关系。而对于ai加速芯片而言,多条机器指令的封装操
作与对应的操作语句之间也存在对应关系。另外,目标神经网络在部署于ai加速芯片上时,也具备有ai加速芯片部署在目标神经网络上时对应的部署关系,例如何种数据类型的目标神经网络可以部署在ai加速芯片上。这样,利用上述说明的对应关系,可以确定操作语句与目标高级语言之间的转换关系,以在利用目标高级语言确定新的待部署的目标神经网络的情况下,直接利用这种转换关系确定对应的操作语句,效率更高。
91.在本公开另一实施例中,还提供了一种进行神经网络的编译时的具体实施例,在示例中,数据处理芯片具体包括ai加速芯片。参见图4所示,为本公开实施例提供的一种进行编译时的具体实施例对应的流程图;其中。
92.s401:确定目标神经网络以及ai加速芯片;
93.在该实施例中,目标神经网络例如可以包括卷积神经网络;编写卷积神经网络的目标高级语言为c语言;ai加速芯片可以根据实际需求选取,在此不做出限定。
94.s402:确定目标神经网络对应的中间程序;
95.在该实施例中,通过将利用c语言编写的原始程序变换为中间语言gil,可以得到目标神经网络对应的中间程序,表示为cnn_frontend.gil程序。
96.s403:对中间程序进行解析,得到中间程序的内部数据结构;
97.在该实施例中,中间程序的内部数据结构利用内部抽象语法树表示。
98.s404:确定内部数据结构中可以删除的待删除操作语句,并从内部数据结构中的操作语句中删除待删除操作语句,得到目标操作语句;
99.在该实施例中,通过对内部数据结构中操作语句的类型以及对应的变量,例如可以确定出待删除操作语句,并相应的进行对待删除操作语句的删除处理。这样,得到的目标操作语句相较于初始得到的内部数据结构中的操作语句更精简,并且可以减少后续操作时的数据量。
100.s405:为目标操作语句对应的变量分配对应的目标存储地址;
101.在该实施例中,可以为变量分配的目标存储地址包括:为输入变量分配内存、以及高速缓存中的存储地址;为输出变量分配内存、以及高速缓存中的存储地址;以及,为中间变量分配高速缓存中的存储地址。
102.s406:为每条操作语句添加等待信息;
103.在该实施例中,利用每条操作语句和其他操作语句之间的关联关系,可以为每条操作语句添加等待信息。
104.另外,针对上述步骤s404~s406,在本实施例中仅提供一种可能的顺序,具体可以根据实际情况进行删减以及步骤顺序的调整,在此不做出限定。另外,在上述步骤s404~s406中,还可以在每一个步骤结束后,生成相应的调试信息,以进一步确认该操作步骤是否准确。
105.s407:将目标存储地址、以及等待消息作为操作语句的配置信息,利用配置信息,生成ai加速芯片在运行所述目标神经网络时的机器指令。
106.本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
107.基于同一发明构思,本公开实施例中还提供了与神经网络的编译方法对应的神经
网络的编译装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述神经网络的编译方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
108.参照图5所示,为本公开实施例提供的一种神经网络的编译装置的示意图,所述装置包括:解析模块51、第一生成模块52、以及第二生成模块53;其中,
109.解析模块51,用于对所述中间程序进行解析,得到所述中间程序的内部数据结构;所述内部数据结构包括对象以及对象之间的关联关系;所述对象包括:操作语句、以及与所述操作语句对应的变量和变量定义语句;其中,所述中间程序是利用预设中间语言和目标高级语言之间的转换关系信息,将基于目标高级语言编写的目标神经网络的原始程序转换为预设中间语言编写的程序;
110.第一生成模块52,用于基于所述内部数据结构,生成所述操作语句的配置信息;
111.第二生成模块53,用于基于所述操作语句对人工智能ai加速芯片的指令封装关系、以及所述配置信息,生成所述数据处理芯片在运行所述目标神经网络时的机器指令。
112.一种可选的实施方式中,所述操作语句的配置信息包括:与所述操作语句对应的变量的目标存储地址;所述第一生成模块52在基于所述内部数据结构,生成每条所述操作语句的配置信息时,用于:针对所述操作语句中的目标操作语句,基于所述目标操作语句对应变量的变量定义语句,为所述目标操作语句对应的变量分配对应的目标存储地址;所述目标存储地址包括内存中的存储地址、和/或高速缓存中的存储地址。
113.一种可选的实施方式中,所述第一生成模块52在基于所述内部数据结构,生成每条所述操作语句的配置信息之前,还用于:基于所述操作语句的类型、以及所述操作语句对应的变量,从所述操作语句中,确定对预设存储空间进行重复访存的待删除操作语句;从所述操作语句中删除所述待删除操作语句,得到所述目标操作语句。
114.一种可选的实施方式中,所述操作语句的类型包括:变量存储、以及变量读取;所述第一生成模块52在基于所述操作语句的类型、以及所述操作语句对应的变量,从所述操作语句中,确定对预设存储空间进行重复访存的待删除操作语句时,用于:针对每个类型为变量存储的第一操作语句,基于所述第一操作语句对应的变量,确定是否存在与所述第一操作语句对应的变量为同一变量、且类型为变量读取的第二操作语句;其中,所述第一操作语句和所述第二操作语句分别属于相邻的不同网络层;若存在,则将所述第一操作语句与对应的第二操作语句确定为所述待删除操作语句。
115.一种可选的实施方式中,所述变量包括:各个网络层分别对应的输入变量、输出变量、以及中间变量;所述第一生成模块52在基于所述目标操作语句对应变量的变量定义语句,为所述目标操作语句对应的变量分配对应的目标存储地址时,用于:响应于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为输入变量,为所述目标操作语句对应的变量分配内存、以及高速缓存中的存储地址;响应于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为输出变量,为所述目标操作语句对应的变量分配内存、以及高速缓存中的存储地址;响应于所述目标操作语句对应变量的变量定义语句指示所述目标操作语句对应变量为中间变量,为所述目标操作语句对应的变量分配高速缓存中的存储地址。
116.一种可选的实施方式中,所述第二生成模块53在基于所述操作语句对人工智能ai加速芯片的指令封装关系、以及所述配置信息,生成所述数据处理芯片在运行所述目标神
经网络时的机器指令之前,还用于:针对每条操作语句,根据所述每条操作语句和其他操作语句之间的关联关系,为所述每条操作语句添加等待信息;所述等待信息用于指示所述每条操作指令的执行顺序。
117.一种可选的实施方式中,所述第二生成模块53在针对每条操作语句,根据所述每条操作语句和其他操作语句之间的关联关系,为所述每条操作语句添加等待信息之后,还用于:基于操作语句、以及为所述操作语句添加的等待信息,生成第一调试信息;所述第一调试信息用于对所述目标神经网络的原始程序进行调试。
118.一种可选的实施方式中,所述第一生成模块52在基于所述内部数据结构,生成所述操作语句的配置信息之后,还用于:基于所述操作语句、以及所述操作语句对应的所述配置信息,生成第二调试信息;所述第二调试信息用于对所述目标神经网络的原始程序进行调试。
119.一种可选的实施方式中,所述编译装置还包括处理模块54,用于:响应于对多所述ai加速芯片的多条机器指令的封装操作,生成与所述封装操作对应的操作语句;建立所述操作语句与所述目标高级语言之间的转换关系。
120.关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
121.本公开实施例还提供了一种计算机设备,如图6所示,为本公开实施例提供的计算机设备结构示意图,包括:
122.处理器10和存储器20;所述存储器20存储有处理器10可执行的机器可读指令,处理器10用于执行存储器20中存储的机器可读指令,所述机器可读指令被处理器10执行时,处理器10执行下述步骤:
123.对中间程序进行解析,得到所述中间程序的内部数据结构;所述内部数据结构包括对象以及对象之间的关联关系;所述对象包括:操作语句、以及与所述操作语句对应的变量和变量定义语句;其中,所述中间程序是利用预设中间语言和目标高级语言之间的转换关系信息,将基于目标高级语言编写的目标神经网络的原始程序转换为预设中间语言编写的程序;基于所述内部数据结构,生成所述操作语句的配置信息;基于所述操作语句对数据处理芯片的指令封装关系、以及所述配置信息,生成所述数据处理芯片在运行所述目标神经网络时的机器指令。
124.上述存储器20包括内存210和外部存储器220;这里的内存210也称内存储器,用于暂时存放处理器10中的运算数据,以及与硬盘等外部存储器220交换的数据,处理器10通过内存210与外部存储器220进行数据交换。
125.上述指令的具体执行过程可以参考本公开实施例中所述的神经网络的编译方法的步骤,此处不再赘述。
126.本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的神经网络的编译方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
127.本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的神经网络的编译方法的步骤,具体可参见上述方法实施例,在此不再赘述。
128.其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(software development kit,sdk)等等。
129.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
130.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
131.另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
132.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
133.最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1