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

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

2022-12-23 20:49:51 来源:中国专利 TAG:


1.本技术涉及信息处理技术领域,特别是涉及一种离线模型推理的方法、装置、计算机设备和存储介质。


背景技术:

2.随着机器学习算法的不断发展,越来越多架构的机器学习芯片逐渐问世。其中嵌入式神经网络处理器(neural network processing unit,npu)因其采用“数据驱动并行计算”的架构,被广泛应用于视频数据和海量图像的识别和处理领域。
3.目前,在使用npu芯片对视频数据或图像数据进行处理的过程中,通常会涉及到深度学习网络模型的推理,即将深度学习网络模型中所有的计算都映射到npu芯片上进行运算,得到的运算结果即为对视频数据或图像数据的处理结果。
4.但是,随着深度学习网络模型的日益复杂化,npu芯片对于深度学习网络模型的推理效率也越来越低。


技术实现要素:

5.基于此,有必要针对上述技术问题,提供一种能够提高深度学习网络模型的推理效率的离线模型推理的方法、装置、计算机设备和存储介质。
6.第一方面,一种离线模型推理的方法,所述方法采用多级流水线,所述流水线包括多个第一流水线和多个第二流水线,所述方法包括:
7.获取多个离线模型的待处理数据;
8.在多个第一流水线上分别对所述多个离线模型的待处理数据进行第一并行处理,并将各所述第一流水线输出的处理结果存储至第一缓存队列;
9.在多个第二流水线上分别从所述第一缓存队列中读取各所述第一流水线输出的处理结果进行第二并行处理,以完成所述多个模型的推理。
10.第二方面,一种离线模型推理的装置,所述装置包括:
11.获取模块,用于获取多个离线模型的待处理数据;
12.第一并行处理模块,用于在多个第一流水线上分别对所述多个离线模型的待处理数据进行第一并行处理,并将各所述第一流水线输出的处理结果存储至第一缓存队列;
13.第二并行处理模块,用于在多个第二流水线上分别从所述第一缓存队列中读取各所述第一流水线输出的处理结果进行第二并行处理,以完成所述多个离线模型的推理。
14.第三方面,一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的方法。
15.第四方面,一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的方法。
16.上述离线模型推理的方法、装置、计算机设备和存储介质,通过设置多个第一流水线、多个第二流水线,实现多个流水线并行化处理数据,同时,第二流水线和第一流水线级
联设置,即采用第二流水线处理第一流水线输出的处理结果,实现不同流水线的流水化处理数据,基于此,本发明提供的离线模型推理的方法在离线模型推理应用场景中实现了一种多个流水线并行化及流水化运行的推理计算方法,相比于单一流水线执行推理计算的方法,极大的提高了模型推理的速度和效率。
附图说明
17.图1a为本发明实施例中组合处理装置的内部结构图;
18.图1b为本发明实施例中板卡的内部结构图;
19.图2为本发明实施例中离线模型推理的方法的流程示意图;
20.图3为本发明实施例中离线模型推理结构的示意图;
21.图4为本发明实施例中离线模型推理结构的示意图;
22.图5为图2实施例中s102的一种实现方法的流程示意图;
23.图6为本发明实施例中离线模型推理结构的示意图;
24.图7为本发明实施例中离线模型推理结构的示意图;
25.图8为本发明实施例中离线模型推理的方法的流程示意图;
26.图9为本发明实施例中离线模型推理结构的示意图;
27.图10为本发明实施例中离线模型推理结构的示意图;
28.图11为本发明实施例中离线模型推理结构的示意图;
29.图12为本发明实施例中离线模型推理结构的示意图;
30.图13为本发明实施例中离线模型推理结构的示意图;
31.图14为本发明实施例中离线模型推理结构的示意图;
32.图15为本发明实施例中离线模型推理的装置的结构框图;
33.图16为本发明实施例中离线模型推理的装置的结构框图;
34.图17为本发明实施例中离线模型推理的装置的结构框图。
具体实施方式
35.下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
36.应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
37.还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
38.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0039]
图1a是示出根据本披露实施例的一种组合处理装置1200的结构图。如图1a中所示,该组合处理装置1200包括计算处理装置1202、接口装置1204、其他处理装置1206和存储装置1208。根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置1210,该计算装置可以配置用于执行本文结合附图2-14所描述的操作。
[0040]
计算处理装置1202配置成执行用户指定的操作,例如用于执行离线模型推理的过程。在示例性的应用中,该计算处理装置1202主要实现为单核人工智能处理器或者多核人工智能处理器。类似地,包括在计算处理装置1202内的一个或多个计算装置1210可以实现为人工智能处理器核或者人工智能处理器核的部分硬件结构。当多个计算装置1210实现为人工智能处理器核或人工智能处理器核的部分硬件结构时,就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。
[0041]
计算处理装置1202通过接口装置1204与其他处理装置1206进行交互,以共同完成用户指定的操作。根据实现方式的不同,本披露的其他处理装置1206包括中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算处理装置1202而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置1202和其他处理装置1206共同考虑时,二者可以视为形成异构多核结构。
[0042]
其他处理装置1206可以作为本披露的计算处理装置1202(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置1210的开启和/或停止等基本控制。在另外的实施例中,其他处理装置1206也可以和该计算处理装置1202协作以共同完成运算任务。
[0043]
接口装置1204用于在计算处理装置1202与其他处理装置1206间传输数据和控制指令。例如,该计算处理装置1202可以经由所述接口装置1204从其他处理装置1206中获取输入数据,写入该计算处理装置1202片上的存储装置1208(或称存储器)。进一步,该计算处理装置1202可以经由所述接口装置1204从其他处理装置1206中获取控制指令,写入计算处理装置1202片上的控制缓存中。替代地或可选地,接口装置1204也可以读取计算处理装置1202的存储装置中的数据并传输给其他处理装置1206。
[0044]
存储装置1208分别与所述计算处理装置1202和所述其他处理装置1206连接。存储装置1208用于保存所述计算处理装置1202和/或所述其他处理装置1206的数据。例如,该数据可以是在计算处理装置1202或其他处理装置1206的内部或片上存储装置中无法全部保存的数据。
[0045]
在一些实施例里,本披露还公开了一种芯片(例如图1b中示出的芯片1302)。在一
种实现中,该芯片是一种系统级芯片(system on chip,soc),并且集成有一个或多个如图1a中所示的组合处理装置。该芯片可以通过对外接口装置(如图1b中示出的对外接口装置1306)与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如dram接口)等。在一些实施例中,本披露还公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本披露还公开了一种板卡,其包括上述的芯片封装结构。下面将结合图1b对该板卡进行详细地描述。
[0046]
图1b是示出根据本披露实施例的一种板卡1300的结构示意图。如图1b中所示,该板卡1300包括用于存储数据的存储器件1304,其包括一个或多个存储单元1310。该存储器件1304可以通过例如总线等方式与控制器件1308和上文所述的芯片1302进行连接和数据传输。进一步,该板卡还包括对外接口装置1306,其配置用于芯片(或芯片封装结构中的芯片)与外部设备1312(例如服务器或计算机等)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备1312通过对外接口装置1306传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置1306传送回外部设备1312。根据不同的应用场景,所述对外接口装置1306可以具有不同的接口形式,例如其可以采用标准pcie接口等。
[0047]
在一个或多个实施例中,本披露板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件包括单片机(micro controller unit,mcu),以用于对所述芯片的工作状态进行调控。
[0048]
在一个实施例中,如图2所示,提供了一种离线模型推理的方法,该方法采用多级流水线,流水线包括多个第一流水线和多个第二流水线,该方法应用于图1中的板卡1300或组合装置1200中的处理器,包括以下步骤:
[0049]
s101,获取多个离线模型的待处理数据。
[0050]
其中,离线模型包括机器学习模型,神经网络模型,或者根据其它算法构建的计算类模型,比如,聚类算法、搜索算法等构建的计算模型。待处理数据也即待推理的数据或待计算的数据,包括图像、文本、视频、语音等不同类型数据。本实施例中,当处理器进行不同模型的推理计算时,可以同时获取多个离线模型的待处理数据,或依次获取多个离线模型的待处理数据。其中,离线模型的类型表示对输入数据的具体操作类型,比如,当离线模型属于神经网络模型时,离线模型的类型可以具体为卷积操作、池化操作、拼接操作等中的任一种,当离线模型属于聚类算法构建的计算模型时,离线模型的类型可以具体为累加和计算操作、均值操作等中的一种。多个离线模型的类型可以相同,也可以不相同,多个离线模型的待处理数据的类型可以相同,也可以不相同。
[0051]
s102,在多个第一流水线上分别对多个离线模型的待处理数据进行第一并行处理,并将各第一流水线输出的处理结果存储至第一缓存队列。
[0052]
其中,流水线也称pipeline。本实施例中的第一流水线是指对离线模型的待处理数据进行处理的pipeline。在每个第一流水线上对每个模型的待处理数据进行处理,该处理过程中包括对待处理数据进行前处理、推理计算、后处理等工作,其中,前处理是指对待处理数据进行一系列预处理之类的处理工作,比如,单位转换,数据分辨率统一、噪声去除等;推理计算是指加载离线模型对待处理数据进行模型推理计算;后处理是指对离线模型推理的结果进行诸如画图、统计分析等一系列处理工作。第一流水线与模型为一一对应的
关系,即每个第一流水线用于处理对应模型的待处理数据,多个第一流水线的类型可以相同,也可以不同,第一流水线的类型可以由模型的类型确定,即模型的类型不同,对应的第一流水线的类型不同。
[0053]
本实施例中,当处理器获取到多个离线模型的待处理数据后,同时在多个第一流水线上并行处理多个离线模型的待处理数据,使在每个第一流水线上对应处理相应离线模型的待处理数据,各第一流水线执行并行处理,相互不影响,并得到并行处理后的结果,即各第一流水线输出的处理结果。具体的,处理器先创建一个第一缓存队列,并在得到各第一流水线输出的处理结果后,直接将各第一流水线输出的处理结果存储到该第一缓存队列中。可选的,当处理器同时得到各第一流水线输出的处理结果时,即各第一流水线同时处理完成数据时,处理器将各第一流水线输出的处理结果一起存储至第一缓存队列;当处理器先后得到各第一流水线输出的处理结果时,处理器也可以按照第一流水线处理完成数据的顺序将各第一流水线输出的处理结果依次存储至第一缓存队列。其中,第一缓存队列的特征为第一流水线push数据后即可开始下一次执行。
[0054]
s103,在多个第二流水线上分别从第一缓存队列中读取各第一流水线输出的处理结果进行第二并行处理,以完成多个离线模型的推理。
[0055]
其中,本实施例中的第二流水线是指对第一流水线输出的处理结果进行处理的pipeline。具体的,在每个第二流水线上可以对一个第一流水线输出的处理结果进行处理,也可以对多个第一流水线输出的处理结果进行处理,该处理过程中包括对处理结果进行前处理、推理计算、后处理等工作。多个第二流水线的类型可以相同,也可以不同。
[0056]
本实施例中,由于第一缓存队列的特征为第一流水线push数据后即可开始下一次执行,因此,当第一缓存队列中存储有第一流水线输出的处理结果后,处理器即可同时在多个第二流水线上分别从第一缓存队列中读取第一流水线输出的处理结果,并在各第二流水线上对各自读取的一个处理结果进行并行处理。具体来说,处理器可以同时在多个第二流水线上分别从第一缓存队列中读取所有第一流水线输出的处理结果,以实现在各第二流水线对各自读取的所有处理结果进行并行处理;可选的,处理器也可以依次在多个第二流水线上分别从第一缓存队列中读取一个第一流水线输出的处理结果,等在所有第二流水线上均获取到数据后,在各第二流水线上再对各自读取的一个处理结果进行并行处理;可选的,处理器也可以依次在多个第二流水线上从第一缓存队列中读取所有第一流水线输出的处理结果,等在所有第二流水线上均获取到数据后,在各第二流水线上再对各自读取的所有处理结果进行并行处理。当在各第二流水线上均完成了对各自读取到的数据处理后,即完成对待处理数据的推理过程,接下来处理器即可获取新的待处理数据,再相应在第一流水线、第一缓存队列、第二流水线上按照上述s101-s103的方法对新的待处理数据进行推理,直到没有新的待处理数据需要推理,即在第一流水线上没有处理的待处理数据,第一缓存队列中没有数据,以及在第二流水线上的数据也处理完成,即可认为完成了上述多个模型的推理工作。
[0057]
上述离线模型推理的方法中,通过设置多个第一流水线、多个第二流水线,实现多个流水线并行化处理数据,同时,第二流水线和第一流水线级联设置,即采用第二流水线处理第一流水线输出的处理结果,实现不同流水线的流水化处理数据,基于此,本发明提供的离线模型推理的方法在离线模型推理应用场景中实现了一种多个流水线并行化及流水化
运行的推理计算方法,相比于单一流水线执行推理计算的方法,极大的提高了模型推理的速度和效率。
[0058]
在实际应用中,上述处理器进行离线模型推理时加载的多个离线模型可以是相同类型的离线模型,比如多个离线模型均是卷积运算的离线模型;加载的多个离线模型也可以是不同类型的离线模型,比如,一个离线模型是卷积运算的离线模型,另一个离线模型是池化运算的离线模型。当处理器进行离线模型推理时加载的多个离线模型为相同类型的离线模型时,处理器在执行上述s102的步骤时,具体执行:在多个第一流水线上分别对多个离线模型的待处理数据进行第一并行处理,并按照各第一流水线输出处理结果的顺序,将各第一流水线输出的处理结果依次存储至第一缓存队列。
[0059]
其中,第一流水线输出的处理结果为处理器在第一流水线上对待处理数据进行前处理、推理计算、后处理等工作后得到的处理结果。在多个第一流水线上对多个离线模型的待处理数据进行第一并行处理时,处理数据的速度可能相同,也可能不相同。因此,当在多个第一流水线上对多个模型的待处理数据进行第一并行处理的速度不同时,处理器即可将各第一流水线输出的处理结果按照各第一流水线输出处理结果的顺序依次存储至第一缓存队列中;当在多个第一流水线上对多个离线模型的待处理数据进行第一并行处理的速度相同时,处理器即可将各第一流水线输出的处理结果按照任何顺序存储至第一缓存队列中。
[0060]
当第一存储队列中有第一流水线输出的处理结果后,处理器即可执行上述s103的步骤,具体执行过程为:在每个第二流水线上分别从第一缓存队列中读取出至少一个第一流水线输出的处理结果进行第二并行处理。
[0061]
本实施例中,第一流水线的个数可以与第二流水线的个数一致,第一流水线的个数也可以与第二流水线的个数不一致。当第一流水线的个数与第二流水线的个数一致,且第一缓存队列中存储有多个第一流水线输出的处理结果时,处理器可以在每个第二流水线上分别读取第一缓存队列中一个第一流水线输出的处理结果,只要在各第二流水线上读取出不同的第一流水线输出的处理结果即可,然后并行处理各自读取到的处理结果。例如,假设有三个第二流水线:#1第二流水线、#2第二流水线、#3第二流水线,第一缓存队列中存储有#1第一流水线输出的处理结果、#2第一流水线输出的处理结果、#3第一流水线输出的处理结果,则在#1第二流水线上可以从第一缓存队列中读取出#1第一流水线输出的处理结果;在#2第二流水线上可以从第一缓存队列中读取出#2第一流水线输出的处理结果;在#3第三流水线上可以从第一缓存队列中读取出#3第一流水线输出的处理结果。可选的,在#1第二流水线可以从第一缓存队列中读取出#2第一流水线输出的处理结果;在#2第二流水线可以从第一缓存队列中读取出#3第一流水线输出的处理结果;在#3第二流水线可以从第一缓存队列中读取出#1第一流水线输出的处理结果;可选的,在#1第二流水线可以从第一缓存队列中读取出#3第一流水线输出的处理结果;在#2第二流水线可以从第一缓存队列中读取出#1第一流水线输出的处理结果;在#3第三流水线可以从第一缓存队列中读取出#2第一流水线输出的处理结果。
[0062]
可选的,当第一流水线的个数与第二流水线的个数不一致,且第一缓存队列中存储有多个第一流水线输出的处理结果时,处理器可以在每个第二流水线上读取出第一缓存队列中多个第一流水线输出的处理结果,且各自读取的处理结果的个数可以相同,也可以
不同,然后并行处理各自读取到的处理结果。例如,假设有两个第二流水线:#1第二流水线和#2第二流水线,第一缓存队列中存储有#1第一流水线输出的处理结果、#2第一流水线输出的处理结果、#3第一流水线输出的处理结果,则在#1第二流水线上可以从第一缓存队列中读取出#1第一流水线输出的处理结果和#2第一流水线输出的处理结果;在#2第二流水线上可以从第一缓存队列中读取出#3第一流水线输出的处理结果。再例如,假设有两个第二流水线:#1第二流水线和#2第二流水线,第一缓存队列中存储有#1第一流水线输出的处理结果、#2第一流水线输出的处理结果、#3第一流水线输出的处理结果、#4第一流水线输出的处理结果,则在#1第二流水线上可以从第一缓存队列中读取出#1第一流水线输出的处理结果和#2第一流水线输出的处理结果;在#2第二流水线上可以从第一缓存队列中读取出#3第一流水线输出的处理结果和#4第一流水线输出的处理结果。
[0063]
本技术示例性的说明在第一流水线的个数与第二流水线的个数一致的情况下,上述实施例所述的相同类型模型的推理方法,如图3所示的模型推理结构,假设有三个第一流水线,即第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipeline a3,且第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipelinea3为相同类型的pipeline,他们之间并行运行并且各自的运行结果不需要同步即可存储至第一缓存队列basic queue中;假设有三个第二流水线,即第二流水线pipeline b1,第二流水线pipelineb2,第二流水线pipelineb3,且第二流水线pipeline b1,第二流水线pipelineb2,第二流水线pipelineb3也是相同类型的pipeline,他们之间并行运行并且各自独立的从第一缓存队列basic queue中读取数据。具体的计算过程为:
[0064]
处理器首先创建1个第一缓存队列basic queue,该第一缓存队列basic queue被设置在并行排列的第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipeline a3和并行排列的第二流水线pipeline b1,第二流水线pipeline b2,第二流水线pipeline b3之间,第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipeline a3并行计算后输出的处理结果放到第一缓存队列basic queue中,第一缓存队列basic queue的特征为第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipeline a3 push数据后即可开始下一次执行,第二流水线pipeline b1,第二流水线pipeline b2,第二流水线pipeline b3依次pop一份第一缓存队列basic queue中的数据,其中的一份数据包括第一流水线pipeline a1输出的处理结果、第一流水线pipeline a2输出的处理结果、第一流水线pipeline a3输出的处理结果中的一个处理结果,比如,第二流水线pipeline b1从第一缓存队列basic queue中pop到第一流水线pipeline a1输出的处理结果,第二流水线pipeline b2从第一缓存队列basic queue中pop到第一流水线pipeline b2输出的处理结果,第二流水线pipeline b3从第一缓存队列basic queue中pop到第一流水线pipeline a3输出的处理结果。
[0065]
处理器运行开始,此时第一缓存队列basic queue为空,因此,第二流水线pipeline b1,第二流水线pipeline b2,第二流水线pipeline b3处于等待状态。当有模型的数据输入时,第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipeline a3触发执行。待在第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipeline a3上开始并行处理数据,且有处理结果存储到第一缓存队列basic queue中时,第二流水线pipeline b1,第二流水线pipeline b2,第二流水线pipeline b3被触发,在第二流水线
pipeline b1,第二流水线pipeline b2,第二流水线pipeline b3上从第一缓存队列basic queue中pop到数据后,第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipeline a3与第二流水线pipeline b1,第二流水线pipeline b2,第二流水线pipeline b3并发执行。
[0066]
待第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipeline a3处理完所有数据,此时,第一流水线pipeline a1,第一流水线pipeline a2,第一流水线pipeline a3结束执行,然后,当第一缓存队列basic queue中无数据时,第二流水线pipeline b1,第二流水线pipeline b2,第二流水线pipeline b3也结束运行,推理过程结束。
[0067]
可选的,本技术示例性的说明在第一流水线的个数与第二流水线的个数不一致的情况下,上述实施例所述的相同类型模型的推理方法,如图4所示的模型推理结构,假设有三个第一流水线,即第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipeline a6,且第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipelinea6为相同类型的pipeline,他们之间并行运行并且各自的运行结果不需要同步即可存储至第一缓存队列basic queue中;假设有两个第二流水线,即第二流水线pipeline b4和第二流水线pipelineb5,且第二流水线pipeline b4和第二流水线pipelineb5也是相同类型的pipeline,他们之间并行运行并且各自独立的从第一缓存队列basic queue中读取数据。具体的计算过程为:
[0068]
处理器创建1个第一缓存队列basic queue,该第一缓存队列basic queue被设置在并行排列的第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipeline a6和并行排列的第二流水线pipeline b4和第二流水线pipelineb5之间,第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipeline a6并行计算后输出的处理结果放到第一缓存队列basic queue中,第一缓存队列basic queue的特征为第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipeline a6 push数据后即可开始下一次执行,第二流水线pipeline b4和第二流水线pipelineb5依次从第一缓存队列basic queue中pop第一流水线输出的处理结果,具体的,第二流水线pipeline b4可以从第一缓存队列basic queue中pop到第一流水线pipeline a4和第一流水线pipeline a5输出的处理结果,第二流水线pipelineb5可以从第一缓存队列basic queue中pop到第一流水线pipeline a6输出的处理结果;可选的,第二流水线pipeline b4也可以从第一缓存队列basic queue中pop到第一流水线pipeline a4输出的处理结果,第二流水线pipelineb5可以从第一缓存队列basic queue中pop到第一流水线pipeline a5和第一流水线pipeline a6输出的处理结果。需要说明的是,第二流水线pipeline b4和第二流水线pipeline b5各自可以从第一缓存队列basic queue中pop到任何组合的第一流水线输出的处理结果,此处不限定。
[0069]
处理器运行开始,此时第一缓存队列basic queue为空,因此,第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipeline a6处于等待状态。当有模型的数据输入时,第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipeline a6触发执行。待在第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipeline a6上开始并行处理数据,且有处理结果存储到第一缓存队列basic queue中时,第二流水线
pipeline b4和第二流水线pipelineb5被触发,在第二流水线pipeline b4和第二流水线pipelineb5上从第一缓存队列basic queue中pop到数据后,第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipeline a6与第二流水线pipeline b4和第二流水线pipelineb5,并发执行。
[0070]
待第一流水线pipeline a4,第一流水线pipeline a5,第一流水线pipeline a6处理完所有数据,此时,第二流水线pipeline a4,第二流水线pipeline a5,第二流水线pipeline a6结束执行,然后,当第一缓存队列basic queue中无数据时,第二流水线pipeline b4和第二流水线pipelineb5也结束运行,推理过程结束。
[0071]
需要说明的时,图3和图4实施例中的模型推理结构,其中当各第一流水线的类型相同时,对应的各第二流水线的类型可以相同,也可以不同,图3和图4仅是一种相同类型的第二流水线的举例说明,此处不限定。当第二流水线的类型不同时,也可以采用图3或图4实施例所述的模型推理结构进行数据推理,具体计算过程与前述说明的计算过程一致,此处不赘述。
[0072]
当处理器进行离线模型推理时加载的多个离线模型为不同类型的离线模型,第一缓存队列包括第一存储队列和第一拷贝队列,则处理器在执行上述s102的步骤时,如图5所示,上述s102中的“将各第一流水线的处理结果存储至第一缓存队列”,具体包括以下步骤:
[0073]
s201,同步各第一流水线输出的处理结果,并将同步后的各第一流水线输出的处理结果存储至第一存储队列。
[0074]
本实施例中,当在多个第一流水线上对多个离线模型的待处理数据进行第一并行处理后,需要先同步各第一流水线输出的处理结果,使处理器同时获取到第一流水线输出的处理结果,然后将同步后的所有第一流水线输出的处理结果一起存储至第一存储队列。
[0075]
s202,按照预设份数分别拷贝第一存储队列中的各第一流水线输出的处理结果,以得到预设份数的拷贝结果,并将预设份数的拷贝结果存储至第一拷贝队列。
[0076]
其中,预设份数等于第二流水线的个数,预设份数可以由处理器预先根据第二流水线的个数设置,比如,有3个第二流水线,则对应的预设份数即为3,即将第一存储队列中的各第一流水线输出的处理结果拷贝3份,则每份拷贝结果中就会包括每个第一流水线的处理结果。
[0077]
本实施例中,当处理器将同步后的各第一流水线输出的处理结果存储至第一存储队列后,可以进一步的按照预设份数对第一存储队列中的处理结果进行拷贝,得到预设份数的拷贝结果,使每份拷贝结果中均包括每个第二流水线的处理结果,然后将预设份数的拷贝结果按照份数的排列方式存储至第一拷贝队列。
[0078]
当处理器将拷贝结果存储至第一拷贝队列后,处理器即可执行上述s103的步骤,具体可以执行:在每个第二流水线上从第一拷贝队列中分别读取一份拷贝结果进行第二并行处理。
[0079]
本实施例中,第一流水线的个数可以与第二流水线的个数一致,第一流水线的个数也可以与第二流水线的个数不一致。第一拷贝队列中存储有多份拷贝结果,即多份各第一流水线输出的处理结果,处理器可以在每个第二流水线上从第一拷贝队列中分别读取出其中一份拷贝结果进行处理。例如,在第一流水线的个数和第二流水线的个数相同的情况下,假设有三个第一流水线,#1第一流水线、#2第一流水线、#3第一流水线;有三个第二流水
线,#1第二流水线、#2第二流水线、#3第二流水线;第一拷贝队列中存储有三份拷贝结果,每份拷贝结果均包括#1第一流水线输出的处理结果、#2第二流水线输出的处理结果、#3第三流水线输出的处理结果,则在#1第二流水线上从第一拷贝队列中读取一份拷贝结果,在#2第二流水线上从第一拷贝队列中读取一份拷贝结果,在#3第二流水线上从第一拷贝队列中读取一份拷贝结果,在#1第二流水线、#2第二流水线、#3第二流水线上从第一拷贝队列中读取的拷贝结果均相同。
[0080]
再例如,在第一流水线的个数和第二流水线的个数不相同的情况下,假设有三个第一流水线,#1第一流水线、#2第一流水线、#3第一流水线;有两个第二流水线,#1第二流水线和#2第二流水线;第一拷贝队列中存储有两份拷贝结果,每份拷贝结果均包括#1第一流水线输出的处理结果、#2第二流水线输出的处理结果、#3第三流水线输出的处理结果,则在#1第二流水线上从第一拷贝队列中读取一份拷贝结果,在#2第二流水线上从第一拷贝队列中读取一份拷贝结果,在#1第二流水线和#2第二流水线上从第一拷贝队列中读取的拷贝结果均相同。
[0081]
本技术示例性的说明在第一流水线的个数与第二流水线的个数一致的情况下,上述实施例所述的不同类型模型的推理方法,如图6所示,假设有三个第一流水线,即第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1,且第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1为不同类型的pipeline,他们之间并行运行并且各自的运行结果需要同步后才能放到第一缓存队列中的第一存储队列中(sync queue)中,假设有三个第二流水线,即第二流水线pipeline d1,第二流水线pipelinee1,第二流水线pipelinef1,且第二流水线pipelined1,第二流水线pipelinee1,第二流水线pipeline f1也是不同类型的pipeline,他们之间并行运行并且各自从第一拷贝队列(copy queue)中取同一份数据进行计算,其中一份数据包括第一流水线pipeline a1输出的处理结果、,第一流水线pipelineb1输出的处理结果和第一流水线pipelinec1输出的处理结果,具体的计算过程为:
[0082]
创建1个第一缓存队列,且该第一缓存队列被设置在并行排列的第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1与并行排列的第二流水线pipeline d1,第二流水线pipelinee1,第二流水线pipelinef1之间,第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1并行计算后的结果放到第一缓存队列中,第一缓存队列的特征为该队列内部有两个队列组成,一个是第一存储队列sync queue,另一个第一拷贝队列copy queue,且第一拷贝队列copy queue的输入口连接第一存储队列sync queue的输出口。在实际应用中,第一存储队列sync queue和第一拷贝队列copy queue之间的同步可以由额外的一个线程来处理,该线程在pop掉第一存储队列sync queue中的所有数据后就可以通知第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipeline c1开启下一次执行,并且将pop到的所有数据拷贝三份放到第一拷贝队列copy queue中,第二流水线pipeline d1,第二流水线pipelinee1,第二流水线pipelinef1可以依次从第一拷贝队列copy queue中pop数据,当最后一个第二流水线从第一拷贝队列copy queue中pop数据后通知管理第一存储队列sync queue和第一拷贝队列copy queue的线程进行下一次的数据同步。
[0083]
运行开始,此时第一缓存队列为空,因此,第二流水线pipeline d1,第二流水线
pipelinee1,第二流水线pipelinef1处于等待状态。第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1触发执行,待第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1有数据放入第一缓存队列中,第二流水线pipeline d1,第二流水线pipelinee1,第二流水线pipelinef1被触发,第一流水线pipeline a1,第一流水线pipeline b1,第一流水线pipeline c1和第二流水线pipeline d1,第二流水线pipeline e1,第二流水线pipeline f1并发执行。
[0084]
待第一流水线pipeline a1,第一流水线pipeline b1,第一流水线pipeline c1处理完所有数据,第一流水线pipeline a1,第一流水线pipeline b1,第一流水线pipeline c1结束运行,当第一缓存队列中无数据,第二流水线pipeline d1,第二流水线pipeline e1,第二流水线pipeline f1也结束运行,推理过程结束。
[0085]
可选的,本技术示例性的说明在第一流水线的个数与第二流水线的个数不一致的情况下,上述实施例所述的不同类型模型的推理方法,如图7所示的模型推理结构,假设有三个第一流水线,即第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1,且第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1为不同类型的pipeline,他们之间并行运行并且各自的运行结果需要同步后才能放到第一缓存队列中的第一存储队列中(sync queue)中,假设有两个第二流水线,即第二流水线pipeline d1和第二流水线pipelinee1,且第二流水线pipelined1和第二流水线pipelinee1也是不同类型的pipeline,他们之间并行运行并且各自从第一拷贝队列(copy queue)中取同一份数据进行计算,其中一份数据包括第一流水线pipeline a1输出的处理结果、,第一流水线pipelineb1输出的处理结果和第一流水线pipelinec1输出的处理结果,具体的计算过程为:
[0086]
创建1个第一缓存队列,且该第一缓存队列被设置在并行排列的第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1与并行排列的第二流水线pipeline d1和第二流水线pipelinee1之间,第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1并行计算后的结果放到第一缓存队列中,第一缓存队列的特征为该队列内部有两个队列组成,一个是第一存储队列sync queue,另一个第一拷贝队列copy queue,且第一拷贝队列copy queue的输入口连接第一存储队列sync queue的输出口。在实际应用中,第一存储队列sync queue和第一拷贝队列copy queue之间的同步可以由额外的一个线程来处理,该线程在pop掉第一存储队列sync queue中的所有数据后就可以通知第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipeline c1开启下一次执行,并且将pop到的所有数据拷贝两份放到第一拷贝队列copy queue中,第二流水线pipeline d1和第二流水线pipelinee1可以依次从第一拷贝队列copy queue中pop数据,当最后一个第二流水线从第一拷贝队列copy queue中pop数据后通知管理第一存储队列sync queue和第一拷贝队列copy queue的线程进行下一次的数据同步。
[0087]
运行开始,此时第一缓存队列为空,因此,第二流水线pipeline d1和第二流水线pipelinee1处于等待状态。第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1触发执行,待第一流水线pipeline a1,第一流水线pipelineb1,第一流水线pipelinec1有数据放入第一缓存队列中,第二流水线pipeline d1和第二流水线pipelinee1被触发,第一流水线pipeline a1,第一流水线pipeline b1,第一流水线
pipeline c1和第二流水线pipeline d1和第二流水线pipeline e1并发执行。
[0088]
待第一流水线pipeline a1,第一流水线pipeline b1,第一流水线pipeline c1处理完所有数据,第一流水线pipeline a1,第一流水线pipeline b1,第一流水线pipeline c1结束运行,当第一缓存队列中无数据,第二流水线pipeline d1和第二流水线pipeline e1也结束运行,推理过程结束。
[0089]
需要说明的时,图6和图7实施例中的模型推理结构,其中当各第一流水线的类型相同时,对应的各第二流水线的类型可以相同,也可以不同,图6和图7仅是一种相同类型的第二流水线的举例说明,此处不限定。当第二流水线的类型不同时,也可以采用图6或图7实施例所述的模型推理结构进行数据推理,具体计算过程与前述说明的计算过程一致,此处不赘述。
[0090]
上述实施例中,相同或者不同类型的模型对应的pipeline之间可以通过多线程并行运行,不同pipeline之间通过queue来实现流水运行,queue的长度取决于不同类型的pipeline的个数,即本实施例中第一流水线pipeline的个数越多,queue的长度越长。上述实施例同时实现了并行化及流水化的模型推理,当在机器学习网络运算或神经网络运算的应用场景中,在面对多个离线模型的推理时,可以极大的提高推理速度和推理效率。
[0091]
本技术还提供了一种提升单个流水线性能的并行化及流水化方法。下面实施例将针对单个流水线进行说明。每个流水线包括多个第一线程、一个第二线程和多个第三线程,其中,该流水线为第一流水线和/或第二流水线。图8示出本发明实施例中单个流水线对离线模型的待处理数据处理的流程图。
[0092]
s301,调用多个第一线程对流水线对应的离线模型的待处理数据进行并行前处理,并将各第一线程的前处理结果存储至第二缓存队列。
[0093]
其中,前处理表示数据进入模型进行推理前需要的一系列预处理工作,比如,对数据进行归一化、滤波、降噪、维度转换等工作。第一线程用于加载数据,并对加载的数据进行前处理,因此本实施例中的第一线程的类型是指在第一线程上处理数据的逻辑的类型,比如,第一个第一线程用于对数据进行滤波处理,第二个第一线程用于对数据进行降噪处理,则对应的处理逻辑不同,这两个第一线程的类型即不同。在实际应用中,多个第一线程的类型可以相同,也可以不同。
[0094]
本实施例中,以流水线为第一流水线为例,当处理器在第一流水线上对一个离线模型的待处理数据进行第一并行处理时,处理器可以根据实际应用需求,在第一流水线的内部设置多个线程对一个模型的待处理数据进行并行加载。具体的,处理器可以将一个离线模型的待处理数据按照线程个数分成多个线程任务数据,再调用各第一线程对各线程任务数据进行并行前处理,完成多个第一线程对一个离线模型的待处理数据进行并行前处理的工作。需要说明的是,各第一线程处理的线程任务数据的大小可以相同也可以不相同,例如,假设有3个第一线程,若待处理数据为120张大小相同的图像数据,则将该待处理数据分成3个线程任务数据,即可将这120张图像分成3个线程任务数据,且每个线程任务数据可以均包含40张图像,每个线程任务数据也可以包含不等张图像(比如30张、40张、50张)。当处理器调用多个第一线程对一个离线模型的待处理数据进行并行前处理后,可以得到各第一线程的前处理结果,之后,即可创建一个第二缓存队列,并将各第一线程的前处理结果存储至第二缓存队列。可选的,处理器也可以在进行第一线程的前处理之前创建第二缓存队列,
并在进行第一线程的前处理后,再将各第一线程的前处理结果存储至已创建好的第二缓存队列。当处理器先后得到各第一线程的前处理结果时,处理器可以按照第一线程前处理完成数据的顺序将各第一线程的前处理结果依次存储至第二缓存队列;可选的,当处理器同时得到各第一线程的前处理结果时,处理器可以将各第一线程的前处理结果一起存储至第二缓存队列。
[0095]
s302,调用第二线程加载离线模型,并基于第二缓存队列中的各前处理结果进行离线模型的推理,得到各第二线程的模型推理结果,并将各第二线程的模型推理结果存储至第三缓存队列。
[0096]
本实施例中,当第二缓存队列中存储有各第一线程的前处理结果后,处理器即可调用第二线程先加载离线模型,再从第二缓存队列中读取出各第一线程的前处理结果作为加载离线模型的待输入数据,然后将读取出的各第一线程的前处理结果输入至加载的离线模型中进行推理计算,得到各第二线程中模型推理结果。在实际应用中,处理器调用第二线程将各第一线程的前处理结果分开输入至加载的离线模型中进行各自推理计算,得到各第二线程中模型推理结果;可选的,处理器也可以调用第二线程将各第一线程的前处理结果一起输入至加载的离线模型中进行推理计算,分别得到各第二线程中模型推理结果。当处理器调用第二线程基于第二缓存队列中的各前处理结果进行离线模型推理,得到各第二线程中模型推理结果后,即可创建一个第三缓存队列,并将通过模型推理得到的第二线程中模型推理结果存储至第三缓存队列,可选的,处理器也可以在进行第二线程的模型推理之前创建第三缓存队列,并在进行第二线程的模型推理之后,再将各第二线程的模型推理结果存储至已创建好的第三缓存队列。具体的,当处理器先后得到各第二线程的模型推理结果时,处理器可以按照第二线程的模型推理结果的输出顺序将各第二线程的模型推理结果依次存储至第三缓存队列。若处理器同时得到各第二线程的模型推理结果时,无论何种顺序,处理器可以将各第二线程的模型推理结果一起存储至第三缓存队列。
[0097]
s303,调用多个第三线程从第三缓存队列中读取各第二线程的模型推理结果进行并行后处理。
[0098]
其中,后处理表示模型推理后得到的数据需要的一系列后处理工作,比如,后处理工作可以是一系列框图标记、文字标记、画图等复杂的标量类型的计算,例如,当离线模型推理用于图像分类或识别时,需要对图像中的目标物的尺寸进行框图或文字标记,则对应的后处理用于对目标物进行框图标记或文字标记;当离线模型推理用于进行图像分割时,需要基于分割后的图像数据进行图像重建,则对应的后处理用于执行画图操作。第三线程用于对数据进行后处理。第三线程的类型是指处理数据的逻辑的类型,比如,当离线模型推理用于图像分类或识别时,得到分类或识别出的目标物时,调用第三线程对分类或识别出的目标物进行框图标记或文字标记,以标记出识别或分类后的目标物;当离线模型推理用于进行图像分割时,调用第三线程基于分割后的图像数据进行画图,以得到分割后的图像。在实际应用中,多个第三线程的类型根据实际处理需求可以相同,也可以不同。
[0099]
本实施例中,当处理器调用第二线程完成模型推理计算,并将各第二线程的模型推理结果存储至第三缓存队列中后,处理器即可调用多个第三线程分别从第三缓存队列中读取一个第二线程的模型推理结果,各第三线程对各自读取的一个模型推理结果进行并行后处理;可选的,处理器也可以同时调用多个第三线程从第三缓存队列中读取所有第二线
程的模型推理结果,各第三线程对各自读取的所有模型推理结果进行并行后处理;可选的,处理器也可以依次调用多个第三线程分别从第三缓存队列中读取一个第二线程的模型推理结果,等所有第三线程均获取到数据后,各第三线程再对各自读取的一个模型推理结果进行并行后处理;可选的,处理器也可以依次调用多个第三线程从第三缓存队列中读取所有第二线程的模型推理结果,等所有第三线程均获取到数据后,各第三线程再对各自读取的所有模型推理结果进行并行后处理。当各第三线程均完成了对各自读取到的数据处理后,即完成第一流水线对待处理数据的处理过程,接下来处理器即可获取新的待处理数据,再相应调用多个第一线程、一个第二线程、第二缓存队列、第三缓存队列,多个第三线程按照上述s301-s303的方法对新的待处理数据进行处理,直到没有新的待处理数据需要处理,即第一线程中没有加载和前处理的数据,第二缓存队列中没有数据,第三缓存队列中没有数据,第二线程中没有推理计算的数据,第三线程中没有后处理的数据,即可认为完成了上述一个第一流水线的处理工作,当每个第一流水线都按照上述s301-s303的方法执行后,即可完成多个第一流水线的第一并行处理。
[0100]
在实际应用中,处理器上安装有多种类型的处理器,用于按照前述实施例所述的方法进行模型推理计算,比如,处理器上可以同时安装中央处理器(central processing unit,cpu)、网络处理器(neural-network processing units,npu)、图形处理器(graphics processing unit,gpu)、张量处理单元(tensor processing unit,tpu)等中的至少一种。基于此,上述多个第一线程、第二线程、多个第三线程可以运行在同一个处理器上,也可以运行在不同的处理器上。
[0101]
在一个实施例中,上述多个第一线程和多个第三线程运行于第一处理器上,第二线程运行于第二处理器上。其中,第一处理器可以是cpu,第二处理器可以是npu,当多个第一线程和多个第三线程运行于cpu时,说明cpu负责数据的前处理和后处理工作,当第二线程运行于npu时,说明npu负责网络模型的推理工作。网络模型为深度学习的网络模型,把深度学习网络模型中所有复杂的计算都映射到npu芯片上面临着比较大的挑战,一方面npu芯片不太适合大量复杂标量类型的计算,体现在性能较差,另一方面网络中的算子类型日益丰富,在npu上适配这些算子相较cpu代价也比较大,但是部署场景下日渐丰富的深度学习网络又亟需快速的前向推理。因此,将属于复杂标量类型计算的工作(数据的前处理和后处理)放在cpu上进行运算,而将属于网络模型推理计算的工作(加载模型进行计算)放在npu上进行运算,可以充分利用cpu和npu各自的优点,以最优的资源加快离线模型的推理效率和速度。而且上述多个第一线程、第二缓存队列、第三缓存队列、多个第三线程组成了并行化流水化的方式处理数据,进一步的提高了模型推理速度和效率。
[0102]
在实际应用中,上述处理器调用多个第一线程执行加载数据和前处理,在多个第一线程上处理数据的逻辑可以相同,也可以不相同。当在多个第一线程上处理数据的逻辑相同时,处理器在执行上述s302的步骤时,具体执行:按照各第一线程输出前处理结果的顺序,将各第一线程的前处理结果依次存储至第二缓存队列。
[0103]
多个第一线程对多个加载的数据进行前处理的速度可以相同,也可以不相同,当多个第一线程对多个数据进行前处理的速度不同时,处理器即可将各第一线程的前处理结果按照各第一线程输出前处理结果的顺序依次存储至第二缓存队列中;当多个第一线程对多个数据进行前处理的速度相同时,处理器即可将各第一线程的前处理结果按照任何顺序
存储至第二缓存队列中。
[0104]
当处理器将各第一线程的前处理结果存储至第二缓存队列中后,处理器即可执行上述s302的步骤,具体可以执行:调用第二线程加载离线模型,并从第二缓存队列中依次读取各第一线程的前处理结果,然后将读取出的各前处理结果先后输入至加载的离线模型中进行推理,得到各第二线程的模型推理结果;可选的,处理器也可以同时从第二缓存队列中将所有的第一线程的前处理结果输入至加载的离线模型中进行推理,得到各第二线程的模型推理结果。
[0105]
当处理器将各第二线程的模型推理结果存储至第三缓存队列后,处理器即可执行上述s303的步骤,具体可以执行:调用每个第三线程分别从第三缓存队列中读取出至少一个第二线程的模型推理结果进行并行后处理。
[0106]
本实施例中,第一线程的个数可以与第三线程的个数一致,第一线程的个数也可以与第三线程的个数不一致。当第一线程的个数与第三线程的个数一致,且第三缓存队列中存储有多个第二线程的模型推理结果时,处理器可以调用每个第三线程分别读取第三缓存队列中一个第二线程的模型推理结果,只要各第三线程读取不同的第二线程的模型推理结果即可,然后并行后处理各自读取到的模型推理结果。例如,假设有三个第一线程:#1第一线程、#2第一线程和#3第三线程,三个第三线程,#1第三线程、#2第三线程、#3第三线程,第三缓存队列中存储有#1第一线程的前处理结果在第二线程上经过模型推理后得到的#1第二线程的模型推理结果、#2第一线程的前处理结果在第二线程上经过模型推理后得到的#2第二线程的模型推理结果、#3第一线程的前处理结果在第二线程上经过模型推理后得到的#3第二线程的模型推理结果,#1第三线程可以从第三缓存队列中读取#1第二线程的模型推理结果;#2第三线程可以从第三缓存队列中读取#2第二线程的模型推理结果;#3第三线程可以从第三缓存队列中读取#3第二线程的模型推理结果。可选的,#1第三线程可以从第三缓存队列中读取#2第二线程的模型推理结果;#2第三线程可以从第三缓存队列中读取#3第二线程的模型推理结果;#3第三线程可以从第三缓存队列中读取#1第二线程的模型推理结果;可选的,#1第三线程可以从第三缓存队列中读取#3第二线程的模型推理结果;#2第三线程可以从第三缓存队列中读取#1第二线程的模型推理结果;#3第三线程可以从第三缓存队列中读取#2第二线程的模型推理结果。
[0107]
可选的,当第一线程的个数与第三线程的个数不一致,且第三缓存队列中存储有多个第二线程的模型推理结果时,处理器可以调用每个第三线程分别读取第三缓存队列中多个第二线程的模型推理结果,然后并行后处理各自读取到的模型推理结果。例如,假设有三个第一线程:#1第一线程、#2第一线程和#3第三线程,两个第三线程,#1第三线程和#2第三线程,第三缓存队列中存储有#1第一线程的前处理结果在第二线程上经过模型推理后得到的#1第二线程的模型推理结果、#2第一线程的前处理结果在第二线程上经过模型推理后得到的#2第二线程的模型推理结果、#3第一线程的前处理结果在第二线程上经过模型推理后得到的#3第二线程的模型推理结果,#1第三线程可以从第三缓存队列中读取#1第二线程的模型推理结果和#2第二线程的模型推理结果,#2第三线程可以从第三缓存队列中读取#3第二线程的模型推理结果。需要说明的是,各第三线程可以从第三缓存队列中读取出任意组合的第二线程的模型推理结果,此处不限定。
[0108]
本技术示例性的说明在第一线程的个数与第三线程的个数一致的情况下,上述实
施例所述的在各第一线程上处理数据的逻辑相同时对应流水线上的数据处理方法,如图9所示,假设有三个第一线程,即第一线程data loader a1、第一线程data loader a2、第一线程data loader a3,且第一线程data loader a1、第一线程data loader a2、第一线程data loader a3的类型相同,三个第三线程,即第三线程post processor a1、第三线程post processo a2、第三线程post processo a3,且第三线程post processor a1、第三线程post processo a2、第三线程post processo a3的类型相同。第一线程data loader a1、第一线程data loader a2、第一线程data loader a3采用多线程并发执行;第三线程post processor a1、第三线程post processo a2、第三线程post processo a3采用多线程并发执行;第一线程data loader和第三线程post processor之间创建模型运算单元(model runner),且在第一线程data loader与模型运算单元model runner之间创建一个第二缓存队列basic queue1,在模型运算单元model runner与第三线程post processor之间创建一个第三缓存队列basic queue2。如9图所示,第一线程data loader a1,第一线程data loadea2,第一线程data loadea3为相同类型的data loader,他们之间并行运行并且各自的运行结果不需要同步即可放到第二缓存队列basic queue1中,第三线程post processor a1,第三线程post processor a2,第三线程post processor a3是相同类型的post processor,他们之间并行运行并且各自独立的从第三缓存队列basic queue2中取数据。具体计算过程为:
[0109]
创建1个第二缓存队列basic queue1,该第二缓存队列basic queue1被设置在并行排列的第一线程data loader a1,第一线程data loadera2,第一线程data loadera3与模型运算单元model runner之间,第一线程data loader a1,第一线程data loadera2,第一线程data loadera3并行计算后的结果放到第二缓存队列basic queue1中,第二缓存队列basic queue1的特征为只要一个第一线程data loader push数据后即可开始下一次执行,模型运算单元model runner一次pop一份第二缓存队列basic queue1中的数据。创建1个第三缓存队列basic queue2,该第三缓存队列basic queue2被设置在模型运算单元model runner和并行排列的第三线程post processor a1,第三线程post processor a2,第三线程post processor a3之间,第三缓存队列basic queue2的特征为模型运算单元model runner每次push一份数据到第三缓存队列basic queue2,第三线程post processor每次从第三缓存队列basic queue2中pop一份数据。其中,一份数据包括第一线程data loader a1的前处理结果在模型运算单元model runner上经过模型推理后得到的模型推理结果,或第一线程data loader a2的前处理结果在模型运算单元model runner上经过模型推理后得到的模型推理结果,或第一线程data loader a3的前处理结果在模型运算单元model runner上经过模型推理后得到的模型推理结果。
[0110]
运行开始,此时第二缓存队列basic queue1和第三缓存队列basic queue2都为空,因此,模型运算单元model runner与第三线程post processor a1,第三线程post processora2,第三线程post processora3处于等待状态。第一线程data loader a1,第一线程data loader a2,第一线程data loader a3触发执行。待第一线程data loader有数据放入第二缓存队列basic queue1中,模型运算单元model runner被触发,模型运算单元model runner pop到数据后,第一线程data loader与模型运算单元model runner并发执行。模型运算单元model runner运行后,把数据push到与第三线程post processor关联的
第三缓存队列basic queue2后,第三线程post processor触发运行,模型运算单元model runner和第三线程post processor并发执行。
[0111]
待第一线程data loader处理完所有数据,第二缓存队列basic queue1和第三缓存队列basic queue2中无数据,此时,模型运算单元model runner结束执行,然后,第三线程post processor也结束运行。推理过程结束。
[0112]
需要说明的是,上述实施例中当第一线程data loader输出数据时,处理器可以调用第二线程将第一线程输出的数据存储到第二缓存队列中;当上述实施例中的模型运算单元model runner在执行时,也可以是处理器调用第二线程实现;上述实施例中当模型运算单元model runner运行完输出各第二线程的模型推理结果时,处理器也可以调用第二线程将各第二线程的模型推理结果存储到第三缓存队列中。上述多个data loader对应多个第一线程,多个post processor对应多个第三线程,也即data loader和post processor均运行在第一处理器上,model runner运行在第二处理器上,实际应用中,第一处理器为cpu,第二处理器为npu。
[0113]
可选的,本技术示例性的说明在第一流水线的个数与第二流水线的个数不一致的情况下,上述实施例所述的在各第一线程上处理数据的逻辑相同时对应流水线上的数据处理方法,如图10所示,假设有三个第一线程,即第一线程data loader a1、第一线程data loader a2、第一线程data loader a3,且第一线程data loader a1、第一线程data loader a2、第一线程data loader a3的类型相同,两个第三线程,即第三线程post processor a1和第三线程post processo a2、,且第三线程post processor a1和第三线程post processo a2的类型相同。第一线程data loader a1、第一线程data loader a2、第一线程data loader a3采用多线程并发执行;第三线程post processor a1和第三线程post processo a2采用多线程并发执行;在第一线程data loader和第三线程post processor之间创建模型运算单元(model runner),且第一线程data loader与模型运算单元model runner之间设置一个第二缓存队列basic queue1,模型运算单元model runner与第三线程post processor之间设置一个第三缓存队列basic queue2。如10图所示,第一线程data loader a1,第一线程data loadea2,第一线程data loadea3为相同类型的data loader,他们之间并行运行并且各自的运行结果不需要同步即可放到第二缓存队列basic queue1中,第三线程post processor a1和第三线程post processor a2是相同类型的post processor,他们之间并行运行并且各自独立的从第三缓存队列basic queue2中取数据。具体计算过程为:
[0114]
创建1个第二缓存队列basic queue1,该第二缓存队列basic queue1被设置在并行排列的第一线程data loader a1,第一线程data loadera2,第一线程data loadera3与模型运算单元model runner之间,第一线程data loader a1,第一线程data loadera2,第一线程data loadera3并行计算后的结果放到第二缓存队列basic queue1中,第二缓存队列basic queue1的特征为只要一个第一线程data loader push数据后即可开始下一次执行,模型运算单元model runner一次pop一份第二缓存队列basic queue1中的数据。创建1个第三缓存队列basic queue2,该第三缓存队列basic queue2被设置在模型运算单元model runner和并行排列的第三线程post processor a1和第三线程post processor a2之间,第三缓存队列basic queue2的特征为模型运算单元model runner每次push一份数据
到第三缓存队列basic queue2,第三线程post processor每次从第三缓存队列basic queue2中pop一份数据。其中,一份数据包括第一线程data loader a1的模型推理结果,或第一线程data loader a2的模型推理结果,或第一线程data loader a3的模型推理结果。
[0115]
运行开始,此时第二缓存队列basic queue1和第三缓存队列basic queue2都为空,因此,模型运算单元model runner与第三线程post processor a1和第三线程post processora2处于等待状态。第一线程data loader a1,第一线程data loader a2,第一线程data loader a3触发执行。待第一线程data loader有数据放入第二缓存队列basic queue1中,模型运算单元model runner被触发,模型运算单元model runner pop到数据后,第一线程data loader与模型运算单元model runner并发执行。模型运算单元model runner运行后,把数据push到与第三线程post processor关联的第三缓存队列basic queue2后,第三线程post processor触发运行,模型运算单元model runner和第三线程post processor并发执行。
[0116]
待第一线程data loader处理完所有数据,第二缓存队列basic queue1和第三缓存队列basic queue2中无数据,此时,模型运算单元model runner结束执行,然后,第三线程post processor也结束运行。推理过程结束。
[0117]
需要说明的时,图9和图10实施例中的单个流水线的结构,其中当在各第一线程上处理数据的逻辑相同时,对应的在各第三线程水线上处理数据的逻辑可以相同,也可以不同,图9和图10仅是一种处理数据的逻辑相同的第三线程的举例说明,此处不限定。当第三线程处理数据的逻辑不同时,也可以采用图9和图10实施例所述的单个流水线的结构,具体计算过程与前述说明的计算过程一致,此处不赘述。
[0118]
当在多个第一线程上处理数据的逻辑不同时,处理器在执行上述s301的步骤时,具体执行:同步各第一线程输出的前处理结果,并将同步后的各第一线程的前处理结果存储至第二缓存队列。
[0119]
本实施例中,当多个第一线程对一个模型的待处理数据进行并行前处理后,需要先同步各第一线程的前处理结果,使处理器同时获取到个第一线程的前处理结果,然后将同步后的所有第一线程的前处理结果一起存储至第二存储队列。
[0120]
当处理器将各第一线程的前处理结果存储至第二缓存队列中后,处理器即可执行上述s302的步骤,具体可以执行:调用第二线程加载离线模型,处理器可以同时从第二缓存队列中将所有的第一线程的前处理结果输入至加载的离线模型中进行推理,得到各第二线程的模型推理结果;处理器可以从第二缓存队列中将所有的第一线程的前处理结果依次输入至加载的离线模型中分别进行推理,得到各第二线程的模型推理结果。
[0121]
当处理器得到各第二线程的模型推理结果后,处理器即可执行上述s302的步骤,具体可以执行:按照预设份数分别拷贝各第二线程的模型推理结果,以得到预设份数的拷贝结果,并将预设份数的拷贝结果存储至第三缓存队列。
[0122]
其中,预设份数等于第三线程的个数,预设份数可以由处理器预先根据第三线程的个数设置,比如,有3个第三线程,则对应的预设份数即为3,即将各第二线程的模型推理结果拷贝3份。
[0123]
本实施例中,当处理器得到各第二线程的模型推理结果后,可以进一步的按照预设份数将各第二线程的模型推理结果分别进行拷贝,得到预设份数的拷贝结果,使每份拷
贝结果均包括每个第二线程的模型推理结果,然后将预设份数的拷贝结果按照份数的排列方式存储至第三缓存队列。
[0124]
当处理器将拷贝结果存储至第三缓存队列后,处理器即可执行上述s303的步骤,具体可以执行:调用每个第三线程从第三缓存队列中分别读取一份拷贝结果进行并行后处理。
[0125]
本实施例中,第一线程的个数可以与第三线程的个数一致,第一线程的个数也可以与第三线程的个数不一致。第三缓存队列中存储有多份拷贝结果,即多份各第二线程的模型推理结果,处理器可以调用每个第三线程从第三缓存队列中分别读取出其中一份拷贝结果进行并行后处理。例如,在第一线程的个数可以与第三线程的个数一致的情况下,假设有三个第一线程,#1第一线程、#2第一线程、#3第一线程;有三个第三线程,#1第三线程、#2第三线程、#3第三线程;第三缓存队列中存储有三份拷贝结果,每份拷贝结果均包括#1第一线程在第二线程上经过模型推理后得到的#1第二线程的模型推理结果、#2第一线程在第二线程上经过模型推理后得到的#2第二线程的模型推理结果、#3第一线程在第二线程上经过模型推理后得到的#3第二线程的模型推理结果,则#1第三线程从第三缓存队列中读取一份拷贝结果,#2第三线程从第三缓存队列中读取一份拷贝结果,#3第三线程从第三缓存队列中读取一份拷贝结果,#1第三线程、#2第三线程、#3第三线程从第三缓存队列中读取的拷贝结果均相同。
[0126]
再例如,在第一线程的个数可以与第三线程的个数不一致的情况下,假设有三个第一线程,#1第一线程、#2第一线程、#3第一线程;有两个第三线程,#1第三线程和#2第三线程;第三缓存队列中存储有两份拷贝结果,每份拷贝结果均包括#1第二线程的模型推理结果、#2第二线程的模型推理结果、#3第二线程的模型推理结果,则#1第三线程从第三缓存队列中读取一份拷贝结果,#2第三线程从第三缓存队列中读取一份拷贝结果,#1第三线程和#2第三线程从第三缓存队列中读取的拷贝结果均相同。
[0127]
本技术示例性的说明在第一线程的个数与第三线程的个数一致的情况下,上述实施例所述的在各第一线程上处理数据的逻辑不同时对应流水线上的数据处理方法,如图11所示,假设有三个第一线程,即第一线程data loader a1、第一线程data loader b1、第一线程data loader c1,且第一线程data loader a1、第一线程data loader b1、第一线程data loader c1的类型不同,三个第三线程,即第三线程post processor a1、第三线程post processo b1、第三线程post processo c1,且第三线程post processor a1、第三线程post processo b1、第三线程post processo c1的类型不同。第一线程data loader a1、第一线程data loader b1、第一线程data loader c1采用多线程并发执行;第三线程post processor a1、第三线程post processo b1、第三线程post processo c1采用多线程并发执行;在第一线程data loader和第三线程post processor之间创建模型运算单元model runner,且在第一线程data loader与模型运算单元model runner之间创建第二缓存队列sync queue,在模型运算单元model runner与第三线程post processor之间创建第三缓存队列copy queue。如11图所示,第一线程data loader a1、第一线程data loader b1、第一线程data loader c1为不同类型的data loader,他们之间并行运行并且各自的运行结果需要同步即可放到第二缓存队列sync queue中,第三线程post processor a1、第三线程post processo b1、第三线程post processo c1是不同类型的post processor,他们之间
并行运行并且各自独立的从第三缓存队列copy queue中取数据。具体计算过程为:
[0128]
创建1个第二缓存队列sync queue,该第二缓存队列sync queue被设置在并行排列的第一线程data loader a1,第一线程data loadera2,第一线程data loadera3与模型运算单元model runner之间,第一线程data loader a1,第一线程data loadera2,第一线程data loadera3并行计算后的结果放到第二缓存队列sync queue中,第二缓存队列sync queue的特征为只要一个第一线程data loader push数据后即可开始下一次执行,模型运算单元model runner一次pop一份第二缓存队列sync queue中的数据。创建1个第三缓存队列copy queue,该第三缓存队列copy queue被设置在模型运算单元model runner和并行排列的第三线程post processor a1,第三线程post processor a2,第三线程post processor a3之间,第三缓存队列copy queue的特征为模型运算单元model runner每次输出各第二线程的模型推理结果时,按照预设份数拷贝各第二线程的模型推理结果,并将各第二线程的模型推理结果push到第三缓存队列copy queue,第三线程post processor每次从第三缓存队列copy queue中pop一份数据。其中,一份数据同时包括第一线程data loader a1的模型推理结果、第一线程data loader a2的模型推理结果和第一线程data loader a3的模型推理结果。
[0129]
运行开始,此时第二缓存队列sync queue与第三缓存队列copy queue为空,因此,模型运算单元model runner与第三线程post processor a1,第三线程post processor b1,第三线程post processor c1处于等待状态。第一线程data loader a1,第一线程data loader b1,第一线程data loader c1触发执行。待前处理线程有数据放入第二缓存队列sync queue中,模型运算单元model runner被触发,模型运算单元model runner pop到所有数据后,第一线程data loader与模型运算单元model runner并发执行。模型运算单元model runner运行后,把输出的各第二线程的模型推理结果拷贝三份传给第三缓存队列copy queue后,第三线程post processor触发运行并且各第三线程post processor可以依次pop数据,最后一个post processor pop数据后,模型运算单元model runner和第三线程post processor并发执行。
[0130]
待第一线程data loader处理完所有数据,第二缓存队列sync queue中无数据,第三缓存队列copy queue中无数据,此时,模型运算单元model runner结束执行,然后,第三线程post processor也结束运行。推理过程结束。
[0131]
可选的,本技术示例性的说明在第一线程的个数与第三线程的个数不一致的情况下,上述实施例所述的在各第一线程上处理数据的逻辑不同时对应流水线上的数据处理方法,如图12所示,假设有三个第一线程,即第一线程data loader a1、第一线程data loader b1、第一线程data loader c1,且第一线程data loader a1、第一线程data loader b1、第一线程data loader c1的类型不同,三个第三线程,即第三线程post processor a1和第三线程post processo b1,且第三线程post processor a1和第三线程post processo b1的类型不同。第一线程data loader a1、第一线程data loader b1、第一线程data loader c1采用多线程并发执行;第三线程post processor a1和第三线程post processo b1采用多线程并发执行;在第一线程data loader和第三线程post processor之间创建模型运算单元model runner,且在第一线程data loader与模型运算单元model runner之间创建第二缓存队列sync queue,在模型运算单元model runner与第三线程post processor之间创建
第三缓存队列copy queue。如12图所示,第一线程data loader a1、第一线程data loader b1、第一线程data loader c1为不同类型的data loader,他们之间并行运行并且各自的运行结果需要同步即可放到第二缓存队列sync queue中,第三线程post processor a1和第三线程post processo b1是不同类型的post processor,他们之间并行运行并且各自独立的从第三缓存队列copy queue中取数据。具体计算过程为:
[0132]
创建1个第二缓存队列sync queue,该第二缓存队列sync queue被设置在并行排列的第一线程data loader a1,第一线程data loadera2,第一线程data loadera3与模型运算单元model runner之间,第一线程data loader a1,第一线程data loadera2,第一线程data loadera3并行计算后的结果放到第二缓存队列sync queue中,第二缓存队列sync queue的特征为只要一个第一线程data loader push数据后即可开始下一次执行,模型运算单元model runner一次pop一份第二缓存队列sync queue中的数据。创建1个第三缓存队列copy queue,该第三缓存队列copy queue被设置在模型运算单元model runner和并行排列的第三线程post processor a1和第三线程post processor a2之间,第三缓存队列copy queue的特征为模型运算单元model runner每次输出各第二线程的模型推理结果时,按照预设份数拷贝各第二线程的模型推理结果,并将各第二线程的模型推理结果push到第三缓存队列copy queue,第三线程post processor每次从第三缓存队列copy queue中pop一份数据。其中,一份数据同时包括第一线程data loader a1的模型推理结果、第一线程data loader a2的模型推理结果和第一线程data loader a3的模型推理结果。
[0133]
运行开始,此时第二缓存队列sync queue与第三缓存队列copy queue为空,因此,模型运算单元model runner与第三线程post processor a1和第三线程post processor b1处于等待状态。第一线程data loader a1,第一线程data loader b1,第一线程data loader c1触发执行。待前处理线程有数据放入第二缓存队列sync queue中,模型运算单元model runner被触发,模型运算单元model runner pop到所有数据后,第一线程data loader与模型运算单元model runner并发执行。模型运算单元model runner运行后,把输出的各第二线程的模型推理结果拷贝两份传给第三缓存队列copy queue后,第三线程post processor触发运行并且各第三线程post processor可以依次pop数据,最后一个post processor pop数据后,模型运算单元model runner和第三线程post processor并发执行。
[0134]
待第一线程data loader处理完所有数据,第二缓存队列sync queue中无数据,第三缓存队列copy queue中无数据,此时,模型运算单元model runner结束执行,然后,第三线程post processor也结束运行。推理过程结束。
[0135]
需要说明的是,图11和图12实施例中的单个流水线的结构,其中当在各第一线程上处理数据的逻辑不同时,对应的在各第三线程水线上处理数据的逻辑可以相同,也可以不同,图11和图12仅是一种处理数据的逻辑不同的第三线程的举例说明,此处不限定。当第三线程处理数据的逻辑相同时,也可以采用图11和图12实施例所述的单个流水线的结构,具体计算过程与前述说明的计算过程一致,此处不赘述。
[0136]
上述实施例中,相同或者不同类型的第一线程之间可以通过多线程并行运行,不同线程之间通过缓存队列来实现流水运行,缓存队列的长度取决于不同类型的第一线程的个数,即第一线程的个数越多,缓存队列的长度越长。上述实施例同时实现了单个流水线内部的并行化及流水线式的数据处理过程,在面对多个离线模型的推理时,可以极大的提高
推理速度和推理效率。
[0137]
需要说明的是,上述单个流水线内部实现并行化及流水化的模型推理方法均是以第一流水线为例说明的,当然第二流水线的内容也可以按照上述方法执行模型推理方法,只是输入至第一流水线的数据为模型的待处理数据,而输入至第二流水线的数据为第一流水线的处理结果,第二流水线内部数据的处理或推理方法请参见前述说明,此处不赘述。
[0138]
综合上述所有实施例,本技术提供了一种离线模型推理的方法,该离线模型推理方法可以应用于如图13所示的离线模型推理结构,该离线模型推理结构结合了图3和图9实施例所示的离线模型推理结构,即实现了多个相同类型的流水线的并行化及流水化的模型推理方法,具体的推理过程包括:第一流水线a1中的第一线程data loader a1,第一线程data loader a2,第一线程data loader a3并行触发执行;第一流水线a2中的第一线程data loader a4,第一线程data loader a5,第一线程data loader a6并行触发执行;第一流水线a3中的第一线程data loader a7,第一线程data loader a8、第一线程data loader a9并行触发执行。第一流水线a1、第一流水线a2、第一流水线a3并行触发执行。对于每个第一流水线,待有其中任一第一线程对加载的待处理数据进行前处理并将前处理后的数据放入到第二缓存队列basic queue1中时,模型运算单元model runner被触发,模型运算单元model runner从第二缓存队列basic queue1中读取前处理后的数据,并加载相应的模型基于读取到的前处理后的数据进行推理运算得到对应第二线程的模型推理结果,再将第二线程的模型推理结果存储到第三缓存队列basic queue2中,第三线程从第三缓存队列basic queue2中读取第二线程的模型推理结果进行后处理,并将后处理后的数据存储至第一缓存队列basic queue中。
[0139]
第二流水线b1中的第一线程data loader b1,第一线程data loader b2,第一线程data loader b3并行触发执行;第一流水线b2中的第一线程data loader b4,第一线程data loader b5,第一线程data loader b6并行触发执行;第一流水线b3中的第一线程data loader b7,第一线程data loader b8、第一线程data loader b9并行触发执行。对于每个第二流水线,待有其中任一第一线程对加载的数据进行前处理并将前处理后的数据放入到第二缓存队列basic queue1中时,模型运算单元model runner被触发,模型运算单元model runner从第二缓存队列basic queue1中读取前处理后的数据,并加载相应的模型基于读取到的前处理后的数据进行推理运算得到对应第二线程的模型推理结果,再将第二线程的模型推理结果存储到第三缓存队列basic queue2中,第三线程从第三缓存队列basic queue2中读取第二线程的模型推理结果进行后处理,并将后处理后的数据存储至第一缓存队列basic queue中。上述第一线程加载的数据为第一流水线输出的后处理后的数据。上述仅为简单说明,关于图13实施例的具体推理计算方法可参见前述图3和图9实施例所示的模型推理过程,此处不赘述。
[0140]
本技术还提供了一种离线模型推理的方法,该离线模型推理的方法可以应用于如图14所示的离线模型推理结构,该离线模型推理结构结合了图6和图11实施例所示的离线模型推理结构,即实现了多个不同类型的流水线的并行化及流水化的离线模型推理方法,具体的推理过程包括:第一流水线pipeline a1中的第一线程data loader a1,第一线程data loader b1,第一线程data loader c1并行触发执行;第一流水线pipeline b1中的第一线程data loader d1,第一线程data loader e1,第一线程data loader f1并行触发执
行;第一流水线pipeline c1中的第一线程data loader g1,第一线程data loader h1、第一线程data loader k1并行触发执行。第一流水线pipeline a1、第一流水线pipeline b1、第一流水线pipeline c1并行触发执行。对于每个第一流水线,待有其中任一第一线程对加载的待处理数据进行前处理并将前处理后的数据放入到第二缓存队列sync queue中时,模型运算单元model runner被触发,模型运算单元model runner从第二缓存队列sync queue中读取前处理后的数据,并加载相应的模型基于读取到的前处理后的数据进行推理运算得到对应第二线程的模型推理结果,再将第二线程的模型推理结果按照预设分数拷贝至第三缓存队列copy queue中,第三线程从第三缓存队列copy queue中读取出各第二线程的模型推理结果进行后处理,并将后处理后的数据存储至第一缓存队列sync queue中,并按照预设份数将后处理后的数据进行拷贝,得到拷贝后的数据,以及将拷贝后的数据存储至第一拷贝队列copy queue中。
[0141]
第二流水线pipeline d1中的第一线程data loader a1,第一线程data loader b1,第一线程data loader c1并行触发执行;第二流水线pipeline e1中的第一线程data loader d1,第一线程data loader e1,第一线程data loader f1并行触发执行;第二流水线pipeline f1中的第一线程data loader g1,第一线程data loader h1、第一线程data loader k1并行触发执行。对于每个第二流水线,待有其中任一第一线程对加载的数据进行前处理并将前处理后的数据放入到第二缓存队列sync queue中时,模型运算单元model runner被触发,模型运算单元model runner从第二缓存队列sync queue中读取前处理后的数据,并加载相应的模型基于读取到的前处理后的数据进行推理运算得到对应第二线程的模型推理结果,再将第二线程的模型推理结果按照预设份数拷贝至第三缓存队列copy queue中,第三线程从第三缓存队列copy queue中读取第二线程的模型推理结果进行后处理,并将后处理后的数据存储至第一缓存队列basic queue中。上述第一线程加载的数据为第一拷贝队列copy queue中存储的拷贝后的数据。上述仅为简单说明,关于图14实施例的具体推理计算方法可参见前述图6和图11实施例所示的模型推理过程,此处不赘述。
[0142]
需要说明的是,图13和图14所述的模型结构仅是一种应用的说明,图13中各第一流水线的类型相同,各第二流水线的类型相同,每个第一流水线中的各第一线程处理数据的逻辑相同,每个第二流水线中的各第一线程处理数据的逻辑相同。图14中各第一流水线的类型不同,各第二流水线的类型不同,每个第一流水线中的各第一线程处理数据的逻辑不同,每个第二流水线中的各第一线程处理数据的逻辑不同。在实际应用中,图13和图14所述的离线模型推理结构中,各第一流水线的类型可以相同,且各第二流水线的类型不同;或者,各第一流水线的类型可以不同,且各第二流水线的类型相同;各第一流水线的类型可以不同,且各第二流水线的类型不同。对于每个流水线中的结构,每个流水线中的第一线程处理数据的逻辑可以相同,且各第三线程处理数据的逻辑相同;可选的,每个流水线中的第一线程处理数据的逻辑可以相同,且各第三线程处理数据的逻辑不同;可选的,各第一线程处理数据的逻辑可以不同,且各第三线程处理数据的逻辑相同;可选的,各第一线程处理数据的逻辑可以不同,且各第三线程处理数据的逻辑不同。相应的,图13和图14所述的离线模型推理结构中,第一流水线的个数和第二流水线的个数相同,每个流水线包含的第一线程的个数与第三线程的个数相同。但在实际应用中,第一流水线的个数和第二流水线的个数也可以相同,且每个流水线包含的第一线程的个数与第三线程的个数不相同;可选的,第一流
水线的个数和第二流水线的个数也可以不相同,且每个流水线包含的第一线程的个数与第三线程的个数相同;可选的,第一流水线的个数和第二流水线的个数也可以不相同,且每个流水线包含的第一线程的个数与第三线程的个数不相同。各流水线的类型、每个流水线中包含的各线程处理数据的逻辑均可以根据实际推理需求确定。
[0143]
应该理解的是,虽然图2、图5和图8的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、图5和图8中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0144]
在一个实施例中,如图15所示,提供了一种离线模型推理的装置,包括:获取模块11、第一并行处理模块12和第二并行处理模块13,其中:
[0145]
获取模块11,用于获取多个离线模型的待处理数据。
[0146]
第一并行处理模块12,用于在多个第一流水线上分别对所述多个离线模型的待处理数据进行第一并行处理,并将各所述第一流水线输出的处理结果存储至第一缓存队列。
[0147]
第二并行处理模块13,用于在多个第二流水线上分别从所述第一缓存队列中读取各所述第一流水线输出的处理结果进行第二并行处理,以完成所述多个离线模型的推理。
[0148]
在一个实施例中,若所述多个离线模型为相同类型的模型,上述第一并行处理模块12具体用于按照各所述第一流水线输出所述处理结果的顺序,将各所述第一流水线输出的处理结果依次存储至所述第一缓存队列。
[0149]
在一个实施例中,上述第二并行处理模块13具体用于在每个所述第二流水线上分别从所述第一缓存队列中读取出至少一个所述第一流水线输出的处理结果进行第二并行处理。
[0150]
在一个实施例中,若所述多个模型为不同类型的离线模型,所述第一缓存队列包括第一存储队列和第一拷贝队列,如图16所示,上述第一并行处理模块12,包括:
[0151]
同步单元121,用于同步各所述第一流水线输出的处理结果,并将同步后的各所述第一流水线输出的处理结果存储至所述第一存储队列;
[0152]
拷贝单元122,用于按照预设份数分别拷贝所述第一存储队列中的各所述第一流水线输出的处理结果,以得到所述预设份数的拷贝结果,并将所述预设份数的拷贝结果存储至所述第一拷贝队列,其中,所述预设份数等于所述第二流水线的个数。
[0153]
在一个实施例中,上述第二并行处理模块13具体用于在每个所述第二流水线上从所述第一拷贝队列中分别读取一份所述拷贝结果进行第二并行处理。
[0154]
在一个实施例中,每个所述第一流水线采用多线程执行,包括多个第一线程、一个第二线程和多个第三线程,如图17所示,上述第一并行处理模块12包括:
[0155]
前处理单元123,用于针对每个所述第一流水线,调用所述多个第一线程对所述流水线对应的所述离线模型的待处理数据进行并行前处理,并将各所述第一线程的前处理结果存储至第二缓存队列;
[0156]
推理单元124,用于调用所述第二线程加载所述模型,并基于所述第二缓存队列中
的各所述前处理结果进行所述模型推理,得到各所述第二线程的模型推理结果,并将各所述第二线程的模型推理结果存储至第三缓存队列;
[0157]
后处理单元125,用于调用所述多个第三线程从所述第三缓存队列中读取各所述第二线程的模型推理结果进行并行后处理;
[0158]
其中,所述多个第一线程和所述多个第三线程运行于第一处理器上,所述第二线程运行于第二处理器上。
[0159]
在一个实施例中,若在所述多个第一线程上处理数据的逻辑相同,上述前处理单元123具体用于调用所述第二线程按照各所述第一线程输出所述前处理结果的顺序,将各所述第一线程的前处理结果依次存储至所述第二缓存队列。
[0160]
在一个实施例中,上述后处理单元125具体用于调用每个所述第三线程分别从所述第三缓存队列中读取出至少一个所述第二线程的模型推理结果进行并行后处理。
[0161]
在一个实施例中,在所述多个第一线程上处理数据的逻辑不同,上述前处理单元123具体用于同步各所述第一线程输出的前处理结果,并将同步后的各所述第一线程的前处理结果存储至所述第二缓存队列。
[0162]
在一个实施例中,上述拷贝单元122具体用于按照预设份数分别拷贝各所述第二线程的模型推理结果,得到所述预设份数的拷贝结果,将所述预设份数的拷贝结果存储至所述第三缓存队列;所述预设份数等于所述第三线程的个数。
[0163]
在一个实施例中,上述后处理单元125具体用于调用每个所述第三线程从所述第三缓存队列中分别读取一份所述拷贝结果进行并行后处理。
[0164]
关于离线模型推理的装置的具体限定可以参见上文中对于离线模型推理的方法的限定,在此不再赘述。上述离线模型推理的装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
[0165]
获取多个离线模型的待处理数据;
[0166]
在多个第一流水线上分别对所述多个离线模型的待处理数据进行第一并行处理,并将各所述第一流水线输出的处理结果存储至第一缓存队列;
[0167]
在多个第二流水线上分别从所述第一缓存队列中读取各所述第一流水线输出的处理结果进行第二并行处理,以完成所述多个离线模型的推理。
[0168]
根据不同的应用场景,本披露的计算设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本披露的处理器或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的处理器或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景
中。在一个或多个实施例中,根据本披露方案的算力高的处理器或装置可以应用于云端设备(例如云端服务器),而功耗小的处理器或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。上述实施例提供的一种计算机设备,其实现原理和技术效果与上述方法实施例类似,在此不再赘述。
[0169]
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
[0170]
获取多个离线模型的待处理数据;
[0171]
在多个第一流水线上分别对所述多个离线模型的待处理数据进行第一并行处理,并将各所述第一流水线输出的处理结果存储至第一缓存队列;
[0172]
在多个第二流水线上分别从所述第一缓存队列中读取各所述第一流水线输出的处理结果进行第二并行处理,以完成所述多个离线模型的推理。
[0173]
上述实施例提供的一种计算机可读存储介质,其实现原理和技术效果与上述方法实施例类似,在此不再赘述。
[0174]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。
[0175]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0176]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

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

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

相关文献