神经网络模型的处理方法、推理方法及其装置和电子设备

文档序号:35567 发布日期:2021-09-24 浏览:13次 >En<

阅读说明:本技术 神经网络模型的处理方法、推理方法及其装置和电子设备 (Processing method and reasoning method of neural network model, device thereof and electronic equipment ) 是由 肖振鹏 万海鹏 于 2020-03-23 设计创作,主要内容包括:本申请实施例提供了一种神经网络模型的处理方法、推理方法及其装置和电子设备,能够提高对神经网络模型的处理性能。该神经网络模型的处理方法,包括:获取神经网络模型的图模型,该图模型包括多个节点,该多个节点中每个节点包括一个运算符;根据该多个节点的特性,将该多个节点划分为至少两类;根据划分结果对该多个节点进行合并,以形成至少两类子模型;对该至少两类子模型进行编译,得到至少两类可执行子程序,该至少两类可执行子程序用于运行在至少两类处理器上。采用本申请实施例的方法,通过多种类型的处理器进行神经网络处理,能够充分利用多种处理器的特性,提高对于神经网络整体的处理性能。(The embodiment of the application provides a processing method, an inference method, a device and electronic equipment of a neural network model, and can improve the processing performance of the neural network model. The processing method of the neural network model comprises the following steps: obtaining a graph model of a neural network model, wherein the graph model comprises a plurality of nodes, and each node in the plurality of nodes comprises an operator; dividing the plurality of nodes into at least two types according to the characteristics of the plurality of nodes; merging the nodes according to the division result to form at least two types of sub-models; compiling the at least two types of sub models to obtain at least two types of executable sub programs, wherein the at least two types of executable sub programs are used for running on at least two types of processors. By adopting the method of the embodiment of the application, the neural network processing is carried out through various processors, so that the characteristics of the various processors can be fully utilized, and the overall processing performance of the neural network is improved.)

神经网络模型的处理方法、推理方法及其装置和电子设备

技术领域

本申请涉及计算机

技术领域

,并且更为具体地,涉及一种神经网络模型的处理方法、推理方法及其装置和电子设备。

背景技术

近年来,深度学习(Deep Learning)已成为人工智能(Artificial Intelligence,AI)领域最热门的研究方向之一,在视觉、语音、自然语言等应用领域迅速发展,并赋能于各个行业。

目前,绝大多数从事深度学习研究与应用的研究者或者企业,都采用图形处理器(Graphics Processing Unit,GPU)进行神经网络模型的训练和推理,然而,随着神经网络模型的不断发展,GPU在性能和功耗上越来越无法满足实际需求,因此,学术界和工业界开始大力开展神经网络专用处理器,例如神经网络处理器(Neural network ProcessingUnit,NPU)或者张量处理器(Tensor Processing Unit,TPU)的研究,以期提高处理器对神经网络模型的处理性能,然而,并不是神经网络模型中所有的运算和数据都适用于通过神经网络专用处理器进行处理,在一些情况下,通过神经网络专用处理器运行神经网络模型,无法使得处理器对神经网络的处理性能达到最优。

因此,如何提高处理器对神经网络模型的处理性能,是一项亟待解决的技术问题。

发明内容

本申请实施例提供了一种神经网络模型的处理方法、推理方法及其装置和电子设备,能够提高处理器对神经网络模型的处理性能。

第一方面,提供一种神经网络模型的处理方法,包括:获取神经网络模型的图模型,该图模型包括多个节点,该多个节点中每个节点包括一个运算符;根据该多个节点的特性,将该多个节点划分为至少两类;根据划分结果对该多个节点进行合并,以形成至少两类子模型;对该至少两类子模型进行编译,得到至少两类可执行子程序,该至少两类可执行子程序用于运行在至少两类处理器上。

在本申请的方案中,根据神经网络模型的图模型中节点的特性,将图模型进行拆分成至少两类子模型,并分别对该至少两类子模型进行编译后,该至少两类子模型可以分别运行于至少两种类型的处理器中。相比于单一类型处理器进行神经网络处理,采用本申请的方法,通过多种类型的处理器进行神经网络处理,能够充分利用多种处理器中的特性,综合提高多种处理器对于神经网络整体的处理性能。

在一种可能的实施方式中,该根据该多个节点的特性,将该多个节点划分为至少两类,包括:根据该多个节点的特性,将该多个节点划分为两类,其中一类为适合运行在神经网络专用处理器上的节点,另一类为不适合运行在神经网络专用处理器上的节点。

通过本实施方式的方案,将神经网络模型的图模型的节点划分为适合运行在神经网络专用处理器上的节点,以及不适合运行在神经网络专用处理器上的节点,充分利用神经网络专用处理器的特性,仅在神经网络专用处理器上运行神经网络模型中的部分运算,而将不适合运行在神经网络专用处理器上的运算设置在其他处理器上,提高神经网络专用处理器对于神经网络模型的处理能力,进而综合提高多种处理器对于神经网络模型的处理能力。

在一种可能的实施方式中,该根据划分结果对该多个节点进行合并,以形成至少两类子模型,包括:将该多个节点中适合运行在神经网络专用处理器上的节点进行合并,以形成至少一个第一子模型;将该多个节点中不适合运行在神经网络专用处理器上的节点进行合并,以形成至少一个第二子模型;将该至少一个第一子模型和该至少一个第二子模型进行划分形成两类子模型。

在一种可能的实施方式中,该将该至少一个第一子模型和该至少一个第二子模型进行划分形成两类子模型,包括:将该至少一个第一子模型作为该两类子模型中的第一类子模型,将该至少一个第二子模型作为该两类子模型中的第二类子模型。

在一种可能的实施方式中,该将该至少一个第一子模型和该至少一个第二子模型进行划分形成两类子模型,包括:计算该至少一个第一子模型中每个第一子模型的计算量,将其中计算量最大的第一目标子模型划分为该两类子模型中的第一类子模型,将该至少一个第一子模型中除该第一目标子模型外其它第一子模型,以及该至少一个第二子模型划分为该两类子模型中的第二类子模型。

在一种可能的实施方式中,该将该至少一个第一子模型和该至少一个第二子模型进行划分形成两类子模型,包括:计算该至少一个第一子模型中每个第一子模型的计算量,将其中计算量大于预设阈值的第一目标子模型划分为该两类子模型中的第一类子模型,将该至少一个第一子模型中除该第一目标子模型外其它第一子模型,以及该至少一个第二子模型划分为该两类子模型中的第二类子模型。

在一种可能的实施方式中,该将该至少一个第一子模型和该至少一个第二子模型进行划分形成两类子模型,包括:计算该至少一个第一子模型中每个第一子模型的计算量,将其中计算量最大的第一目标子模型,以及计算量大于预设阈值的第二目标子模型划分为该两类子模型中的第一类子模型,将该至少一个第一子模型中除该第一目标子模型和该第二目标子模型外其它第一子模型,以及该至少一个第二子模型划分为该两类子模型中的第二类子模型。

通过该实施方式,将部分第一子模型划分为第二类子模型,运行于非神经网络专用处理器上。仅将运算量最大的第一子模型或者运算量大于预设阈值的第一子模型运行于神经网络专用处理器上,能够减小处理器间数据传输的时间,最大化的利用神经网络专用处理器和非神经网络专用处理器的运行资源,综合提高处理器对神经网络的处理能力。

在一种可能的实施方式中,该计算该至少一个第一子模型中每个第一子模型的计算量,包括:根据该每个第一子模型中目标节点的数量,计算该每个第一子模型的计算量,其中,该目标节点中包括计算类型的运算符。

在一种可能的实施方式中,该对该至少两类子模型进行编译,得到至少两类可执行子程序,包括:对该第一类子模型进行编译,形成第一类可执行子程序,该第一类可执行子程序用于在神经网络专用处理器上运行;对该第二类子模型进行编译,形成第二类可执行子程序,该第二类可执行子程序用于在非神经网络专用处理器上运行。

