一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

模型推理方法、装置、计算机设备及存储介质与流程

2022-12-06 20:16:00 来源:中国专利 TAG:


1.本技术涉及人工智能技术领域,特别是涉及一种模型推理方法、装置、计算机设备及存储介质。


背景技术:

2.随着人工智能技术的不断发展,机器学习的应用也越来越广泛,为了更有利的开展各种机器学习项目,越来越多的人工智能框架应用而生,诸如,caffe框架、tensorflow框架、keras框架、pytorch框架、mxnet框架等。
3.开放神经网络交换(open neural network exchange,onnx)格式是一种针对机器学习所设计的开放式文件格式,用于存储训练好的神经网络模型,它使不同的人工智能框架可以采用相同的格式存储神经网络模型数据并进行交互。onnx模型让跨框架之间的网络推理部署变得更加简单。例如,将mxnet框架中训练出来的mxnet网络模型导出成onnx模型,再将onnx模型导入到tenforflow框架中转化为tenforflow网络模型进行部署和前向推理,从而实现从mxnet框架到tenforflow框架的网络推理部署。
4.但是,目前的技术来看,并没有一个行之有效的方法能够将onnx模型直接导入到pytorch框架上进行pytorch网络模型推理。


技术实现要素:

5.基于此,有必要针对上述技术问题,提供一种能够实现简单跨框架之间部署的模型推理方法、装置、计算机设备和存储介质。
6.第一方面,一种模型推理方法,所述方法包括:
7.获取标准机器学习模型的多个网络节点;
8.根据预设的映射关系,确定与所述标准机器学习模型的各网络节点对应的目标算子重构函数;所述映射关系包括网络节点与目标框架的算子重构函数之间的对应关系;
9.根据各所述目标算子重构函数和所述标准机器学习模型的网络结构,获取前向函数;
10.执行所述前向函数,以完成所述标准机器学习模型在所述目标框架上的推理。
11.第二方面,一种模型推理装置,所述装置包括:
12.获取模块,用于获取标准机器学习模型的多个网络节点;
13.确定模块,用于根据预设的映射关系,确定与所述标准机器学习模型的各网络节点对应的目标算子重构函数;所述映射关系包括网络节点与目标框架的算子重构函数之间的对应关系;
14.构建模块,用于根据各所述目标算子重构函数和所述标准机器学习模型的网络结构,获取前向函数;
15.推理模块,用于执行所述前向函数,以完成所述标准机器学习模型在所述目标框架上的推理。
16.第三方面,一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的方法。
17.第四方面,一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的方法。
18.上述模型推理方法、装置、计算机设备和存储介质,通过预先设置包括网络节点与目标框架的算子重构函数之间的对应关系的映射关系,来获取标准机器学习模型的各网络节点对应的目标算子重构函数,并基于目标算子重构函数重新构建可以实现模型推理的前向函数,实现了将标准机器学习模型转换到目标框架上进行推理部署。而且,由于映射关系包括网络节点与目标框架的算子重构函数之间的对应关系,因此基于该映射关系可以很快的将标准机器学习模型的网络节点转换成目标框架对应的算子,进而基于目标框架对应的算子可以很快的通过构建前向函数完成标准机器学习模型在目标框架上的推理,该方法极大的提高了机器学习模型跨框架推理部署的效率。
附图说明
19.图1a为本发明实施例中组合处理装置的内部结构图;
20.图1b为本发明实施例中板卡的内部结构图;
21.图2为本发明实施例中模型推理方法的流程示意图;
22.图3为图2实施例s103的一种实现方式的流程示意图;
23.图4为图3实施例s202的一种实现方式的流程示意图;
24.图5为本发明实施例中模型推理方法的流程示意图;
25.图6为图4实施例s302的一种实现方式的流程示意图;
26.图7为本发明实施例中模型推理方法的流程示意图;
27.图8为本发明实施例中模型推理的代码执行示意图;
28.图9为本发明实施例中模型推理方法的流程示意图;
29.图10为本发明实施例中模型推理装置的结构示意图;
30.图11为本发明实施例中模型推理装置的结构示意图;
31.图12为本发明实施例中模型推理装置的结构示意图;
32.图13为本发明实施例中模型推理装置的结构示意图;
33.图14为本发明实施例中模型推理装置的结构示意图;
34.图15为本发明实施例中计算机设备的内部结构图。
具体实施方式
35.下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
36.应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,
但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
37.还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
38.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0039]
图1a是示出根据本披露实施例的一种组合处理装置1200的结构图。如图1a中所示,该组合处理装置1200包括计算处理装置1202、接口装置1204、其他处理装置1206和存储装置1208。根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置1210,该计算装置可以配置用于执行本文结合附图2-14所描述的操作。
[0040]
在不同的实施例中,本披露的计算处理装置可以配置成执行用户指定的操作。在示例性的应用中,该计算处理装置可以实现为单核人工智能处理器或者多核人工智能处理器。类似地,包括在计算处理装置内的一个或多个计算装置可以实现为人工智能处理器核或者人工智能处理器核的部分硬件结构。当多个计算装置实现为人工智能处理器核或人工智能处理器核的部分硬件结构时,就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。
[0041]
在示例性的操作中,本披露的计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据实现方式的不同,本披露的其他处理装置可以包括中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器可以包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置和其他处理装置共同考虑时,二者可以视为形成异构多核结构。
[0042]
在一个或多个实施例中,该其他处理装置可以作为本披露的计算处理装置(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置的开启和/或停止等基本控制。在另外的实施例中,其他处理装置也可以和该计算处理装置协作以共同完成运算任务。
[0043]
在一个或多个实施例中,该接口装置可以用于在计算处理装置与其他处理装置间传输数据和控制指令。例如,该计算处理装置可以经由所述接口装置从其他处理装置中获取输入数据,写入该计算处理装置片上的存储装置(或称存储器)。进一步,该计算处理装置可以经由所述接口装置从其他处理装置中获取控制指令,写入计算处理装置片上的控制缓存中。替代地或可选地,接口装置也可以读取计算处理装置的存储装置中的数据并传输给
其他处理装置。
[0044]
附加地或可选地,本披露的组合处理装置还可以包括存储装置。如图中所示,该存储装置分别与所述计算处理装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算处理装置和/或所述其他处理装置的数据。例如,该数据可以是在计算处理装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
[0045]
在一些实施例里,本披露还公开了一种芯片(例如图1b中示出的芯片1302)。在一种实现中,该芯片是一种系统级芯片(system on chip,soc),并且集成有一个或多个如图1a中所示的组合处理装置。该芯片可以通过对外接口装置(如图1b中示出的对外接口装置1306)与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如dram接口)等。在一些实施例中,本披露还公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本披露还公开了一种板卡,其包括上述的芯片封装结构。下面将结合图1b对该板卡进行详细地描述。
[0046]
图1b是示出根据本披露实施例的一种板卡1300的结构示意图。如图1b中所示,该板卡包括用于存储数据的存储器件1304,其包括一个或多个存储单元1310。该存储器件可以通过例如总线等方式与控制器件1308和上文所述的芯片1302进行连接和数据传输。进一步,该板卡还包括对外接口装置1306,其配置用于芯片(或芯片封装结构中的芯片)与外部设备1312(例如服务器或计算机等)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备通过对外接口装置传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置传送回外部设备。根据不同的应用场景,所述对外接口装置可以具有不同的接口形式,例如其可以采用标准pcie接口等。
[0047]
在一个或多个实施例中,本披露板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件可以包括单片机(micro controller unit,mcu),以用于对所述芯片的工作状态进行调控。
[0048]
根据上述结合图1a和图1b的描述,本领域技术人员可以理解本披露也公开了一种电子设备或装置,其可以包括一个或多个上述板卡、一个或多个上述芯片和/或一个或多个上述组合处理装置。
[0049]
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设
备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0050]
本领域技术人员可以理解,图1a和图1b中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的电子设备或装置的限定,具体的电子设备或装置可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0051]
在一个实施例中,如图2所示,提供了一种模型推理方法,以该方法应用于图1中的电子设备为例进行说明,包括以下步骤:
[0052]
s101,获取标准机器学习模型的多个网络节点。
[0053]
其中,标准机器学习模型是一种针对机器学习所设计的开放式的文件格式存储的模型,它可以使得不同的人工智能框架(如pytorch,mxnet)采用相同的格式存储模型数据并交互。可选的,标准机器学习模型包括开放神经网络交换模型(open neural network exchange,onnx)。
[0054]
本实施例中,电子设备可以预先使用标准机器学习模型的库构造相应类对象,再通过该类对象加载并解析标准机器学习模型,得到该标准机器学习模型的多个网络节点,比如,先定义一个名为graphproto的类对象,并使用onnx模型的库构造该graphproto类对象加载并解析onnx模型,再使用该类对象中定义的网络节点提取函数,比如,graphproto.node函数,提取出onnx模型的多个网络节点。
[0055]
s102,根据预设的映射关系,确定与标准机器学习模型的各网络节点对应的目标算子重构函数。
[0056]
其中,映射关系包括网络节点与目标框架的算子重构函数之间的对应关系。目标框架为标准机器学习模型将要部署的框架,比如,目标框架包括pytorch框架、mxnet框架、tensorflow框架、caffe2框架等。算子重构函数用于重构算子,一般使用类函数表示。因为onnx模型与pytoch有很多同名算子是有逻辑偏差的,因此根据映射关系得到的重构函数,目的在于在映射过去后能保持逻辑自洽。需要说明的是,目标框架的各网络节点与目标框架的各算子重构函数为对应关系。
[0057]
本实施例中,由于目标框架的各网络节点与目标框架的各算子重构函数为一一对应关系,因此电子设备可以预先根据标准机器学习模型的各网络节点与目标框架的各网络节点之间的对应的关系,确定标准机器学习模型的各网络节点与目标框架的各算子重构函数之间的对应关系,即映射关系。当电子设备按照上述方法获取到映射关系后,可以将映射关系存储在数据库中,或记录在相应映射链表中进行存储,以便之后使用。在实际应用中,当电子设备获取到标准机器学习模型的各网络节点时,即可从数据库中获取映射关系,或者从映射链表的记录内容中获取映射关系,再根据该映射关系查询到与标准机器学习模型的各网络节点对应的算子重构函数,最后将查询到的算子重构函数作为目标算子重构函数,以便之后根据目标算子重构函数重构目标框架对应的算子。
[0058]
s103,根据各目标算子重构函数和标准机器学习模型的网络结构,获取前向函数。
[0059]
其中,前向函数用于执行模型推理,其中包含了目标框架对应的网络结构中各网络节点之间的逻辑关系。本实施例中,当电子设备获取到标准机器学习模型的各网络节点
对应的目标算子重构函数时,可以进一步的根据标准机器学习模型的各网络节点的算子信息,利用各网络节点对应的目标算子重构函数构建目标框架对应的各算子。比如,电子设备可以通过获取用户基于各网络节点的算子信息编辑算子的逻辑代码的方式在各目标算子重构函数中添加相应的逻辑代码,得到各目标算子重构函数对应的算子,即目标框架对应的各算子;可选的,电子设备也可以根据标准机器学习模型的各网络节点的算子信息中包含的逻辑关系,自动编辑生成各目标算子重构函数中的逻辑关系,进而生成各目标算子重构函数对应的算子,即目标框架对应的各算子。当电子设备使用目标算子重构函数构建完成各自对应的算子后,可以进一步的根据标准机器学习模型的网络结构确定各算子之间的连接关系,再基于构建的各算子和各算子的连接关系生成目标框架的网络结构图,比如,pytorch网络结构图,最后再基于目标框架的网络结构图生成前向函数。
[0060]
s104,执行前向函数,以完成标准机器学习模型在目标框架上的推理。
[0061]
当电子设备获取到前向函数后,即可在目标框架上执行该前向函数,从而实现将标准机器学习模型转换到目标框架上进行推理计算。
[0062]
上述模型推理方法中,通过预先设置包括网络节点与目标框架的算子重构函数之间的对应关系的映射关系,来获取标准机器学习模型的各网络节点对应的目标算子重构函数,并基于目标算子重构函数重新构建可以实现模型推理的前向函数,实现了将标准机器学习模型转换到目标框架上进行推理部署。而且,由于映射关系包括网络节点与目标框架的算子重构函数之间的对应关系,因此基于该映射关系可以很快的将标准机器学习模型的网络节点转换成目标框架对应的算子,进而基于目标框架对应的算子可以很快的通过构建前向函数完成标准机器学习模型在目标框架上的推理,该方法极大的提高了机器学习模型跨框架推理部署的效率。
[0063]
在一个实施例中,提供了上述s103的一种实现方式,如图3所示,上述s103“根据各目标算子重构函数和标准机器学习模型的网络结构,获取前向函数”,包括:
[0064]
s201,提取标准机器学习模型的多个网络节点的算子信息。
[0065]
其中,网络节点的算子信息中包括算子的逻辑关系。
[0066]
当电子设备获取到标准机器学习模型的多个网络节点时,即可得到各网络节点的算子信息,由于标准机器学习模型的各网络节点的算子信息中的逻辑关系,与目标框架对应的各网路节点的算子信息中的逻辑关系是相同的,因此,在电子设备获取到标准机器学习模型的多个网络节点的算子信息之后,即可基于标准机器学习模型的各网络节点的算子信息构建目标框架的各网络节点对应的算子。
[0067]
s202,根据多个网络节点的算子信息和各目标算子重构函数,构建标准机器学习模型在目标框架上的目标算子。
[0068]
其中,目标算子为目标框架的多个网络节点对应的算子,比如,pytorch框架的多个网络节点对应的算子。本实施例中,当电子设备获取到标准机器学习模型的各网络节点的算子信息,以及标准机器学习模型的各网络节点对应的目标算子重构函数时,可以进一步的根据标准机器学习模型的各网络节点的算子信息,利用各网络节点对应的目标算子重构函数构建目标框架的各网络节点对应的目标算子,具体的,电子设备可以通过获取用户编辑指令的方式根据标准机器学习模型的各网络节点的算子信息对各目标算子重构函数进行编辑,再执行或运行编辑完成的所有目标算子重构函数直接生成目标框架上的目标算
子。
[0069]
s203,根据目标算子和标准机器学习模型的网络结构构建前向函数。
[0070]
当电子设备获取到标准机器学习模型在目标框架上的目标算子时,可以进一步的根据标准机器学习模型的网络结构获取各目标算子之间的连接关系,并根据构建的各目标算子生成目标框架的各网络节点,再按照各目标算子之间的连接关系连接目标框架的各网络节点,完成连接后即可生成目标框架的网络结构图。当电子设备获取到目标框架对应的网络结构图后,可以从该网络结构图中获取各网络节点之间的逻辑关系,并根据该逻辑关系自动编辑生成前向函数;可选的,当电子设备获取到目标框架的网络结构图后,用户通过查看该网络结构图在电子设备上手动编辑前向函数,电子设备即可通过获取用户输入的编辑指令得到该前向函数。可选的,当电子设备获取到目标框架的网络结构图后,可以将网络结构图存储在字典类型的数据结构中,具体在存储时,将目标框架对应的目标算子的输出名称作为字典中每个元素的关键点(字典中使用key表示),将目标框架对应的目标算子和目标框架对应的目标算子的输入名称作为字典中每个元素的关键点对应的值(字典中使用value表示)。当电子设备根据网络结构图构建前向函数时,可以基于存储的网络结构图对应的字典类型的数据结构构建前向函数,使之后电子设备后期基于前向函数进行推理时可以通过每个节点的输出名称来遍历整个目标框架的网络结构图,完成标准机器学习模型在目标框架上的推理。本实施例提供了一种反向推理的方法,可以提高推理效率。
[0071]
上述实施例通过目标算子和标准机器学习模型的网络结构生成目标框架对应的网络结构图,再根据网络结构图得到前向函数,由于网络结构图可以清楚的呈现出目标框架上各网络节点之间的逻辑关系,因此基于网络结构图可以很快的获取到前向函数,进而提高后期基于前向函数进行模型推理的效率。
[0072]
进一步的,上述s202“根据多个网络节点的算子信息和各目标算子重构函数,构建标准机器学习模型在目标框架上的目标算子”,如图4所示,包括:
[0073]
s301,提取各网络节点的算子信息得到各网络节点中包含的算子的逻辑关系和权重信息。
[0074]
当电子设备使用类对象加载并解析标准机器学习模型,得到标准机器学习模型的多个网络节点时,可以进一步的使用类对象中定义的网络节点提取函数,提取出标准机器学习模型的各网络节点,以及各网络节点中包含的算子的逻辑关系。当网络节点的算子信息中还包括权重信息时,电子设备还可以使用类对象中定义的权重提取函数,比如,graphproto.initializer函数,提取出各网络节点的算子信息中的权重信息。
[0075]
可选的,当电子设备提取出各网络节点的算子信息中包含的权重信息后,还可以进一步的将权重信息存储在权重文件中,例如,若电子设备之前使用标准机器学习模型(onnx模型)的onnx库构造了graphproto类对象,则对应的使用该类对象可以加载并解析onnx模型,然后使用该类对象中的graphproto.initializer提取onnx模型中的权重信息时,可以将权重信息存放到预先创建的权重文件中。
[0076]
s302,按照各网络节点的算子信息中包含的算子的逻辑关系和权重信息,在各目标算子重构函数中重构对应算子的逻辑关系,得到与目标框架的各网络节点对应的目标算子。
[0077]
本实施例中,当电子设备获取到标准机器学习模型的各网络节点对应的目标算子
重构函数时,可以按照各网络节点的算子信息中包含的算子的逻辑关系,在对应的各目标算子重构函数中重构对应算子的逻辑关系,以及将权重信息中的权重添加到相应的位置,进而编辑完成目标算子重构函数,之后即可根据编辑完成的各目标算子重构函数重构得到与目标框架的各网络节点对应的目标算子。
[0078]
可选的,在一些应用场景中,电子设备在执行上述步骤s301之后,还执行如下步骤:将各网络节点对应的目标算子存储在预设的算子链表中,以便之后电子设备可以在该算子链表中查找到各目标算子。例如,当电子设备根据onnx模型中的各网络节点得到pytorch框架对应的各目标算子后,即可将各目标算子记录在算子链表中。
[0079]
对应的,电子设备在执行上述步骤s203时,即可基于标准机器学习模型的网络结构,通过遍历上述算子链表中各目标算子,构建前向函数。
[0080]
基于上述例子,若电子设备将各网络节点对应的目标算子存储在算子链表中,电子设备之后即可基于标准机器学习模型的网络结构确定各目标算子之间的逻辑关系,再根据各目标算子的逻辑关系遍历该算子链表中每个目标算子自动生成前向函数。可选的,电子设备在获取到算子链表后,也可以向用户展示该算子链表,以便用户查看该算子链表中的目标算子,再查看标准机器学习模型的网络结构指示的目标算子之间的逻辑关系编辑函数,电子设备则根据用户编辑的函数生成前向函数。
[0081]
进一步的,如图5所示,上述步骤“基于标准机器学习模型的网络结构,通过遍历算子链表中各目标算子,构建前向函数”,包括:
[0082]
s401,基于标准机器学习模型的网络结构,通过遍历算子链表中各目标算子,构建包含算子链表中所有目标算子的有向图。
[0083]
其中,算子链表中的每个链表节点包括目标算子的目标算子重构函数、目标算子的所有输入名称列表、目标算子的所有输出名称列表。当电子设备获取到算子链表时,可以先基于标准机器学习模型的网络结构确定各目标算子之间的连接关系,再按照各目标算子之间的连接关系遍历算子链表中各目标算子,构建包含算子链表中所有目标算子的有向图,且该有向图中包含各目标算子之间的逻辑关系,输入输出关系等信息。
[0084]
s402,对有向图中的网络结构进行拓扑排序,并在拓扑排序通过的情况下,根据有向图构建前向函数。
[0085]
当电子设备构建了有向图后,可以对该有向图中的网络结构进行拓扑排序,以检查该有向图是否存在环的情况而造成后续前向推理出现死循环的问题,若该有向图中存在环的情况,即在拓扑排序通过的情况下,说明需要转换的标准机器学习模型没有问题,则继续执行后续步骤:根据有向图构建前向函数;若该有向图中不存在环的情况,即在拓扑排序不通过的情况下,说明需要转换的标准机器学习模型存在问题,此种情况下停止解析标准机器学习模型,或重新更新标准机器学习模型重新进行解析,还可以报错,以告知用户标准机器学习模型出现错误。
[0086]
在实际应用中,目标框架可以部署在任意类型的处理器上,例如,机器学习处理器npu、中央处理器cpu等,用于机器学习模型推理计算,尤其是离线机器学习模型推理计算。当需要将目标框架部署在机器学习处理器npu上时,当电子设备执行上述步骤s302,得到各标准机器学习模型中各网络节点对应的目标算子后,还需要执行如下步骤:将属于权重算子类型的目标算子替换成量化权重目标算子。由于目标算子中会包括权重算子类型的目标
算子,该类型的算子在npu上难以正常计算,因此,在电子设备得到各目标算子时,若需要将这些目标算子之后在npu上运行,则需要将该类型的目标算子进行转化,转化成适用于npu上运行的量化权重算子,以便之后在npu上的模型推理。可以理解的是,在电子设备得到各目标算子时,若需要将这些目标算子之后在cpu上运行,则不需要将属于权重算子类型的目标算子替换成量化权重目标算子,而是可以直接根据目标算子获取前向函数,进而在cpu上执行前向函数,以完成标准机器学习模型在目标框架上的推理。
[0087]
对应的,电子设备在执行上述s203的步骤时,具体执行:根据未替换的目标算子、替换后的量化权重目标算子和标准机器学习模型的网络结构构建前向函数。
[0088]
当电子设备得到各目标算子,并将各目标算子中属于权重算子类型的目标算子替换成量化权重目标算子后,可以进一步的按照上述s203所述的方法根据未替换的目标算子、替换后的量化权重目标算子和标准机器学习模型的网络结构构建所述前向函数,具体方法请参见前述内容,此处不赘述。
[0089]
在实际应用中,当电子设备基于前述s301的步骤提取出各网络节点的算子信息中包含的权重信息后,还可以执行步骤:提取各网络节点的算子信息中的权重信息,并将权重信息存储在权重文件中。例如,若电子设备之前使用标准机器学习模型(onnx模型)的onnx库构造了graphproto类对象,则对应的使用该类对象可以加载并解析onnx模型,然后使用该类对象中的graphproto.initializer提取onnx模型中的权重信息时,可以将权重信息存放到预先创建的权重文件中。
[0090]
对应的,电子设备在执行上述s302的步骤时,如图6所示,具体可以执行如下步骤:
[0091]
s501,从权重文件中读取标准机器学习模型的各网络节点的算子的权重信息。
[0092]
基于上述步骤,若电子设备将标准机器学习模型的各网络节点的算子的权重信息存储在权重文件中,电子设备之后即可从该权重文件中读取出中读取出各网络节点的算子的权重信息。
[0093]
s502,按照各网络节点的算子信息中包含的算子的逻辑关系和权重信息,在各目标算子重构函数中重构对应算子的逻辑关系,得到与目标框架的各网络节点对应的目标算子。
[0094]
当电子设备获取到读取出的权重信息后,即可执行s402步骤,得到与目标框架的各网络节点对应的目标算子,该步骤的具体实施方式基本与前述步骤s302所示的方法相同,详细内容请参见前述说明,此处不赘述。
[0095]
综合上述所有实施例,示例性说明上述模型推理方法,其中,假设标准机器学习模型为onnx模型,onnx模型对应onnx库,目标框架为pytorch框架,如图7所示,该方法包括:
[0096]
s601,根据onnx模型的onnx库构建onnxparser类对象;该onnxparser类对象用于加载、解析、提取onnx模型中权重、提取onnx模型中各网络节点。
[0097]
s602,使用onnxparser类对象中的graphproto.initializer函数,提取onnx模型的各网络节点的算子信息中的权重信息,并将权重信息存放到pytorch权重文件pth中。
[0098]
s603,使用onnxparser类对象中的graphproto.node函数,提取onnx模型中的各网络节点,并将各网络节点映射成相应的pytorch算子,并存放在py.ops链表。
[0099]
s604,基于onnx模型的网络结构,通过遍历py.ops链表,构建出pytorch的网络结构。
[0100]
s605,根据pytorch的网络结构构建前向函数。
[0101]
s606,执行前向函数,以完成onnx模型在pytorch框架上的推理。
[0102]
上述s601-s606是应用上述实施例的具体示例,每个步骤的对应说明可以参见前述内容,此处不赘述。
[0103]
在一个实施例中,电子设备可以通过具体的代码实现上述模型推理方法,进而完成将onnx模型部署在pytorch框架进行推理计算,如图8所示的代码执行示意图。其中,onnxparser类是一种用于解析onnx模型解析/转换/权重提取和执行推理前向的工具类;onnx2pytorch op map表示onnx到pytorch的算子映射列表;rebuildpyoplist类是一种通过onnx算子重构pytorch算子的工具类,rebuildpyoplist类中包含onnx模型的各网络节点对应的目标算子重构函数。
[0104]
应用如图8所示的各种类函数和映射列表实现模型推理的过程,如图9所示,包括:
[0105]
s701,调用onnxparser类中的load_onnx()函数导入onnx模型。
[0106]
s702,调用onnxparser类中的unpack_weightsx()函数提取onnx模型中的权重信息并保存成pytorch权重形式。
[0107]
s703,调用onnxparser类中的unpack_nodes()函数提取onnx模型中的各网络节点,以及每个网络节点中的算子信息、输入和输出信息。
[0108]
s704,获取onnx2pytorch op map算子映射列表,并根据onnx2pytorch op map算子映射列表,找到每个onnx模型的网络节点对应的pytorch算子的目标算子重构函数rebuild_xx。
[0109]
s705,根据onnx模型中的各网络节点、每个网络节点中的算子信息、输入和输出信息、pytorch权重,在目标算子重构函数rebuild_xx中重构相应的pytorch算子逻辑,得到重构后的pytorch算子。
[0110]
s706,调用onnxparser类中的construct_pytorch_nodes()函数根据重构后的pytorch算子,建立pytorch网络结构图。
[0111]
s707,根据pytorch网络结构图构建前向函数forward()。
[0112]
s708,调用run_fworkspace()执行前向函数forward(),以完成onnx模型在pytorch的框架上的模型推理。
[0113]
上述s701-s708是应用上述实施例的具体示例,每个步骤的对应说明可以参见前述内容,此处不赘述。
[0114]
应该理解的是,虽然图2-9的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-9中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0115]
在一个实施例中,如图10所示,提供了一种模型推理装置,包括:
[0116]
获取模块11,用于标准机器学习模型的多个网络节点;
[0117]
确定模块12,用于根据预设的映射关系,确定与所述标准机器学习模型的各网络节点对应的目标算子重构函数;所述映射关系包括网络节点与目标框架的算子重构函数之
间的对应关系;
[0118]
构建模块13,用于根据各所述目标算子重构函数和所述标准机器学习模型的网络结构,获取前向函数;
[0119]
推理模块14,用于执行所述前向函数,以完成所述标准机器学习模型在所述目标框架上的推理。
[0120]
在一个实施例中,如图11所示,上述构建模块13,包括:
[0121]
提取单元131,用于提取所述标准机器学习模型的多个网络节点的算子信息;
[0122]
第一构建单元132,用于根据所述多个网络节点的算子信息和各所述目标算子重构函数,构建所述标准机器学习模型在目标框架上的目标算子;
[0123]
第二构建单元133,用于根据所述目标算子和所述标准机器学习模型的网络结构构建所述前向函数。
[0124]
在一个实施例中,如图12所示,上述第一构建单元132,包括:
[0125]
提取子单元1321,用于提取各所述网络节点的算子信息中包含的算子的逻辑关系和权重信息;
[0126]
重构子单元1322,用于按照各所述网络节点的算子信息中包含的算子的逻辑关系和权重信息,在各所述目标算子重构函数中重构对应算子的逻辑关系,得到与所述目标框架的各网络节点对应的目标算子。
[0127]
在一个实施例中,如图13所示,所述重构子单元1322之后,所述装置还包括:
[0128]
替换子单元1323,用于将属于权重算子类型的目标算子替换成量化权重目标算子;
[0129]
对应的,上述第二构建单元133具体用于根据未替换的目标算子、替换后的量化权重目标算子和所述标准机器学习模型的网络结构构建所述前向函数。
[0130]
在一个实施例中,如图14所示,所述重构子单元1322之后,所述装置还包括:
[0131]
存储子单元1324,用于将各所述网络节点对应的目标算子存储在预设的算子链表中;
[0132]
对应的,上述第二构建单元133具体用于基于所述标准机器学习模型的网络结构,通过遍历所述算子链表中各目标算子,构建所述前向函数。
[0133]
在一个实施例中,上述第二构建单元133具体用于基于所述标准机器学习模型的网络结构,通过遍历所述算子链表中各目标算子,构建包含所述算子链表中所有目标算子的有向图;对所述有向图中的网络结构进行拓扑排序,并在拓扑排序通过的情况下,根据所述有向图构建所述前向函数。
[0134]
在一个实施例中,上述提取子单元1321具体用于提取各所述网络节点的算子信息中的权重信息,并将所述权重信息存储在权重文件中;
[0135]
对应的,上述重构子单元1322,具体用于从所述权重文件中读取所述标准机器学习模型的各网络节点的算子的权重信息;按照各所述网络节点的算子信息中包含的算子的逻辑关系和权重信息,在各所述目标算子重构函数中重构对应算子的逻辑关系,得到与所述目标框架的各网络节点对应的目标算子。
[0136]
在一个实施例中,所述目标框架为pytorch框架。
[0137]
在一个实施例中,所述标准神经网络模型为onnx模型。
only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。
[0154]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0155]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献