自定义算子的计算方法及相关产品
技术领域
本申请涉及神经网络领域,尤其涉及一种自定义算子的计算方法及相关产品。
背景技术
人工神经网络(Artificial Neural Network,即ANN),是20世纪80年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。现有的神经网络的运算基于算子来实现,现有的芯片提供商会定义一些常用的算子给用户选用,为了跟用户提醒个性化配置,神经网络也支持用户自定义算子,现有的神经网络在计算用户自定义算子时,需要探知(即解析)该自定义算子,影响用户的体验度。
发明内容
本申请实施例提供了一种自定义算子的计算方法及相关产品,可以在不探知用户自定义算子的情况下实现自定义算子的计算,提高了用户体验度。
第一方面,提供一种自定义算子的计算方法,所述方法包括如下步骤:
多核处理器对神经网络进行扫描获取自定义算子,所述自定义算子包括:指令头和指令段;
多核处理器获取神经网络的运行核数量n,将所述自定义算子对应的网络层L复制n个,将n个网络层L并行插入到所述神经网络得到新神经网络;
多核处理器运行所述新神经网络。
第二方面,提供一种多核处理器,所述多核处理器包括:
扫描单元,用于对神经网络进行扫描获取自定义算子,所述自定义算子包括:指令头和指令段;
获取单元,用于神经网络的运行核数量n;
构建单元,用于将所述自定义算子对应的网络层L复制n个,将n个网络层L并行插入到所述神经网络得到新神经网络;
运行单元,用于运行所述新神经网络。
第三方面,提供一种计算芯片,所述计算芯片包括:如第二方面提供的多核处理器。
第四方面,提供一种电子设备,所述电子设备包括第三方面提供的芯片或第二方面提供的多核处理器。
第五方面,提供一种计算机可读存储介质,存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行第一方面提供的方法。
第六方面,提供一种计算机程序产品,其中,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行第一方面提供的方法。
附图说明
图1是一种神经网络的多层结构示意图。
图2是一种自定义算子的计算方法的流程示意图。
图3是一种新神经网络的多层结构示意图。
图4是一种多核处理器的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参阅图1,图1为一种神经网络的多层结构示意图,如图1所示,神经网络可以包括多层网络层,每个网络层可以包含算子,该算子具体可以为,一种执行操作,该执行操作在一个可选的实施例中,可以为一个具体的运算,例如加、减、乘、除等等运算,也可以为最大值、平均值等等的运算。当然该执行操做在另一个可选的实施例中,还可以为一种数学模型,例如循环运算模型,又如LSTM(Long Short-Term Memory,长短期记忆网络)模型等等。本申请对算子的具体方式并不限定。依据算子的定义方可以分为,厂家定义的算子和用户自定义算子,厂家定义的算子一般为固定算子,即由芯片厂家定义的算子,另一种用户自定义算子由使用芯片的用户自行定义,一般称为自动以算子。如图1所示,神经网络的运算会执行多层的运算,其运算量比较大,为了缩短计算时间,神经网络通常在多核处理器内并行的运行,神经网络在多核处理器并行的运行时,如遇到自定义算子,该自定义算子将无法在多核处理器并行的运行,这样影响了运行的效率,增加了功耗。
参阅图2,图2提供了一种自定义算子的计算方法,该方法在多核处理器内实现,该多核处理器可以为通用的处理器,例如中央处理器CPU,也可以为图形处理器GPU,当然其还可以为专用神经网络处理器,例如人工智能处理器等等,本申请对处理器的种类并不限定,只需该处理具有多核即可。该方法如图2所示,需要说明的是,下述步骤的标号仅仅为了描述的方便进行了编号,并不表示其包括如下步骤:
步骤S201、多核处理器对神经网络进行扫描获取自定义算子,所述自定义算子包括:指令头和指令段;
上述步骤S201的实现方法具体可以包括:
多核处理器对神经网络扫描得到神经网络的多个算子对应的多个指令头,依据多个指令头内的标识信息确定多个算子中的自定义算子。
每个算子均对应有指令头和指令段,对于不同的算子具有不同的指令头。例如,对于自定义算子的指令头内的标识信息可以单独分配一个特殊的字符,例如多个连续的1或0等等,当然也可以是其他的能够识别的特殊字符。当然,上述自动以算子的指令头内的标识信息也可以是用户任意编写的,当为用户任意编写的指令头的标识信息时,将任意编写标识信息与预设的固定指令的指令头标识信息列表比对确定该任意编写标识信息不存在于该指令头标识信息列表时,确定该算子属于自定义算子,当然在实际应用中,还可以其他的方式,本申请并不限定上述标识信息的具体变现形式。
上述自定义算子的指令段可以为多个,例如n个指令段。
步骤S202、多核处理器获取神经网络的运行核数量n,将所述自定义算子对应的网络层L复制n个,将n个网络层L并行插入到所述神经网络得到新神经网络;
上述步骤S202中的多核处理器获取神经网络的运行核数据n的方式可以有多种,例如在一种可选的实施例中,多核处理器可以通过用户配置的离线文件来获取运行核数量n,上述离线文件可以通过一个专用接口传递给多核处理器,例如API接口,当然也可以是其他自定义的能够与多核处理器进行数据。在另一种可选的实施例中,多核处理器可以从驱动内获取运行神经网络的核数量n。当然在实际应用中,还可以采用其他的方式来获取核数量n,本申请并不限制上述核数量n的具体获取方式。
上述n为大于等于2的整数,该n的取值小于等于多核处理器的总核数。
上述步骤S202中的将n个网络层L并行插入到所述神经网络得到新神经网络具体可以包括:
如图1所示的神经网络,将n个网络层L并行排列,然后使用n个网络层L插入到神经网络中替换网络层L得到新神经网络,该新神经网络如图3所示,如图3所示,上述n个网络层L的上一层可以为网络层L-1层,上述n个网络层L的下一层可以为网络层L+1层。即如图4所示,n个网络层L的输入侧均与上一层网络层L-1连接,n个网络层L的输出侧均与下一层网络层L+1连接。
步骤S203、多核处理器运行所述新神经网络。
本申请提供的技术方案在确定用户自定义算子以及获取到神经网络所需的核数量n时,将用户自定义算子的网络层L复制n份,然后将n份网络层L插入到神经网络形成新神经网络,然后运行新神经网络,这样多核处理器在运行到用户自定义算子的网络层L时,n个核分别运行n个网络层L中的一个,这样即能够实现对用户自定义算子并行处理,提高了计算速度,提高了运行效率,提高了用户体验度。
可选的,上述步骤S203中的多核处理器运行所述新神经网络具体包括:
如运行到所述自定义算子,多核处理器中n个核分别运行n个网络层L,所述n个核分别跳转到与n个核对应的指令段,所述n个核并行执行n个核对应的指令段得到所述自定义算子的结果。
上述n个核分别跳转到与n个核对应的指令段具体可以包括:
这里以n个核中的一个核为例,该n个核中的其他核的操作与一个核的相同。一个核运行n个网络层L中的一个网络层L,读取自定义指令得到指令头以及n个指令段,读取n个指令段中的第一指令段确定是否为本核指令段,如第一指令段为本核指令段,一个核执行该第一指令段,如第一指令段为非本核指令段,一个核继续读取n个指令段的剩余指令段直至确定与一个核对应的指令段后执行该指令段。
上述确定指令段是否为本核指令段的方式具有可以包括,获取该指令段的核标识,确定该核标识是否为本核标识,如确定该核标识为本核标识,确定该指令段为本核对应的指令段,否则确定该指令段为非本核对应的指令段。
下面以一个实际的例子来说明,这里的n个核以4个核为例,该指令段可以为4个,为了方便描述,这里将4个核编号为核1、核2、核3、核4;4个核的标识分别对应标识A、标识B、标识C和标识D,4个指令段的核标识分别为;标识A、标识B、标识C和标识D;复制的4个网络层L分别为网络层L_1、网络层L_2、网络层L_3、网络层L_4其运行的方式具体可以为:
核1运行网络层L_1,读取自定义指令得到4个指令段,核1确定指令段1的标识A为本核标识,执行指令段1;核2运行网络层L_2,读取自定义指令得到4个指令段,核2确定指令段1的标识A为非本核标识,跳过指令段1,核2确定指令段2的标识B为本核标识,执行指令段2;核3运行网络层L_3,读取自定义指令得到4个指令段,核3确定指令段1的标识A为非本核标识,跳过指令段1,核3确定指令段2的标识B为非本核标识,跳过指令段2,核3确定指令段3的标识C为本核标识,执行指令段3;核4运行网络层L_4,读取自定义指令得到4个指令段,核4确定指令段1的标识A为非本核标识,跳过指令段1,核4确定指令段2的标识B为非本核标识,跳过指令段2,核4确定指令段3的标识C为非本核标识,跳过指令段3,核4确定指令段4的标识D为本核标识,执行指令段4。
可选的,上述n个核并行执行n个核对应的指令段得到所述自定义算子的结果具体包括:
所述n个核并行执行n个核对应的指令段得到n个指令段结果,依据n个指令段结果得到所述自定义算子的结果。具体可以包括:n个核并行提取对应的指令段对应的数据,n个核并行的对数据执行运算得到n个指令段结果,然后将n个指令段结果合并得到所述自定义算子的结果。上述合并的方式依据不同的运算可以采用不同的方式,例如,如该运算为卷积运算,则将n个指令段结果按输入数据分割的n个区域将n个在指令段结果拼接得到自定义算子的结果即可。当然在其他运算中,也可以采用其他的方式来实现n个指令段结果的拼接,本申请并不限定上述合并的具体方式。
参阅图4,图4提供一种多核处理器的结构框图,该多核处理器包括:
扫描单元401,用于对神经网络进行扫描获取自定义算子,所述自定义算子包括:指令头和指令段;
获取单元402,用于神经网络的运行核数量n;
构建单元403,用于将所述自定义算子对应的网络层L复制n个,将n个网络层L并行插入到所述神经网络得到新神经网络;
运行单元404,用于运行所述新神经网络。
可选的,如运行到所述自定义算子,所述运行单元,具体用于控制所述多核处理器中n个核分别运行n个网络层L,控制所述n个核跳转到与n个核对应的指令段,控制所述n个核并行执行n个核对应的指令段得到所述自定义算子的结果。
可选的,所述运行单元,具体用于控制所述n个核并行执行n个核对应的指令段得到n个指令段结果,依据n个指令段结果得到所述自定义算子的结果。
可选的,所述扫描单元,具体用于对神经网络扫描得到神经网络的多个算子对应的多个指令头,依据多个指令头内的标识信息确定多个算子中的自定义算子。
需要说明的是,上述运行单元、扫描单元的细化方案可以参见如图2所示的方法实施例的描述,这里不在赘述。
本申请还提供一种计算芯片,所述计算芯片包括:如图4所示的多核处理器。
本申请还揭露了一个电子装置,该电子装置可以为智能设备,当然还可以为专用的神经网络运算装置,其包括一个或多个在计算芯片,用于从其他处理装置中获取待运算数据和控制信息,执行指定的神经网络运算,执行结果通过I/O接口传递给外围设备。外围设备譬如摄像头,显示器,鼠标,键盘,网卡,wifi接口,服务器。当包含一个以上计算芯片时,计算芯片间可以通过特定的结构进行链接并传输数据,譬如,通过PCIE总线进行互联并传输数据,以支持更大规模的神经网络的运算。此时,可以共享同一控制系统,也可以有各自独立的控制系统;可以共享内存,也可以每个加速器有各自的内存。此外,其互联方式可以是任意互联拓扑。
该神经网络运算装置具有较高的兼容性,可通过PCIE接口与各种类型的服务器相连接。
上述电子装置包括但不限于:数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施例而已,并不用于限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。