在一种可能的实施方式中,该根据该多个节点的特性,将该多个节点划分为至少两类,包括:在该多个节点上设置不同的标记以区分不同的类别;该根据划分结果对该多个节点进行合并,以形成至少两类子模型,包括:根据该多个节点上的标记,对该多个节点进行合并,以形成至少两类子模型。

在一种可能的实施方式中,该在该多个节点上设置不同的标记以区分不同的类别,包括:在该多个节点中适合运行在神经网络专用处理器上的节点上设置第一标记,在该多个节点中不适合运行在神经网络专用处理器上的节点上设置第二标记;该根据该多个节点上的标记,对该多个节点进行合并,以形成至少两类子模型,包括:将该多个节点中具有该第一标记的相邻节点进行合并,形成至少一个第一初始子模型;将该多个节点中具有该第二标记的相邻节点进行合并,以形成至少一个第二初始子模型;对该至少一个第一初始子模型和该至少一个第二初始子模型进行合并判断,形成至少一个第一子模型和至少一个第二子模型;将该至少一个第一子模型和该至少一个第二子模型进行划分形成两类子模型。

在一种可能的实施方式中,具有该第一标记的相邻节点中包括第一父节点和第一子节点,该将该多个节点中具有该第一标记的相邻节点进行合并,包括:若该第一父节点和该第一子节点相互之间形成环结构,将该第一父节点和该第一子节点进行合并;若该第一父节点和该第一子节点之间未形成环结构,将该第一父节点和该第一子节点进行合并;若该第一父节点、该第一子节点与其它节点共同形成环结构,根据预设规则将该第一父节点、该第一子节点与其它节点依次进行合并。

在一种可能的实施方式中,该至少一个第一初始子模型中的每个第一初始子模型中均未形成环结构;该至少一个第二初始子模型中的每个第二初始子模型中均未形成环结构。

在一种可能的实施方式中,该对该至少一个第一初始子模型和该至少一个第二初始子模型进行合并判断,形成至少一个第一子模型和至少一个第二子模型,包括:若该至少一个第一初始子模型中的第一特定初始子模型的输出节点为特定节点,将该第一特定初始子模型与第二特定初始子模型进行合并,该第二特定初始子模型为该第一特定初始子模型的输出节点的子节点所在的第二初始子模型,将合并后的该第一特定子模型和该第二特定子模型作为一个第二子模型;若该至少一个第二初始子模型中的第二特定初始子模型的输出节点为特定节点,将该第二特定初始子模型与第一特定初始子模型进行合并,该第一特定初始子模型为该第二特定初始子模型的输出节点的子节点所在的第一初始子模型,将合并后的该第一特定子模型和该第二特定子模型作为一个第二子模型。

在一种可能的实施方式中,该对该至少一个第一初始子模型和该至少一个第二初始子模型进行合并判断,形成至少一个第一子模型和至少一个第二子模型,还包括:若至少一个第一初始子模型中的一个第一初始子模型的输出节点为非特定节点,将该一个第一初始子模型作为一个第一子模型;若至少一个第二初始子模型中的一个第二初始子模型的输出节点为非特定节点,将该一个第二初始子模型作为一个第二子模型。

在一种可能的实施方式中,该处理方法还包括:串联该至少两类可执行子程序,形成该神经网络模型的可执行程序;建立该可执行程序与用户之间的接口;通过该接口获取数据;执行该可执行程序以对该数据进行推理,得到推理结果。

通过本实施方式的方案,用户可以直接基于特定的用户语言,将命令和数据输入至神经网络模型的可执行程序中,该可执行程序中的至少两类可执行子程序分别在不同的处理器中运行,在提高神经网络模型的处理能力的同时,可以快速的得到神经网络模型对于数据推断结果,便于用户进行操作,提高用户体验。

在一种可能的实施方式中,该可执行程序中的第一类可执行子程序运行在神经网络专用处理器上,该可执行子程序中的第二类可执行子程序运行在非神经网络专用处理器上。

在一种可能的实施方式中,该数据为图像、语音或者文字数据,该执行该可执行程序以对该数据进行推理,得到推理结果,包括:执行该可执行程序以对图像、语音或者文字数据进行目标检测,得到检测结果。

第二方面,提供一种神经网络模型的推理方法,包括:获取用户输入的数据;执行可执行程序中的至少两类可执行子程序以对该数据进行推理,得到推理结果;其中,该至少两类可执行子程序用于运行在至少两类处理器上,该至少两类可执行子程序是根据神经网络模型的图模型中多个节点的特性,对该多个节点进行分类和合并得到的,该神经网络模型的图模型用于处理该数据。

通过本申请的方案,用户可以直接基于特定的用户语言,将数据输入至神经网络模型的可执行程序中,该可执行程序中的至少两类可执行子程序分别在不同的处理器中运行,在提高神经网络模型的处理能力的同时,可以快速的得到神经网络模型对于数据推断结果,便于用户进行操作,提高用户体验。

在一种可能的实施方式中,该至少两类可执行子程序中的第一类可执行子程序运行在神经网络专用处理器上,该至少两类可执行子程序中的第二类可执行子程序运行在非神经网络专用处理器上。

通过本实施方式的方案,采用神经网络专用处理器执行可执行程序中的第一类可执行子程序,能够进一步提高神经网络模型的处理能力。

在一种可能的实施方式中,该第一类可执行子程序是根据该神经网络模型的图模型中第一类子模型编译得到的,该第二类可执行子程序是根据该神经网络模型的图模型中第二类子模型编译得到的;其中,该第一类子模型和该第二类子模型是对该多个节点中的两类节点分别进行合并得到的,该两类节点中第一类节点为适合在神经网络专用处理器上运行的节点,该两类节点中第二类节点为不适合在神经网络专用处理器上运行的节点。

在一种可能的实施方式中,该第一类子模型为对该第一类节点进行合并得到的;该第二类子模型为对该第二类节点进行合并得到的。

在一种可能的实施方式中,该第一类子模型为该第一类节点合并后,形成的至少一个第一子模型中计算量最大的第一目标子模型;该第二类子模型包括该至少一个第一子模型中除该第一目标子模型外的其它第一子模型,以及该第二类节点合并后,形成的至少一个第二子模型。

在一种可能的实施方式中,该第一类子模型包括该第一类节点合并后,形成的至少一个第一子模型中计算量大于预设阈值的第一目标子模型;该第二类子模型包括该至少一个第一子模型中除该第一目标子模型外的其它第一子模型,以及该第二类节点合并后,形成的至少一个第二子模型。

在一种可能的实施方式中,该第一类子模型包括该第一类节点合并后,形成的至少一个第一子模型中计算量最大的第一目标子模型,以及计算量大于预设阈值的第二目标子模型;该第二类子模型包括该至少一个第一子模型中除该第一目标子模型和该第二目标子模型外的其它第一子模型,以及该第二类节点合并后,形成的至少一个第二子模型。

在一种可能的实施方式中,该至少一个第一子模型中每个第一子模型的计算量与每个第一子模型中目标节点的数量成正比,其中,该目标节点中包括计算类型的运算符。

在一种可能的实施方式中,该可执行程序为根据该图模型的拓扑结构,串联该至少两类可执行子程序中的每个可执行子程序得到的。

在一种可能的实施方式中,该数据为图像、语音或者文字数据,该对该数据进行推理,得到推理结果,包括:对图像、语音或者文字数据进行目标检测,得到检测结果。

第三方面,提供一种神经网络模型的处理装置,包括:第一获取单元,用于获取神经网络模型的图模型,所述图模型包括多个节点,所述多个节点中每个节点包括一个运算符;第一处理单元,用于根据所述多个节点的特性,将所述多个节点划分为至少两类;根据划分结果对所述多个节点进行合并,以形成至少两类子模型;对所述至少两类子模型进行编译,得到至少两类可执行子程序,所述至少两类可执行子程序用于运行在至少两类处理器上。

第四方面,提供一种神经网络模型的推理装置,包括:获取单元,用于获取用户输入的数据;至少两个处理单元,用于分别执行可执行程序中的至少两类可执行子程序以对所述数据进行推理,得到推理结果;其中,所述至少两个处理单元为至少两类处理器中的处理单元,所述至少两类可执行子程序是根据神经网络模型的图模型中多个节点的特性,对所述多个节点进行分类和合并得到的,所述神经网络模型的图模型用于处理所述数据。

第五方面,提供一种电子设备,包括处理器和存储器,该存储器用于存储程序代码,该处理器用于调用该程序代码,执行第一方面或者第一方面中任一种可能的实施方式中的神经网络模型的处理方法。

第六方面,提供一种电子设备,包括处理器和存储器,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,执行第二方面或者第二方面中任一种可能的实施方式中的神经网络模型的推理方法。

第七方面,提供一种计算机可读存储介质,用于存储程序代码,该程序代码用于执行第一方面或者第一方面中任一种可能的实施方式中的神经网络模型的处理方法。

第八方面,提供一种计算机可读存储介质,用于存储程序代码,所述程序代码用于执行第二方面或者第二方面中任一种可能的实施方式中神经网络模型的推理方法。

附图说明

图1是根据本申请实施例的一种基于深度学习的人工智能技术架构的示意图;

图2是根据本申请实施例的一种神经网络模型的处理系统的示意图;

图3是根据本申请实施例的另一神经网络模型的处理系统的示意图;

图4是根据本申请实施例的一种神经网络模型的处理方法的示意性流程图;

图5是根据本申请实施例的一种神经网络模型的图模型的结构示意图;

图6是根据本申请实施例的另一神经网络模型的处理方法的示意性流程图;

图7和图8是根据本申请实施例的一种神经网络模型的图模型经过节点划分以及节点合并后的示意结构图;

图9至图11是根据本申请实施例的几种父节点和子节点组合的情况;

图12和图13是根据本申请实施例的初始子模型合并形成子模型的两种示意图;

图14是根据本申请实施例的另一神经网络模型的处理方法的示意性流程图;

图15是根据本申请实施例的一种神经网络模型的推理方法的示意性流程图;

图16是根据本申请实施例的另一神经网络模型的推理方法的示意性流程图;

图17是根据本申请实施例的一种神经网络模型的处理装置的示意性框图;

图18是根据本申请实施例的一种神经网络模型的推理装置的示意性框图。

具体实施方式

下面将结合附图,对本申请实施例中的技术方案进行描述。

为了便于理解,下面先对本申请实施例涉及的深度学习、神经网络模型及相关术语等相关概念进行介绍。

深度学习也被称为深度神经网络(Deep Neural Network,DNN),本质上是多层次的人工神经网络(Artificial Neural Network,ANN)算法,即从结构上模拟人脑的运行机制,从最基本的单元上模拟人类大脑的运行机制。深度学习分为训练(training)和推断(inference)两个环节。训练需要海量数据输入,训练出一个复杂的深度神经网络模型。推断指利用训练好的模型,使用待判断的数据去“推断”得出各种结论。

图1示出了一种基于深度学习的人工智能技术架构的示意图。

如图1所示,基于深度学习的人工智能算法主要依托于计算机技术体系架构实现,该体系架构包括硬件层(Hardware)、神经网络模型编译器(Compiler)、软件框架(SoftwareFramework)、以及最上层的基础应用(Application)。

具体地,硬件层为算法提供了基础计算能力。硬件层涵盖范围除了中央处理器(Central Processing Unit,CPU)及GPU外,还包括为特定场景应用而定制的计算芯片,例如应用型专用集成电路(Application Specific Integrated Circuit,ASIC)芯片、现场可编程门阵列(Field Programmable Gate Array,FPGA)芯片等等。可选地,硬件层除了上述几种芯片外,还可以包括神经网络处理器NPU、张量处理器TPU、深度学习处理器(Deeplearning Processing,DPU)等等可以用于处理神经网络的计算芯片。可选地,除了计算芯片外,硬件层还包括基于计算芯片所定制的服务器,GPU服务器集群,或者各类移动终端设备以及计算机等等。

位于硬件层上方的神经网络模型编译器为底层硬件和软件框架、以及不同软件框架之间的桥梁。该神经网络模型编译器旨在为上层应用提供硬件调用接口,解决不同上层应用在使用不同底层硬件计算芯片时可能存在的不兼容等问题。其涵盖范围包括针对人工智能计算芯片定向优化的深度神经网络模型编译器,以及针对不同神经网络模型表示的规定及格式。如图1所示,神经网络模型编译器为以底层语言虚拟机(Low Level VirtualMachine,LLVM)为基础框架创建的编译器,图1中示出了多种现有的神经网络编译器,例如,nGraph编译器,NNVM/TVM编译器,ONNX编译器,NNEF编译器等等。

在神经网络模型编译器的上层,将深度学习算法(神经网络模型)封装至软件框架中,并将海量的数据集、训练策略也输入至该软件框架中,进行神经网络模型中参数的训练,得到训练之后的神经网络模型,可以用于对未知的数据属性进行预测。如图1所示,目前主流的软件框架包括但不限于TensorFlow,MXNet,Caffe或者Pytorch等等用于进行深度学习的软件框架。

目前,当前人工智能的商业化实现主要是基于计算机视觉、智能语音、自然语言处理等基础应用技术实现,并形成了相应的产品或服务,不同的应用需求通过软件框架进行实现,并进一步通过下层的神经网络模型编译器以及硬件层进行数据运算和处理。

在一般情况下,在上述图1的深度学习的架构中,对于一种特定的基础应用,硬件层中用于处理神经网络的处理器芯片为CPU,GPU,ASIC或者NPU中的一种,而不会同时采用多种硬件芯片用于处理同一个神经网络模型。因此,对应于硬件层中的芯片类型,神经网络模型编译器通常也为单一的编译器类型,适配于硬件层中的芯片。此外,除了硬件芯片和编译器外,可以择一选用图1中的任意一种软件框架对神经网络模型,或者说对深度学习算法进行封装、训练和推断。

在硬件层中,通常采用NPU、TPU等神经网络专用处理器处理神经网络模型,以提高神经网络模型的处理效率和处理性能,然而,神经网络模型具有多种不同的神经网络模型架构,例如,深度神经网络(Deep Neural Network,DNN),卷积神经网络(ConvolutionalNeuron Network,CNN),循环神经网络(Recurrent Neural Networks,RNN)或者图神经网络等等。不同的神经网络模型具有不同的模型架构以及运算方法,因此,并不是所有的神经网络模型均可以适用于神经网络专用处理器。

且不论哪一种神经网络模型,其中均包括不同类型的,或简单或复杂的多种运算处理,也并不是所有的运算和数据都适用于通过神经网络专用处理器进行处理。若仅仅使用神经网络专用处理器或者仅仅使用其它单一类型的处理器进行神经网络的运算和处理,无法使得神经网络的处理性能达到最优。

基于上述问题,本申请提出一种神经网络模型的处理方法、装置和电子设备,对软件框架中的神经网络模型进行拆分,形成多个子模型,分别对该多个子模型进行编译后,该多个子模型可以分别运行于CPU、神经网络专用处理器芯片或者其它处理器芯片中,提高神经网络整体的处理性能。

为了更好地理解本申请实施例的方案,下面先结合图2至图3对本申请实施例可能的应用场景进行简单的介绍。

图2示出了一种神经网络模型的处理系统,该神经网络模型的处理系统包括用户设备以及数据处理设备。其中,用户设备包括手机、个人电脑或者信息处理中心等智能终端。用户设备为数据处理的发起端,作为应用需求,例如语音识别、图像识别等请求的发起方,通常用户通过用户设备发起请求。

上述数据处理设备可以是云服务器、网络服务器、应用服务器以及管理服务器等具有数据处理功能的设备或服务器。数据处理设备通过交互接口接收来自智能终端的语音、文本或者图像等数据,再通过存储数据的存储器以及数据处理的处理器环节进行机器学习,深度学习等方式的数据处理。数据处理设备中的存储器可以是一个统称,包括本地存储以及存储历史数据的数据库,数据库可以在数据处理设备上,也可以在其它网络服务器上。

在图2所示的神经网络模型的处理系统中,用户设备可以接收用户的指令,例如用户设备中的摄像头可以拍摄得到一段视频文件,然后向数据处理设备发起请求,使得数据处理设备针对用户设备得到的该一段视频文件,通过神经网络模型算法对视频文件中的图像帧进行图像识别或者目标检测等等处理,从而得到针对目标检测结果(例如人脸识别等等)。

在图2中,数据处理设备可以执行本申请的神经网络模型的处理方法。

图3示出了另一种神经网络模型的处理系统,在图3中,用户设备直接作为数据处理设备,该用户设备能够直接接收来自用户的输入并直接由用户设备本身的硬件进行处理,具体过程与图2相似,可参考上面的描述,在此不再赘述。

在图3中,用户设备自身就可以执行本申请的神经网络模型的处理方法。

图2和图3中的处理器可以通过神经网络模型或者其它模型(例如,基于支持向量机的模型)进行数据训练/机器学习/深度学习,并利用数据最终训练或者学习得到的模型针对语音、图像、文字等数据执行目标检测(例如图像识别、语音识别等等),从而得到相应的处理结果。

可选地,图2和图3中的处理器可以为图1中的CPU、GPU、ASIC或者FPGA中的一种或者多种。在一些实施方式中,图2和图3中的处理器可以包括CPU和TPU。

另外,此处需要说明的是,图2和图3中的处理器除了可以包括CPU和TPU以外,其中的TPU还可以为其他神经网络专用处理器,例如NPU、DPU等等,本申请实施例对具体的神经网络专用处理器的类型不做具体限定。为了将神经网络专用处理器与其他类型的处理器区分开,在本申请中,其他类型的处理器写为非神经网络专用处理器,该非神经网络专用处理器包括但不限于是通用处理器或者其他类型的专用处理器,例如CPU、GPU等等,本申请实施例对非神经网络专用处理器的类型也不做具体限定。

下面,结合图4至图14,详细描述本申请的神经网络模型的处理方法。

图4示出了一种神经网络模型的处理方法100的示意性流程图。该方法可以由处理器执行,例如,上述图2和图3中的处理器,也可以由包含处理器的处理设备执行,例如,上述图2和图3中的数据处理设备。该处理器可以是中央处理器CPU,微处理器/微控制器(Microprocessor/Micro controller Unit,MPU/MCU),应用型专用集成电路ASIC或者现场可编程门阵列FPGA等通用处理器模块。

如图4所示,该神经网络模型等处理方法100可以包括以下步骤。

S110:获取神经网络模型的图模型,该图模型包括多个节点,该多个节点中每个节点包括一个运算符。

在一些实施方式中,本步骤中的神经网络模型可以为在软件框架中训练之后的优化神经网络模型,其中的网络模型参数均通过大量的数据和训练算法优化得到,该训练之后的优化神经网络模型可以直接用于数据推理。换言之,可以直接将数据输入至优化神经网络模型中,得到推理的结果。例如,若神经网络模型用于进行目标检测,则推理的结果即为目标检测的结果。

在另一些实施方式中,本步骤中的神经网络模型也可以为初始神经网络模型,即未经过训练的神经网络模型,其中的网络模型参数为自定义的初始值或者随机值。

具体地,在软件框架中,例如,在TensorFlow软件框架中,神经网络模型被封装为一种图模型,其中,图是一种数据结构,它由一组对象(节点)及其关系(边)组成,节点(node)又可以被称之为神经元、算子或者运算符(Operator,OP),表示数据的运算方式;边也可以被称之为张量(Tensor),表示运算符之间数据的流动。

图5示出了一种神经网络模型的图模型的结构示意图。如图5所示,其中每个节点表示一种操作,对应一个运算符,每个节点都有若干输入张量和输出张量。可选地,节点的输入张量和输出张量可以定义为常量(constant),变量(variable)或者占位符(placeholder)等数据格式。在一些实施方式中,将节点的输入和输出张量定义为占位符数据格式,在神经网络模型进行推断或者训练时,将原始数据输入至占位符中,通过节点之间数据的运算和传输,输出得到经过神经网络模型训练或者推断后的数据。

S120:根据多个节点的特性,将多个节点划分为至少两类。

可选地,在一些实施方式中,可以根据神经网络模型的图模型中节点的类型,将图模型中的多个节点划分为两类,其中一类为适合在神经网络专用处理器,例如TPU或者NPU上运行的运算符,而另一类为不适合在TPU或者NPU上运行的运算符。

可选地,在另一些实施方式中,还可以基于单指令流多数据流(SingleInstruction Multiple Data,SIMD)技术,将图模型中的节点划分为两类,同一时刻执行相同操作的节点为适合在TPU或者NPU上运行的节点,而其它不符合该特征的节点为不适合在TPU或者NPU上运行的节点。

应理解,除了可以将多个节点划分为两类外,还可以将多个节点划分为多类,该多类节点分别运行在不同的处理器上。例如,划分后,一类节点为适合在TPU上运行的节点,一类节点为适合在GPU上运行的节点,另一类节点为在CPU上运行的节点。本申请实施例对具体的划分种类不做具体限定。

还应理解,除了上述方式以外,还可以采用现有技术中其它判断标准,将神经网络模型的图模型中的节点进行划分,本申请实施例对具体的划分规则和方法不做具体限定。

此外,在本申请实施例中,在将多个节点划分为至少两类时,还可以在多个节点上设置不同的标记以区分不同的类别,该标记可以为字母、数字、符号或者其组合,或者其他任意形式的不同标记,本申请实施例对此也不做具体限定。

S130:根据划分结果对多个节点进行合并,以形成至少两类子模型。

可选地,节点划分后,根据划分结果,将同一类型的节点中相邻的节点进行合并,形成一个合并的新节点,该节点的合并也可以理解为运算符的合并。为了将合并后的新节点与合并前的节点区分,合并后的新节点我们也称之为子模型,一个子模型中包括至少一个节点,同样具有输入输出的张量。

在一些实施方式中,将多个节点划分为适合在神经网络专用处理器运行和不适合在神经网络专用处理器运行两类后,将适合在神经网络专用处理器上运行的节点进行合并,以形成一类子模型,将不适合在神经网络专用处理器上运行的节点进行合并,以形成另一类子模型。

当然,除了上述实施方式以外,若将多个节点划分为适合在多类处理器上运行的多类节点后,还可以将每一类节点进行合并,形成多类子模型。

可选地,若不同类别的节点上设置有不同的标记,则根据节点上的标记对多个节点进行合并,以形成至少两类子模型。

在本申请实施例中,在合并形成至少两类子模型的同时,还形成有多个子模型之间的拓扑关系,以及子模型之间相互交互的张量的相关信息。

S140:对至少两类子模型进行编译,得到至少两类可执行子程序,该至少两类可执行子程序分别运行于至少两类处理器上。

具体地,在本步骤中,采用至少两种编译器对至少两类子模型进行编译,得到至少两类可执行程序,其中,一种编译器对应于一类处理器,用于对一类子模型进行编译,得到一类可以运行在该处理器上的可执行程序。例如,CPU编译器对子模型进行编译后,得到的可执行程序可以运行在CPU上,TPU编译器对子模型进行编译后,得到的可执行程序可以运行在TPU上。

应理解,在本步骤中,编译器对子模型的编译过程与现有技术中的编译过程相同,本领域技术人员可以参见现有技术中的编译过程实现本步骤,此处不再赘述。

在本申请实施例的方案中,根据神经网络模型的图模型中节点的特性,将图模型进行拆分成至少两类子模型,并分别对该至少两类子模型进行编译后,该至少两类子模型可以分别运行于CPU、神经网络专用处理器或者其它处理器中。相比于单一类型处理器进行神经网络处理,采用本申请实施例的方法,通过多种类型处理器进行神经网络处理,能够充分利用多种处理器的特性以及其中的资源,综合提高多种处理器对神经网络整体的处理性能。

下文中,以对图模型进行处理形成两类子模型为例进行说明,形成多类子模型的相关方法可以参见下文相关描述,此处不再赘述。

图6示出了另一种神经网络模型的处理方法100的示意性流程图。

如图6所示,该神经网络模型的处理方法100可以包括:

S110:获取神经网络模型的图模型。

S121:根据多个节点是否适合运行在神经网络专用处理器上,将多个节点划分为两类。

该步骤可以为上述步骤S120的一种实施方式。

具体地,将多个节点中适合运行在神经网络专用处理器上的节点划分为第一类节点,将多个节点中不适合运行在神经网络专用处理器上的节点划分为第二类节点。

可选地,在对多个节点进行划分的过程中,可以对多个节点中的每个节点进行标记,形成两种类型的标签(tag),例如,对于适合在神经网络专用处理器上运行的节点标记为第一标记,例如support,对于不适合在神经网络专用处理器上运行的节点标记为第二标记,例如unsupport。当然,第一标记和第二标记的内容还可以为其它任意用于区分两类节点的字符、数字或者字母,本申请实施例对此不做具体限定。

S131:将多个节点中适合运行在神经网络专用处理器上的节点进行合并,形成至少一个第一初始子模型;将多个节点中不适合运行在神经网络专用处理器上的节点进行合并,形成至少一个初始第二子模型。

该步骤S131至下述步骤S133可以为上述步骤S130的一种实施方式。

可选地,将多个节点中具有第一标记的相邻节点进行合并,形成至少一个第一初始子模型;将多个节点中具有所述第二标记的相邻节点进行合并,以形成至少一个第二初始子模型。

可选地,合并形成初始子模型后,还需要记录至少一个第一初始子模型和至少一个第二初始子模型之间的拓扑关系和初始子模型之间交互的张量的相关信息。

例如,图7和图8示出了一种神经网络模型的图模型经过节点划分以及节点合并后的示意结构图。

如图7所示,该图模型包括A至G七个节点,经过节点划分判断后,除了D节点外,其它六个节点均为适合在神经网络专用处理器上运行,将D节点标记为unsupport,将其他六个节点标记为support。将具有相同标记的相邻节点进行合并,形成了如图8所示的3个初始子模型,其中,A、B、C节点形成初始子模型1,D节点形成初始子模型2,E、F、G节点形成初始子模型3。子模型1和子模型3均为第一初始子模型,而子模型2为第二初始子模型。

可选地,将图模型划分为三个初始子模型后,记录三个初始子模型之间的拓扑关系,以及三个初始子模型之间交互的张量的相关信息,例如,B节点和C节点的输出张量均作为D节点的输入,D节点的输出同时作为E节点和F节点的输入。

此外,在对相同标记的节点进行合并的过程中,还需要注意合并后第一初始子模型和第二初始子模型中不能形成“环结构”。因此,下面将结合图9至图11说明本申请实施例中节点合并的过程。

具体地,在图模型中,相邻的两个节点可以称之为父节点和子节点,其中,父节点的输出作为子节点的输入。具有相邻标记的父节点和子节点可以进行合并,例如,具有第一标记的第一父节点和第一子节点可以进行合并,同样的,具有第二标记的第二父节点和第二子节点也可以进行合并。

图9至图11示出了几种父节点和子节点组合的情况,图9至图11中,A节点的输出为B节点的输入,此时,可以将A节点称为B节点的父节点,B节点为A节点的子节点,A节点和B节点均具有相同的标记。

如图9所示的情况,A节点和B节点之间直接形成一个“环结构”,在做其它节点的合并之前,先将形成环结构的节点进行合并,即合并A节点和B节点,形成一个初始子模型。

如图10中的几种情况所示,A节点输出的数据可以直接到达B节点,不会经过其它节点,A节点和B节点之间不会产生“环结构”,因此,A节点和B节点可以直接进行合并,形成一个初始子模型。

如图11中的几种情况所示,A节点输出的数据除了可以直接到达B节点以外,A节点输出的数据还会经过其它节点,A节点、B节点以及其它节点形成“环结构”,例如,如图11中的上图所示,A节点与B节点连接,且A节点还经过C节点连接至B节点,在此情况下,不能直接将A节点和B节点进行合并,需要先将A节点和C节点进行合并,然后将合并后的AC节点再与B节点进行合并。或者先将B节点和C节点进行合并,然后将合并后的BC节点与A节点进行合并,形成一个初始子模型。

S132:对该至少一个第一初始子模型和至少一个第二初始子模型进行合并判断,形成至少一个第一子模型和至少一个第二子模型。

具体地,在一些实施例中,若至少一个第一初始子模型中的第一特定初始子模型的输出节点为特定节点,将该第一特定初始子模型与第二特定初始子模型进行合并,该第二特定初始子模型为第一特定初始子模型的输出节点的子节点所在的初始子模型;

若第二特定初始子模型为第二初始子模型,将合并后的第一特定子模型和第二特定子模型作为一个第二子模型。

类似地,在另一些实施例中,若至少一个第二初始子模型中的第二特定初始子模型的输出节点为特定节点,将该第二特定初始子模型与第一特定初始子模型进行合并,该第一特定初始子模型为第二特定初始子模型的输出节点的子节点所在的初始子模型;

若第一特定初始子模型为第一初始子模型,将合并后的第二特定子模型和第一特定子模型作为一个第二子模型。

图12和图13示出了两种情况下初始子模型合并形成子模型的示意图。

如图12和13所示,A节点和B节点合并后形成初始子模型1,C节点为初始子模型2。

若初始子模型1中的输出节点,即B节点属于特定节点,即属于不适合作为模型输出的节点,例如,该节点中包括具体特定类型的运算符和逻辑运算符等等。此时,需要将B节点的子节点所在的初始子模型与初始子模型1进行合并,形成新的子模型,防止B节点作为子模型的输出节点。即在本申请实施例中,B节点的子节点为C节点,C节点所在子模型为初始子模型2,将初始子模型2与初始子模型1进行合并,形成新的子模型。

如图12所示,初始子模型1为第一初始子模型,即节点A和节点B均为适合在神经网络专用处理器上运行的节点,初始子模型2为第二初始子模型,节点C为不适合在神经网络专用处理器上运行的节点。初始子模型1与初始子模型2进行合并后,形成一个第二子模型,运行在非神经网络专用处理器上。

如图13所示,初始子模型1为第二初始子模型,即节点A和节点B均为不适合在神经网络专用处理器上运行的节点,初始子模型2为第一初始子模型,节点C为适合在神经网络专用处理器上运行的节点。初始子模型1与初始子模型2进行合并后,同样形成一个第二子模型,运行在非神经网络专用处理器上。

上述图12和图13示出了初始子模型中包括特定节点的情况,应当理解的是,若第一初始子模型的输出节点为非特定节点,即该第一初始子模型的输出节点为适合作为输出的节点,则将该第一初始子模型作为一个第一子模型;同样的,若第二初始子模型的输出节点为非特定节点,将该第二初始子模型作为一个第二子模型。

可选地,在此步骤中,需要根据更新记录至少一个第一子模型和至少一个第二子模型之间的拓扑关系和子模型之间交互的张量的相关信息。

S133:将至少一个第一子模型和至少一个第二子模型进行划分形成两类子模型。

作为一种可能的实施方式,S1331:将上述至少一个第一子模型作为第一类子模型,将上述至少一个第二子模型作为第二类子模型。

作为另一种可能的实施方式,S1332:计算至少一个第一子模型中每个第一子模型的计算量,将其中计算量最大的第一目标子模型划分为两类子模型中的第一类子模型,将至少一个第一子模型中除第一目标子模型外其它第一子模型,以及至少一个第二子模型划分为两类子模型中的第二类子模型。

作为第三种可能的实施方式,S1333:计算至少一个第一子模型中每个第一子模型的计算量,将其中计算量大于预设阈值的第一目标子模型划分为两类子模型中的第一类子模型,将至少一个第一子模型中除第一目标子模型外其它第一子模型,以及至少一个第二子模型划分为两类子模型中的第二类子模型。

作为第四种可能的实施方式,S1334:计算至少一个第一子模型中每个第一子模型的计算量,将其中计算量最大的第一目标子模型,以及除第一目标子模型外计算量大于预设阈值的第二目标子模型划分为两类子模型中的第一类子模型,将至少一个第一子模型中除第一目标子模型和第二目标子模型外其它第一子模型,以及至少一个第二子模型划分为两类子模型中的第二类子模型。

在上述计算每个第一子模型的计算量的过程中,可以统计第一子模型中包括计算类型运算符的节点的数量,例如,卷积、加、减等等运算符均属于计算类型的运算符,可以将包括该运算类型的运算符的节点称之为目标节点,第一子模型中目标节点的数量越多,则该第一子模型的计算量越大。

上述步骤S1333和步骤S1334中的预设阈值可以代表第一子模型中目标节点的预设数量。

可选地,在上述步骤S121中,在对图模型中的多个节点进行划分和标记时,还可以进一步在适合在神经网络专用处理器上运行的第一类节点上标记该节点是否为目标节点,例如,在目标节点上标记computing表示该目标节点包括计算类型的运算符,且目标节点上还标记有第一标记,例如support。

则在本步骤中,可以直接根据标记,从而快速计算至少一个第一子模型中每个第一子模型的计算量。

在上述步骤S1332、S1333和步骤S1334中,部分第一子模型划分为第二类子模型,运行于非神经网络专用处理器上。仅将运算量最大的第一子模型或者运算量大于预设阈值的第一子模型运行于神经网络专用处理器上,能够减小处理器间数据传输的时间,最大化的利用神经网络专用处理器和非神经网络专用处理器的运行资源,综合提高神经网络的处理能力。

此外,在上述情况下,还可以进一步权衡该部分第一子模型的计算量和数据传输的时间消耗,若该部分子模型在非神经网络专用处理器上运行,则运行速度较慢,但没有数据传输的时间消耗,若该部分子模型在神经网络专用处理器上运行,则运行速度较快,但额外增加了数据传输的时间消耗。在综合考虑计算量和数据传输时间的基础上,确定该部分第一子模型运行于非神经网络专用处理器或者是神经网络专用处理器。

可选地,除了上述实施方式以外,还可以省略步骤S132,将上述至少一个第一初始子模型作为第一类子模型,将上述至少一个第二初始子模型作为第二类子模型。

S141:对两类子模型进行编译,得到两类可执行子程序,该两类可执行子程序分别运行于两类处理器上。

该步骤可以为上述步骤S140的一种实施方式。

具体地,对于第一类子模型,采用第一编译器进行编译,得到可以在神经网络专用处理器上运行的第一类可执行子程序,对于第二类子模型,采用第二编译器进行编译,得到可以在非神经网络专用处理器上运行的第二类可执行子程序。

例如,第一类子模型为适合在TPU上运行的子模型,第二类子模型为不适合在TPU上运行的子模型。第一类子模型在TPU编译器上进行编译,得到可以在TPU上运行的第一类可执行子程序。而不适合在TPU上运行的第二类子模型可以在CPU或者其它处理器芯片中进行运行,例如,第二类子模型可以在CPU编译上进行编译,得到可以在CPU上运行的第二类可执行子程序。

应理解,第二类子模型除了可以在CPU编译器上进行编译外,还可以在GPU、ASIC或者FPGA等其它处理器芯片的编译器上进行编译,本申请实施例对具体的编译器类型不做具体限定。

图14示出了另一种神经网络模型的处理方法100的示意性流程图。

如图14所示,该神经网络模型等处理方法100还可以包括以下步骤。

S150:串联至少两类可执行子程序,形成神经网络模型的可执行程序。

具体地,在步骤130中,在合并形成至少两类子模型的同时,还形成有多个子模型之间的拓扑关系,以及子模型之间相互交互的张量的相关信息。在本步骤中,通过该多个子模型的拓扑关系以及交互的张量的信息,将多个子模型对应的可执行程序的输入输出进行串联,形成神经网络模型的可执行程序。

在一种实施方式中,例如在上述步骤S132中,记录了至少一个第一子模型和至少一个第二子模型之间的拓扑关系和子模型之间交互的张量的相关信息。在本步骤中,根据该拓扑关系和相关信息,得到第一类可执行子程序和第二类可执行子程序之间的连接关系,以串联第一类可执行子程序和第二类可执行子程序中的每个可执行子程序,形成神经网络模型的可执行程序。

S160:建立该可执行程序与用户之间的接口。

具体地,建立神经网络模型的可执行程序与用户之间的输入输出的接口,即建立基于特定编程语言,例如C、C++、python等编程语言的输入输出接口。用户通过特定编程语言将数据和命令输入,则可以直接运行该可执行程序,而不需要再基于软件框架,将数据和命令输入至软件框架中,并再依次经过编译器形成可执行程序,使得数据的处理过程更为高效。

S170:通过接口获取数据,执行该可执行程序以对数据进行推理,得到推理结果。

具体地,在本步骤中,用户通过上述接口输入数据,该可执行程序中的至少两类可执行子程序分别在其对应的至少两类处理器上运行,以对数据进行运算推理,实现神经网络对于数据的推理功能。

在一些实施方式中,可执行程序中包括第一类可执行子程序和第二类可执行子程序,其中,神经网络专用处理器执行第一类可执行子程序,非神经网络专用处理器执行第二类可执行子程序,神经网络专用处理器和非神经网络专用处理器直接对用户输入的数据进行处理。

可选地,用户输入的数据可以为文字、语音或者图像等任意类型的数据,在本申请实施例中,神经网络模型对于数据的推断过程可以为对文字、语音或者图像等进行目标检测的过程,例如,检测目标文字、目标语音或者目标图像,得到目标检测的结果。

采用本申请实施例的方案,用户可以直接基于特定的用户语言,将命令和数据输入至神经网络模型的可执行程序中,该可执行程序中的至少两类可执行子程序分别在不同的处理器中运行,在提高神经网络模型的处理能力的同时,可以快速的得到神经网络模型对于数据推断结果,便于用户进行操作,提高用户体验。

应理解,上述神经网络模型的可执行程序除了可以用于对用户输入的数据进行推理以外,还可以对神经网络模型进行训练。此时,可执行程序中的相关参数可以为预设的初始参数,用户输入的数据为用于训练的数据集,通过运行可执行程序,可以得到训练的结果,从而不断优化可执行程序中的相关参数。

上文结合图4至图14,详细描述本申请的一种神经网络模型的处理方法。

在上述神经网络的处理方法中,包含有对神经网络模型的图模型进行划分,将划分后多个子模型分别编译形成多个可执行子程序,以及将多个可执行子程序再封装为一个可执行程序的过程。

除了该处理方法外,本申请还提供一种神经网络模型的推理方法,在该推理方法中,不包括上述划分、编译以及封装的过程,仅执行最终的可执行程。换言之,上述划分、编译以及封装的过程为本推理方法的前置过程,不体现在本推理方法中。

图15示出了一种神经网络模型的推理方法200。该推理方法200可以由处理装置执行,该处理装置包括至少两类处理器,该至少两类处理器空间上可以位于同一电子设备中,也可以位于不同的电子设备中,该至少两类处理器之间的数据传输可以通过有线传输,也可以通过无线传输。

作为示例,该处理装置可以包括上述图2和图3中的数据处理设备。该处理装置可以包括CPU,MPU/MCU,ASIC或者FPGA等通用处理器模块以及NPU、TPU或者DPU等神经网络专用处理器模块。

如图15所示,该神经网络模型的推理方法200可以包括以下步骤。

S210:接收用户输入的数据。

S220:执行可执行程序中的至少两类可执行子程序以对数据进行推理,得到推理结果。

其中,至少两类可执行子程序用于运行在至少两类处理器上,该至少两类可执行子程序是根据神经网络模型的图模型中多个节点的特性,对多个节点进行分类和合并得到的,该神经网络模型的图模型用于处理上述用户输入的数据。

可选地,该步骤S210和步骤S220可以与上述步骤S170相同。

可选地,该可执行程序为根据神经网络模型的图模型的拓扑结构,串联至少两类可执行子程序中的每个可执行子程序得到的。

具体地,可执行程序与用户之间建立有接口。用户通过特定编程语言将数据和命令输入,则可以直接运行该可执行程序中的至少两类可执行子程序,而不需要再基于软件框架,将数据和命令输入至软件框架中,并再依次经过编译器形成可执行程序,使得数据的处理过程更为高效。

通过上述接口接收用户输入的数据,该可执行程序中的至少两类可执行子程序分别在其对应的至少两类处理器上运行,以对数据进行运算推理,实现神经网络对于数据的推理功能。

可选地,用户输入的数据可以为文字、语音或者图像等任意类型的数据,在本申请实施例中,对数据的推断过程可以为对文字、语音或者图像等进行目标检测的过程,例如,检测目标文字、目标语音或者目标图像,得到目标检测的结果。

具体地,本申请实施例中的至少两类可执行子程序是根据神经网络模型的图模型中多个节点的特性,对多个节点进行分类和合并得到的,由神经网络模型转化得到的可执行子程序能够更好的执行数据的推断,得到准确的推断结果。且该至少两类可执行子程序用于分别运行在至少两类处理器上,能够充分利用处理器中的资源,提高数据处理性能。

通过本申请实施例的方案,用户可以直接基于特定的用户语言,将命令和数据输入至神经网络模型的可执行程序中,该可执行程序中的至少两类可执行子程序分别在不同的处理器中运行,在提高神经网络模型的处理能力的同时,可以快速的得到神经网络模型对于数据推断结果,便于用户进行操作,提高用户体验。

在一些实施方式中,图16示出了另一种神经网络模型的推理方法200。

如图16所示,上述步骤S220可以包括:

S221:神经网络专用处理器执行至少两类可执行子程序中的第一类可执行子程序,非神经网络专用处理器执行至少两类可执行子程序中的第二类可执行子程序,以对数据进行推理,得到推理结果。

具体地,本申请实施例中,第一类可执行子程序和第二类可执行子程序可以参见上述处理方法100中的相关描述。

在一些实施方式中,该第一类可执行子程序是根据神经网络模型的图模型中第一类子模型编译得到的,该第二类可执行子程序是根据神经网络模型的图模型中第二类子模型编译得到的;

其中,第一类子模型和第二类子模型是对神经网络模型的多个节点中的两类节点分别进行合并得到的,该两类节点中第一类节点为适合在神经网络专用处理器上运行的节点,第二类节点为不适合在神经网络专用处理器上运行的节点。

类似地,参见上述处理方法100中对于两类节点和两类子模型的描述。

在一种可能的实施方式中,第一类子模型为对第一类节点进行合并得到的,第二类子模型为对第二类节点进行合并得到的。

在另一种可能的实施方式中,第一类子模型为第一类节点合并后,形成的至少一个第一子模型中计算量最大的第一目标子模型;第二类子模型包括至少一个第一子模型中除计算量最大的第一目标子模型外的其它第一子模型,以及第二类节点合并后,形成的至少一个第二子模型。

在第三种可能的实施方式中,第一类子模型包括第一类节点合并后,形成的至少一个第一子模型中计算量大于预设阈值的第一目标子模型;第二类子模型包括至少一个第一子模型中除计算量大于预设阈值的第一目标子模型外的其它第一子模型,以及第二类节点合并后,形成的至少一个第二子模型。

在第四种可能的实施方式中,第一类子模型包括第一类节点合并后,形成的至少一个第一子模型中计算量最大的第一目标子模型,以及计算量大于预设阈值的第二目标子模型;第二类子模型包括至少一个第一子模型中除第一目标子模型和第二目标子模型外的其它第一子模型,以及第二类节点合并后,形成的至少一个第二子模型。

可选地,在上述实施方式中,至少一个第一子模型中每个第一子模型的计算量与每个第一子模型中目标节点的数量成正比,其中,该目标节点中包括计算类型的运算符。

上文结合图4至图16,详细描述了本申请的神经网络模型的处理方法以及推理方法的方法实施例,下文结合图17至图18,详细描述本申请的神经网络模型的处理装置以及推理装置的装置实施例,应理解,装置实施例与方法实施例相互对应,类似的描述可以参照方法实施例。

图17示出了一种神经网络模型的处理装置10的示意性框图。该处理装置10可以用于执行上述神经网络模型的处理方法100。

如图17所示,该神经网络模型的处理装置10包括:第一获取单元11以及第一处理单元12。

具体地,该第一获取单元11,用于获取神经网络模型的图模型,该图模型包括多个节点,多个节点中每个节点包括一个运算符;

该第一处理单元12,用于根据多个节点的特性,将多个节点划分为至少两类;根据划分结果对多个节点进行合并,以形成至少两类子模型;对至少两类子模型进行编译,得到至少两类可执行子程序,至少两类可执行子程序用于运行在至少两类处理器上。

在一种可能的实施方式中,第一处理单元12用于:根据多个节点的特性,将多个节点划分为两类,其中一类为适合运行在神经网络专用处理器上的节点,另一类为不适合运行在神经网络专用处理器上的节点。

在一种可能的实施方式中,第一处理单元12用于:将多个节点中适合运行在神经网络专用处理器上的节点进行合并,以形成至少一个第一子模型;将多个节点中不适合运行在神经网络专用处理器上的节点进行合并,以形成至少一个第二子模型;将至少一个第一子模型和至少一个第二子模型进行划分形成两类子模型。

在一种可能的实施方式中,第一处理单元12用于:将至少一个第一子模型作为两类子模型中的第一类子模型,将至少一个第二子模型作为两类子模型中的第二类子模型。

在一种可能的实施方式中,第一处理单元12用于:计算至少一个第一子模型中每个第一子模型的计算量,将其中计算量最大的第一目标子模型划分为两类子模型中的第一类子模型,将至少一个第一子模型中除第一目标子模型外其它第一子模型,以及至少一个第二子模型划分为两类子模型中的第二类子模型。

在一种可能的实施方式中,第一处理单元12用于:计算至少一个第一子模型中每个第一子模型的计算量,将其中计算量大于预设阈值的第一目标子模型划分为两类子模型中的第一类子模型,将至少一个第一子模型中除第一目标子模型外其它第一子模型,以及至少一个第二子模型划分为两类子模型中的第二类子模型。

在一种可能的实施方式中,第一处理单元12用于:计算至少一个第一子模型中每个第一子模型的计算量,将其中计算量最大的第一目标子模型,以及计算量大于预设阈值的第二目标子模型划分为两类子模型中的第一类子模型,将至少一个第一子模型中除第一目标子模型和第二目标子模型外其它第一子模型,以及至少一个第二子模型划分为两类子模型中的第二类子模型。

在一种可能的实施方式中,第一处理单元12用于:根据每个第一子模型中目标节点的数量,计算每个第一子模型的计算量,其中,目标节点中包括计算类型的运算符。

在一种可能的实施方式中,第一处理单元12用于:对第一类子模型进行编译,形成第一类可执行子程序,第一类可执行子程序用于在神经网络专用处理器上运行;对第二类子模型进行编译,形成第二类可执行子程序,第二类可执行子程序用于在非神经网络专用处理器上运行。

在一种可能的实施方式中,第一处理单元12用于:在多个节点上设置不同的标记以区分不同的类别;根据多个节点上的标记,对多个节点进行合并,以形成至少两类子模型。

在一种可能的实施方式中,第一处理单元12用于:在多个节点中适合运行在神经网络专用处理器上的节点上设置第一标记,在多个节点中不适合运行在神经网络专用处理器上的节点上设置第二标记;将多个节点中具有第一标记的相邻节点进行合并,形成至少一个第一初始子模型;将多个节点中具有第二标记的相邻节点进行合并,以形成至少一个第二初始子模型;对至少一个第一初始子模型和至少一个第二初始子模型进行合并判断,形成至少一个第一子模型和至少一个第二子模型;将至少一个第一子模型和至少一个第二子模型进行划分形成两类子模型。

在一种可能的实施方式中,具有第一标记的相邻节点中包括第一父节点和第一子节点,第一处理单元12用于:若第一父节点和第一子节点相互之间形成环结构,将第一父节点和第一子节点进行合并;若第一父节点和第一子节点之间未形成环结构,将第一父节点和第一子节点进行合并;若第一父节点、第一子节点与其它节点共同形成环结构,根据预设规则将第一父节点、第一子节点与其它节点依次进行合并。

在一种可能的实施方式中,至少一个第一初始子模型中的每个第一初始子模型中均未形成环结构;至少一个第二初始子模型中的每个第二初始子模型中均未形成环结构。

在一种可能的实施方式中,第一处理单元12用于:若至少一个第一初始子模型中的第一特定初始子模型的输出节点为特定节点,将第一特定初始子模型与第二特定初始子模型进行合并,第二特定初始子模型为第一特定初始子模型的输出节点的子节点所在的第二初始子模型,将合并后的第一特定子模型和第二特定子模型作为一个第二子模型;

若至少一个第二初始子模型中的第二特定初始子模型的输出节点为特定节点,将第二特定初始子模型与第一特定初始子模型进行合并,第一特定初始子模型为第二特定初始子模型的输出节点的子节点所在的第一初始子模型,将合并后的第一特定子模型和第二特定子模型作为一个第二子模型。

在一种可能的实施方式中,第一处理单元12还用于:若至少一个第一初始子模型中的一个第一初始子模型的输出节点为非特定节点,将一个第一初始子模型作为一个第一子模型;若至少一个第二初始子模型中的一个第二初始子模型的输出节点为非特定节点,将一个第二初始子模型作为一个第二子模型。

可选地,如图17所示,该处理装置10还包括:第二获取单元13和第二处理单元14;

第一处理单元12还用于:串联至少两类可执行子程序,形成神经网络模型的可执行程序;并建立可执行程序与用户之间的接口;

第二获取单元13用于:通过接口获取数据;

第一处理单元12还用于执行至少两类可执行子程序中一类可执行子程序,且第二处理单元14用于执行至少两类可执行子程序中另一类可执行子程序,以对数据进行推理,得到推理结果。

在一种可能的实施方式中,第二处理单元14为神经网络专用处理器上的处理单元,第一处理单元12为非神经网络专用处理器上的处理单元。

在一种可能的实施方式中,数据为图像、语音或者文字数据,第一处理单元12和第二处理单元14用于对图像、语音或者文字数据进行目标检测,得到检测结果。

图18示出了一种神经网络模型的推理装置20的示意性框图。该推理装置20可以用于执行上述神经网络模型的推理方法200。

如图18所示,该神经网络模型的推理装置20包括:获取单元21以及至少两个处理单元,例如图18中的第一处理单元22和第二处理单元23。

具体地,该获取单元21,用于获取用户输入的数据;

至少两个处理单元,用于分别执行可执行程序中的至少两类可执行子程序以对数据进行推理,得到推理结果;

其中,至少两个处理单元为至少两类处理器中的处理单元,至少两类可执行子程序是根据神经网络模型的图模型中多个节点的特性,对多个节点进行分类和合并得到的,神经网络模型的图模型用于处理数据。

作为示例,如图18所示,第一处理单元22和第二处理单元23均能接收获取单元21传输的数据,除该方式之外,第一处理单元22和第二处理单元23中也可以仅有一个处理单元接收获取单元21传输的数据,然后再由该处理单元将接收并处理的数据传输给另一个处理单元,在一些实施方式中,可以为通用处理器,例如CPU等接收获取单元21传输的数据,再将该数据进行处理后传输给其他类型的处理器。

在一种可能的实施方式中,至少两个处理单元中的第一处理单元22为神经网络专用处理器中的处理单元,第一处理单元22用于执行至少两类可执行子程序中的第一类可执行子程序;至少两个处理单元中的第二处理单元23为非神经网络专用处理器中的处理单元,第二处理单元用于执行至少两类可执行子程序中的第二类可执行子程序。

在一种可能的实施方式中,第一类可执行子程序是根据图模型中第一类子模型编译得到的,第二类可执行子程序是根据图模型中第二类子模型编译得到的;第一类子模型和第二类子模型是对多个节点中两类节点分别进行合并得到的,两类节点中第一类节点为适合在神经网络专用处理器上运行的节点,两类节点中第二类节点为不适合在神经网络专用处理器上运行的节点。

在一种可能的实施方式中,第一类子模型为对第一类节点进行合并得到的;第二类子模型为对第二类节点进行合并得到的。

在一种可能的实施方式中,第一类子模型为第一类节点合并后,形成的至少一个第一子模型中计算量最大的第一子模型;第二类子模型包括至少一个第一子模型中除计算量最大的第一子模型外的其它第一子模型,以及第二类节点合并后,形成的至少一个第二子模型。

在一种可能的实施方式中,第一类子模型包括第一类节点合并后,形成的至少一个第一子模型中计算量大于预设阈值的第一子模型;第二类子模型包括至少一个第一子模型中除计算量大于预设阈值的第一子模型外的其它第一子模型,以及第二类节点合并后,形成的至少一个第二子模型。

在一种可能的实施方式中,第一类子模型包括第一类节点合并后,形成的至少一个第一子模型中计算量最大的第一目标子模型,以及计算量大于预设阈值的第二目标子模型;第二类子模型包括至少一个第一子模型中除第一目标子模型和第二目标子模型外的其它第一子模型,以及第二类节点合并后,形成的至少一个第二子模型。

在一种可能的实施方式中,至少一个第一子模型中每个第一子模型的计算量与每个第一子模型中目标节点的数量成正比,其中,目标节点中包括计算类型的运算符。

在一种可能的实施方式中,可执行程序为根据图模型的拓扑结构,串联至少两类可执行子程序中的每个可执行子程序得到的。

在一种可能的实施方式中,数据为图像、语音或者文字数据,至少两个处理单元用于:对图像、语音或者文字数据进行目标检测,得到检测结果。

本申请还提供了一种电子设备,该电子设备包括处理器和存储器,该存储器用于存储程序代码,处理器用于调用该程序代码,执行本申请中任一方法实施例所述的方法。

本申请还提供了一种计算机可读存储介质,用于存储程序代码,该程序代码被处理器执行时实现本申请中任一方法实施例所述的方法。该程序代码可以是高级语言程序,也可以是可执行目标程序。

该计算机可读存储介质例如是存储器。存储器可以是易失性存储器或非易失性存储器,或者,存储器可以同时包括易失性存储器和非易失性存储器。

需要说明的是,在不冲突的前提下,本申请描述的各个实施例和/或各个实施例中的技术特征可以任意的相互组合,组合之后得到的技术方案也应落入本申请的保护范围。

应理解,本申请实施例中的具体的例子只是为了帮助本领域技术人员更好地理解本申请实施例,而非限制本申请实施例的范围。

还应理解,在本申请的各种实施例中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

还应理解,在本申请实施例和所附权利要求书中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请实施例。例如,在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“上述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。

除非另有说明,本申请实施例所使用的所有技术和科学术语与本申请的技术领域的技术人员通常理解的含义相同。本申请中所使用的术语只是为了描述具体的实施例的目的,不是旨在限制本申请的范围。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(Digital Video Disc,DVD))、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

40页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种农场作物施肥的方法、系统、装置及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!