掌桥专利:专业的专利平台
掌桥专利
首页

数据处理方法、装置、计算机可读存储介质及计算机设备

文献发布时间:2024-04-18 19:58:30


数据处理方法、装置、计算机可读存储介质及计算机设备

技术领域

本申请涉及数据处理技术领域,具体涉及一种数据处理方法、装置、计算机可读存储介质及计算机设备。

背景技术

模拟人类实际神经网络的数学方法问世以来,人们已慢慢习惯了把这种人工神经网络直接称为神经网络。神经网络在系统辨识、模式识别、智能控制等领域有着广泛而吸引人的前景,在图像处理、信号处理、卫生保健以及医疗领域也都得到了充分的应用。神经网络的广泛使用大大提升了这些领域的业务处理能力以及业务处理效率。

然而,目前在一些场景下,将基于神经网络的各类应用模型部署上线后,在使用这些应用模型进行模型推理时,会出现模型推理效率低下的情况。

发明内容

本申请实施例提供一种数据处理方法、装置、计算机可读存储介质及计算机设备,该方法可以大大提升神经网络模型的模型推理效率。

本申请第一方面提供一种数据处理方法,方法包括:

响应于基于神经网络模型的推理请求,获取所述推理请求中包含的推理请求数据;

识别所述神经网络模型中包含的多个算子以及所述多个算子之间的关联关系;

基于所述关联关系将所述多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;

基于所述多个不同的计算流同步执行所述推理请求数据对应的推理任务,得到推理结果。

相应的,本申请第二方面提供一种数据处理装置,装置包括:

获取单元,用于响应于基于神经网络模型的推理请求,获取所述推理请求中包含的推理请求数据;

识别单元,用于识别所述神经网络模型中包含的多个算子以及所述多个算子之间的关联关系;

分配单元,用于基于所述关联关系将所述多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;

推理单元,用于基于所述多个不同的计算流同步执行所述推理请求数据对应的推理任务,得到推理结果。

可选地,在一些实施例中,分配单元,包括:

检测子单元,用于基于所述关联关系对所述多个算子逐一进行依赖关系检测;

第一分配子单元,用于若当前检测的第一算子与已检测过的第二算子之间存在依赖关系,则将所述第一算子分配至所述第二算子所属的第一计算流中;

第二分配子单元,用于若当前检测的第一算子与已检测过的任一算子之间都不存在依赖关系,则将所述第一算子分配至空闲的第二计算流中。

可选地,在一些实施例中,第二分配子单元,包括:

检测模块,用于若当前检测的第一算子与已检测过的任一算子之间都不存在依赖关系,则进行空闲计算流检测;

第一分配模块,用于若检测到存在空闲的第二计算流,则将所述第一算子分配至所述第二计算流中;

第二分配模块,用于若检测到不存在空闲的计算流,则创建新的第二计算流,并将所述第一算子分配至所述第二计算流中。

可选地,在一些实施例中,第二分配模块,包括:

第一调用子模块,用于若检测到不存在空闲的计算流,则调用计算流创建接口;

第一分配子模块,用于基于所述计算流创建接口创建新的第二计算流,并将所述第一算子分配至所述第二计算流中。

可选地,在一些实施例中,第二分配模块,包括:

第二调用子模块,用于调用算子调度接口;

第二分配子模块,用于基于所述算子调度接口将所述第一算子分配至所述第二计算流中。

可选地,在一些实施例中,分配单元,包括:

划分子单元,用于基于所述关联关系中的依赖关系将所述多个算子划分为多个算子组;

第三分配子单元,用于为每一算子组分配不同的计算流,并将每一算子组中的算子分配到对应的计算流中。

可选地,在一些实施例中,识别单元,包括:

第一获取子单元,用于获取所述神经网络模型的算子图,所述算子图包括多个算子节点以及所述多个算子节点之间的连接边;

第一确定子单元,用于根据所述多个算子节点确定所述神经网络模型包括的多个算子;

第二确定子单元,用于基于所述多个算子节点之间的连接边确定所述多个算子之间的关联关系。

可选地,在一些实施例中,所述算子图为有向无环图,本申请提供的数据处理装置,还包括:

第二获取子单元,用于获取所述连接边指示的算子之间的指向关系;

第三确定子单元,用于基于所述指向关系确定所述连接边连接的算子之间的依赖关系。

可选地,在一些实施例中,推理单元,包括:

处理子单元,用于对所述推理请求数据进行预处理,得到批数据;

执行子单元,用于基于所述多个不同的计算流同步执行对所述批数据的推理任务,得到推理结果。

可选地,在一些实施例中,本申请提供的数据处理装置还包括:

接收子单元,用于接收计算流数量上限设置指令,所述数量上限设置指令包括目标数量;

第二分配模块,还包括:

获取子模块,用于若检测到不存在空闲的计算流,则获取当前计算流数量;

第三分配子模块,用于若当前计算流数量小于所述目标数量,则创建新的第二计算流,并将所述第一算子分配至所述第二计算流中;

第四分配子模块,用于若当前计算流数量等于所述目标数量,则获取每一计算流中的算力负载,并将所述第一算子分配至算力负载最小的第二计算流中。

本申请第三方面还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本申请第一方面所提供的数据处理方法中的步骤。

本申请第四方面提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可以在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本申请第一方面所提供的数据处理方法中的步骤。

本申请第五方面提供一种计算机程序产品,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现第一方面所提供的数据处理方法中的步骤。

本申请实施例提供的数据处理方法,通过响应于基于神经网络模型的推理请求,获取推理请求中包含的推理请求数据;识别神经网络模型中包含的多个算子以及多个算子之间的关联关系;基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;基于多个不同的计算流同步执行推理请求数据对应的推理任务,得到推理结果。

以此,本申请提供的数据处理方法,通过对基于神经网络模型的推理任务中的神经网络模型的算子信息以及算子之间的关联关系进行获取,并基于算子之间的关联关系确定的算子间的依赖关系将神经网络模型的多个算子分配到多个不同的计算流中进行同步计算。可以充分利用硬件的多计算流同步运算的优势,大大提升了神经网络模型的推理效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请中数据处理的一个场景示意图;

图2是本申请提供的数据处理方法的一个流程示意图;

图3是本申请提供的算子图的一个示意图;

图4是本申请提供的算子图的另一个示意图;;

图5是将图4对应的算子图中算子节点分配到不同计算流的示意图;

图6是本申请提供的数据处理方法的另一个流程示意图;

图7是本申请提供的数据处理方法的框架流程示意图;

图8是本申请提供的数据处理装置的结构示意图;

图9是本申请提供的计算机设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种数据处理方法、装置、计算机可读存储介质及计算机设备。其中,该数据处理方法可以使用于数据处理装置中。该数据处理装置可以集成在计算机设备中,该计算机设备可以是终端也可以是服务器。其中,终端可以为手机、平板电脑、笔记本电脑、智能电视、穿戴式智能设备、个人计算机(PC,Personal Computer)以及车载终端等设备。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、网络加速服务(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。其中,服务器可以为区块链中的节点。

请参阅图1,为本申请提供的数据处理方法的一场景示意图。如图所示,计算机设备A响应于基于神经网络模型的推理请求,获取推理请求中包含的推理请求数据;识别神经网络模型中包含的多个算子以及多个算子之间的关联关系;基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;基于多个不同的计算流同步执行推理请求数据对应的推理任务,得到推理结果。

需要说明的是,图1所示的数据处理场景示意图仅仅是一个示例,本申请实施例描述的数据处理场景是为了更加清楚地说明本申请的技术方案,并不构成对于本申请提供的技术方案的限定。本领域普通技术人员可知,随着数据处理场景演变和新业务场景的出现,本申请提供的技术方案对于类似的技术问题,同样适用。

基于上述实施场景以下分别进行详细说明。

在相关技术中,在使用图形处理器(graphics processing unit,GPU)进行神经网络模型推理的场景中,例如几个典型的深度学习框架TensorFlow(端到端开源机器学习平台)、PyTorch(开源的Python机器学习库)以及PaddlePaddle(飞桨)均使用单个GPU计算流来顺序执行模型的算子。然而,在模型的计算图中,可能存在着可以并行的算子,同时单个算子不足以用GPU满算力时,仅使用单个GPU计算流来顺序执行模型算子则会使得整个模型的执行效率低下。对此,在一些方案中,本领域技术人员提出了一种粗粒度的增加并行度的模型推理执行方法,该方法基于MPS技术同时运行多个模型。其中MPS全称为Multi-ProcessService,通过多进程的方式,让每个进程的业务都可以并发地使用一张GPU卡,从而提高GPU利用率和整个服务的吞吐量。目前主要有三条提高GPU利用率的策略,一是通过动态批处理就把多个请求结合成一个,依次推理,这样还是在单个进程里面用一个环境;二是起多个进程,同时提供服务,里面每个都是一个模型实例,这些多进程可以通过MPS技术,同时把任务提交给GPU,GPU会对这些资源进行隔离和限制,并发地运行里面的算子,从而达到动态批处理类似的效果;三是最新的“GPU支持”,类似硬件级别GPU虚拟化。然而这些方案只解决了多个模型的并行处理,并不能解决单个模型中可以并行的算子的并行问题,同时使用该方法会增加GPU显存的占用。对此,为了解决现有技术中单个模型可并行的算子在GPU计算流中执行时无法并行,导致单个模型的推理效率低下的问题,本申请提供了一种数据处理方法,以期能够提升在GPU中进行模型推理场景下模型的推理效率。

本申请实施例将从数据处理装置的角度进行描述,该数据处理装置可以集成在计算机设备中。其中,计算机设备可以是终端也可以是服务器。其中,终端可以为手机、平板电脑、笔记本电脑、智能电视、穿戴式智能设备、个人计算机(PC,Personal Computer)以及车载终端等设备。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、网络加速服务(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。如图2所示,为本申请提供的数据处理方法的流程示意图,该方法包括:

步骤101,响应于基于神经网络模型的推理请求,获取推理请求中包含的推理请求数据。

其中,本申请提供的数据处理方法可以应用于使用GPU进行神经网络模型推理的场景,也可以适用于中央处理器(central processing unit,CPU)、张量处理器(TensorProcessing Unit,TPU)、深度学习处理器(Deep learning Processing Unit,DPU)、神经网络处理器(Neural network Processing Unit,NPU)或者大脑处理器(Brain ProcessingUnit,BPU)等以计算流为单元进行数据处理的硬件场景。尽管在相关技术中,在一些硬件中进行数据处理并非严格按照计算流为单元进行数据处理,但不排除在技术发展变化后存在适用的可能。因此,本申请并不对该数据处理方法的具体适用硬件进行限定,但基于与现有硬件的匹配,本申请提供的数据处理方法可以良好地适用于使用GPU进行神经网络模型推理的场景,因此在本申请实施例中,将以GPU为硬件示例来对本申请的方案进行详细介绍。此外,本申请中的神经网络模型框架可以采用TensorFlow框架为例来对本申请的方案作详细介绍。

首先,我们基于几种常用硬件来对神经网络模型的运算进行简单介绍。如果图像为28×28像素的灰度图,那么它可以转化为包含784个元素的向量。神经元会接收所有784个值,并将它们与参数值相乘,识别为特征图。其中参数值的作用类似于用「滤波器」从数据中抽取特征,因而能计算输入图像与特征图之间的相似性。这是对神经网络做数据分类最基础的解释,即将数据与对应的参数相乘,并将它们加在一起。如果我们能得到最高的预测值,那么我们会发现输入数据与对应参数非常匹配,这也就最可能是正确的答案。简单而言,神经网络在数据和参数之间需要执行大量的乘法和加法。我们通常会将这些乘法与加法组合为矩阵运算。所以关键点是我们该如何快速执行大型矩阵运算,同时还需要更小的能耗。

CPU运算的最大优势是灵活,通过冯诺依曼架构,可以为数百万的不同应用加载任何软件。例如可以使用CPU处理文字、控制火箭引擎、执行银行交易或者使用神经网络分类图像等。但是,由于CPU非常灵活,硬件无法一直了解下一个计算是什么,直到它读取了软件的下一个指令。CPU必须在内部将每次计算的结果保存到内存中(也被称为寄存器或L1缓存)。内存访问成为CPU架构的不足,被称为冯诺依曼瓶颈。虽然神经网络的大规模运算中的每一步都是完全可预测的,每一个CPU的算术逻辑单元(ALU,控制乘法器和加法器的组件)都只能一个接一个地执行它们,每一次都需要访问内存,限制了总体吞吐量,并需要大量的能耗。

为了获得比CPU更高的吞吐量,GPU使用一种简单的策略:在单个处理器中使用成千上万个ALU。现代GPU通常在单个处理器中拥有2500-5000个ALU,意味着可以同时执行数千次乘法和加法运算。这种GPU架构在有大量并行化的应用中工作得很好,例如在神经网络中的矩阵乘法。实际上,相比CPU,GPU在深度学习的典型训练工作负载中能实现高几个数量级的吞吐量。这正是为什么GPU是深度学习中最受欢迎的处理器架构。

在GPU中,每个ALU可以对应一个计算流。相关技术中,在采用GPU进行神经网络模型推理的场景中,都是将一个神经网络模型的多个算子使用单个GPU计算流顺序执行,导致模型推理的效率较低。在本申请实施例中,为了提升在GPU中进行神经网络模型推理的推理效率,可以将神经网络模型的多个算子分配到不同的GPU计算流中执行,下面可以对本申请的方案进行详细描述。

其中,本申请中的神经网络模型可以为任意类型的神经网络模型,例如深度学习模型、分类模型、识别模型或者推荐模型中任意类型或者任意功能的神经网络模型。当对神经网络模型进行训练后,便可以将训练得到的神经网络模型进行在线部署。部署完成后,便可以使用这些神经网络模型对需要进行推理的推理数据进行相应的推理工作,以完成对应的推理任务。

当神经网络模型在线部署完成后,响应于基于神经网络模型的推理请求,便可以获取该推理请求中包含的请求数据。例如,当神经网络模型为图像分类模型时,推理请求中包含的请求数据可以为图像数据;当神经网络模型为语音识别模型时,推理请求中包含的请求数据可以为语音数据;当神经网络模型为推荐模型时,推理请求中包含的请求数据可以为文本数据,等等。

步骤102,识别神经网络模型中包含的多个算子以及多个算子之间的关联关系。

其中,当接收到推理请求后,可以对该推理请求所调动的神经网络模型进行算子识别。其中算子识别包括识别该神经网络模型中包括的多个算子,以及多个算子之间的关联关系。其中,多个算子包括乘法算子、除法算子、加法算子、减法算子、幂运算算子等。算子之间的关联关系包括算子基于同一数据来源、算子的输出指向同一目标算子等。算子之间也可以不存在明确的关联关系,如此可以为不相关算子。

其中,在本申请实施例中,对神经网络模型中包含的算子进行识别以及对算子之间的关系进行识别的目的是为了将算子分配到多个GPU计算流中进行并行推理以提升模型的推理效率。其中,GPU计算流是按顺序在GPU上执行的一些列操作组成的流。在同一个GPU计算流中的操作只能顺序执行,但不同的GPU计算流中的运算可以交错。然而,在一些情况下,也可能存在不希望将模型算子划分到不同的GPU计算流中进行推理的情况。因此,在接收到模型推理任务后,可以进一步获取是否进行多计算流并行执行的指令。用户可以在终端中输入相应的指令,若用户输入的指令为不进行多计算流并行执行,则无需丢神经网络模型的算子以及算子之间的关联关系进行识别,只需将神经网络模型的算子在单个GPU计算流中顺序执行即可。若用户输入的指令为需要进行多计算流并行执行,则需对神经网络模型的算子以及算子之间的关联关系进行识别,以便将神经网络模型的算子分配到不同计算流中进行执行。

在一些实施例中,识别神经网络模型中包含的多个算子以及多个算子之间的关联关系,包括:

1、获取神经网络模型的算子图,算子图包括多个算子节点以及多个算子节点之间的连接边;

2、根据多个算子节点确定神经网络模型包括的多个算子;

3、基于多个算子节点之间的连接边确定多个算子之间的关联关系。

其中,在本申请实施例中,对于每个部署上线的神经网络模型,可以提前确定该神经网络模型对应的算子图。由于神经网络模型在确定了结构,并对神经网络模型进行训练确定了神经网络模型的模型参数后,便可以确定该神经网络模型中包含的多个算子以及算子的执行顺序了。如此,便可以提前对该训练好的神经网络模型进行算子图的生成,在生成了神经网络模型的算子图后,便可以将算子图在部署神经网络模型的终端或者服务器对应的存储区域中进行存储。

如此,当需要对神经网络模型的算子以及算子之间的关联关系进行识别时,便可以从存储区域中获取到神经网络模型对应的算子图。如图3所示,为本申请提供的算子图的示意图。如图所示,该算子图中包含了7个算子节点以及各个算子节点之间的连接边。其中,有连接边相连的算子节点之间存在关联关系,没有通过连接边相连的算子节点之间不存在关联关系。每个算子节点对应了一个算子,例如v

在一些实施例中,本申请提供的算子图可以为有向无环图,本申请提供的数据处理方法还可以包括:

4、获取连接边指示的算子之间的指向关系;

5、基于指向关系确定连接边连接的算子之间的依赖关系。

其中,在本申请实施例中,神经网络模型的算子图中不仅可以包括多个算子节点以及算子节点之间的连接边,还可以包括连接边的指向方向。该连接边的指向方向指示了算子之间的执行顺序。如图4所示,为本申请提供的算子图的另一示意图。该算子图中不仅包含了多个算子节点和算子节点之间的连接边,连接边还具有指向关系。根据该指向关系可以确定算子之间的依赖关系,例如算子节点v

因此,在本申请实施例中,在获取到神经网络模型的算子图后,可以进一步在算子图中的算子连接边中获取算子之间的指向关系,并根据算子之间的指向关系来确定算子之间的依赖关系。

步骤103,基于关联关系将多个算子分配到不同的计算流中。

其中,在获取到算子之间的关联关系后,便可以进一步基于算子之间的关联关系将算子分配到不同的计算流中进行并行计算。

具体地,在一些实施例中,基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系,包括:

1、基于关联关系对多个算子逐一进行依赖关系检测;

2、若当前检测的第一算子与已检测过的第二算子之间存在依赖关系,则将第一算子分配至第二算子所属的第一计算流中;

3、若当前检测的第一算子与已检测过的任一算子之间都不存在依赖关系,则将第一算子分配至空闲的第二计算流中。

其中,在本申请实施例中,基于关联关系将多个算子分配到不同计算流中的具体分配方法,可以基于关联关系中确定的算子之间的依赖关系来进行分配。具体可以基于关联关系对算子进行逐一的依赖关系检测。例如可以先将初始算子分配到一个空闲的第一计算流中,然后对第二个算子进行依赖关系检测,以确定是否与初始算子之间存在依赖关系,如果第二个算子和初始算子之间存在依赖关系,则可以将第二个算子分配到初始算子所属的第一计算流中。反之,如果第二个算子和初始算子之间不存在依赖关系,则可以将第二个算子分配到另一空闲的第二计算流中。如此,分配到同一计算流中的算子便都是存在依赖关系的算子,而不存在依赖关系的算子便可以被分配到不同的计算流中进行计算。

即如果当前检测的第一算子与已经检测过的任意一个第二算子之间存在依赖关系,那么便可以将该第一算子分配到该第二算子所述的第一计算流中。反之,若当前检测的第一算子与已经检测过的任意一个第二算子之间都不存在依赖关系,则可以将第一算子分配到一个新的空闲的第二计算流中进行计算。

如图5所示,为将图4对应的算子图中算子节点分配到不同计算流的示意图。如图所示,先将算子节点v

在一些实施例中,若当前检测的第一算子与已检测过的任一算子之间都不存在依赖关系,则将第一算子分配至空闲的第二计算流中,包括:

3.1、若当前检测的第一算子与已检测过的任一算子之间都不存在依赖关系,则进行空闲计算流检测;

3.2、若检测到存在空闲的第二计算流,则将第一算子分配至第二计算流中;

3.3、若检测到不存在空闲的计算流,则创建新的第二计算流,并将第一算子分配至第二计算流中。

其中,在本申请实施例中,当检测到第一算子与已经检测过的任意算子之间都不存在依赖关系时,应当将该第一算子分配到一个空闲的第二计算流中。然而,在一些情况下,GPU中可能不存在第二计算流。因此,在检测到第一算子与已检测过的任一算子之间都不存在依赖关系时,可以先进行空闲计算流检测,以检测GPU中是否存在空闲的计算流。

如果检测到GPU中存在空闲的第二计算流,则可以将当前检测的第一算子分配至检测到的空闲的第二计算流中。如果检测确定GPU中不存在空闲的计算流,则可以重新创建一个新的第二计算流,并将当前检测的第一算子分配到该第二计算流中。

其中,在一些实施例中,若检测到不存在空闲的计算流,则创建新的第二计算流,并将第一算子分配至第二计算流中,包括:

3.3.1、若检测到不存在空闲的计算流,则调用计算流创建接口;

3.3.2、基于计算流创建接口创建新的第二计算流,并将第一算子分配至第二计算流中。

其中,在本申请实施例中,创建新的第二计算流可以具体采用计算流创建接口来进行创建。具体地,若检测到不存在空闲的计算流时,可以调用计算流创建接口,然后基于该计算流创建接口来创建新的第二计算流。在创建了新的第二计算流后,则可以将第一算子分配到该第二计算流中。具体地,可以采用通用并行计算架构(Compute Unified DeviceArchitecture,CUDA)的接口来进行GPU计算流的创建。

其中,在一些实施例中,将第一算子分配至第二计算流中,包括:

调用算子调度接口;

基于算子调度接口将第一算子分配至第二计算流中。

其中,在本申请实施例中,将算子分配至计算流中的具体操作,可以为调用算子调度接口,并基于算子调度接口来将算子分配至对应的计算流中。具体地,当确定了需要将第一算子分配至第二计算流中时,便可以调用算子调度接口将该第一算子调度到第二计算流中。具体地,可以采用线性代数编译器(XLA)接口来对算子进行调度,将算子分配至对应的计算流中。具体地,可以采用线性代数编译器对每一算子进行遍历调度,当调度到某一算子时,可以先检测该算子是否与已经被调度分配过的算子之间存在着依赖关系,如果与已经被调度分配过的算子之间不存在依赖关系,则为该算子分配一个新的计算流,并将该算子分配到该新的计算流中。反之,如果检测该算子与已经被调度分配过的算子之间存在着依赖关系,则可以将该算子分配到与其存在依赖关系并且已经被分配过计算流的算子对应的算子中。如此,按照此规则遍历所有算子进行调度,直到所有算子都被分配到相应的计算流中。

在一些实施例中,基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系,包括:

A、基于关联关系中的依赖关系将多个算子划分为多个算子组;

B、为每一算子组分配不同的计算流,并将每一算子组中的算子分配到对应的计算流中。

其中,在本申请实施例中,可以先根据关联关系中的依赖关系对神经网络模型的多个算子进行分组,从而将神经网络模型的多个算子划分为多个算子组。然后,再对每一算子组分配不同的计算流,并将每一算子组中的算子分配到对应的计算流中。

具体地,例如某一神经网络模型包含了7个算子,其中算子1、算子2和算子3之间存在依赖关系,算子4和算子5之间存在依赖关系,算子6和算子7之间存在依赖关系。如此可以将算子1、算子2和算子3划分到一个算子组中,例如划分到第一算子组;可以将算子4和算子5划分到第二算子组;将算子6和算子7划分到第三算子组。然后,将不同分组的算子划分到不同的计算流中。例如可以将第一算子组的算子划分至第一计算流中,将第二算子组的算子划分至第二计算流中,以及将第三算子组的算子划分至第三计算流中。

步骤104,基于多个不同的计算流同步执行对推理请求数据的推理任务,得到推理结果。

其中,在根据算子之间的依赖关系将算子分配至不同的计算流后,便可以对多个不同的计算流进行同步执行以实现神经网络模型的多计算流推理。具体地,可以将推理请求数据分别分配到不同的计算流中,然后同步执行多个计算流,以进行相应的计算。在一些情况下,一个计算流中算子运算时也可能需要依赖其他计算流中算子的计算结果。此时可以将其他计算流中相应算子的计算结果调度到该计算流中执行相应的计算,即不同计算流中的运损也可以交错。

具体地,基于多个不同的计算流同步执行对推理请求数据的推理任务,得到推理结果,包括:

1、对推理请求数据进行预处理,得到批数据;

2、基于多个不同的计算流同步执行对批数据的推理任务,得到推理结果。

其中,在本申请实施例中,在基于多个不同的计算流同步执行对推理请求数据的推理任务时,可以先对推理请求数据进行预处理。其中,该预处理可以为先对推理请求数据进行清洗,以去除推理请求数据中的噪声,从而可以提升推理的准确性。在对推理请求数据进行清洗后,还可以进一步对清洗后的推理请求数据进行批处理准备处理。

其中,打包式的数据处理称为批。批处理对计算机的运算大有利处,可以大幅缩短数据的处理时间。这是因为大多数处理数值计算的库都进行了能够高效处理大型数组运算的最优化。并且,在神经网络的运算中,当数据传送成为瓶颈时,批处理可以减轻数据总线的负荷。也就是说,批处理一次性计算大型数组要比分开逐步计算各个小型数组速度更快。因此,为了方便神经网络模型进行批处理运算,可以先对推理请求数据进行批处理准备处理,以进一步提升神经网络模型的推理速度。

其中,在一些实施例中,本申请提供的数据处理方法还可以包括:

接收计算流数量上限设置指令,数量上限设置指令包括目标数量;

若检测到不存在空闲的计算流,则创建新的第二计算流,并将第一算子分配至第二计算流中,包括:

若检测到不存在空闲的计算流,则获取当前计算流数量;

若当前计算流数量小于目标数量,则创建新的第二计算流,并将第一算子分配至第二计算流中;

若当前计算流数量等于目标数量,则获取每一计算流中的算力负载,并将第一算子分配至算力负载最小的第二计算流中。

其中,在本申请实施例中,用户还可以对GPU中的数据流进行数量控制,例如可以设置GPU数据流的数量上限,例如设置为目标数量。如此,当检测到第一算子与已经检测过的任意算子之间都不存在依赖关系时,而且暂时没有空闲的计算流时,可以先对GPU当前包含的计算流的数量进行获取,即获取当前计算流数量。如果当前计算流数量小于目标数量,则可以进一步创建一个新的第二计算流,并将该第一算子分配到新的第二计算流中。

如果GPU中当前计算流的数量已经达到了目标数量时,则不可进一步创建新的第二计算流,而是可以在当前分配了算子的计算流中确定一个算力负载最小的计算流,确定该计算流为第二计算流,并将第一算子分配到该第二计算流中。如此,可以避免一个神经网络模型占用过多计算流。

根据上述描述可知,本申请实施例提供的数据处理方法,方法通过响应于基于神经网络模型的推理请求,获取推理请求中包含的推理请求数据;识别神经网络模型中包含的多个算子以及多个算子之间的关联关系;基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;基于多个不同的计算流同步执行推理请求数据对应的推理任务,得到推理结果。

以此,本申请提供的数据处理方法,通过对基于神经网络模型的推理任务中的神经网络模型的算子信息以及算子之间的关联关系进行获取,并基于算子之间的关联关系确定的算子间的依赖关系将神经网络模型的多个算子分配到多个不同的计算流中进行同步计算。可以充分利用硬件的多计算流同步运算的优势,大大提升了神经网络模型的推理效率。

本申请还提供了一种数据处理方法,该方法可以使用于计算机设备中,该计算机设备可以为终端或服务器中。如图6所示,为本申请提供的数据处理方法的另一流程示意图,方法具体包括:

步骤201,计算机设备接收模型推理请求,并从模型推理请求中获取模型推理数据。

其中,在本申请实施例中,本申请提供的数据处理方法具体可以使用TensorFlowServing推理框架中,调用TensorFlow运行时,可以通过本申请提供的方案获得相应的加速效果。如图7所示,为本申请提供的数据处理方法的框架流程示意图。其中,首先将待推理的神经网络模型和TensorFlow Serving推理框架进行部署,具体可以部署在计算机设备中,计算机设备可以为服务器也可以为终端。然后当接收到推理请求时,可以从推理请求中获取到推理请求数据,而且可以基于TensorFlow Serving接收用户的配置参数进行参数配置,其中该参数包括了是否使用多计算流推理指令;当确定使用多计算流推理时,参数还可以包含计算流的数量上限。然后便可以基于该参数配置回复会话以启动推理服务。启动推理服务后,便可以基于TensorFlow框架中采用加速线性代数编译器将神经网络模型的算子进行计算流分配,得到计算图。该计算图包括了n个计算流,每个计算流中包括了至少一个神经网络模型的算子,每一计算流中包括的神经网络模型算子之间存在依赖关系。然后,XLA执行器便可以根据计算图中的算子分配结果将算子放置到多个计算流中。并由TensorFlow执行器对计算流的创建和同步过程进行控制。最后,再采用Stream执行器将批处理准备后的推理请求数据布置到计算流中执行计算流的计算,并最终输出推理结果。

其中,为了能够实现对单个模型的多计算流并行执行,本申请提供的方案自底向上的修改了TensorFlow对GPU的调用接口。在TensorFlow通过CUDA调用CPU的接口模块(即Stream执行器)中,增加了对非同步计算流调用的接口。如此便可以实现多计算流并行计算。在TensorFlow的GPU上层包装模块(即TensorFlow执行器)中,增加并修改了利用Stream执行器的接口对计算流进行创建和同步的代码。在XLA执行器中,添加了可以根据算子的分配方案将算子调度到指定计算流的代码。通过上述修改,最终是的神经网络模型可以在多个计算流中并行执行。

下面对本申请的方案进行详细介绍。首先在将神经网络模型部署到计算机设备中后,便可以接收推理请求。当接收到推理请求时,计算机设备便可以对推理请求中包含的推理请求数据进行获取。推理请求数据的类型一般与神经网络模型的功能相对应,例如推理请求数据可以为图像、语音或者文本等任意类型的数据。

步骤202,计算机设备接收用户输入的多计算流推理指令,并基于多计算流推理指令获取待推理模型的算子图。

其中,用户在输入了推理请求指令后,还可以输入是否进行多计算流推理的指令。若用户不希望采用多计算流推理,则可以采用相关技术中以单个计算流顺序执行神经网络模型中的模型算子的方法来进行模型推理。如果用户期望提升模型的推理速度,则可以选择多计算流推理的方法,具体可以采用输入多计算流推理指令的方法来触发采用本申请提供的多计算流的模型推理。

当计算机设备接收到多计算流推理指令时,计算机设备便可以进一步获取神经网络模型的算子图。其中,计算机设备中部署的神经网络模型可以有多个,计算机设备先根据推理请求确定待推理的神经网络模型,即待推理模型。如此,获取算子图便可以获取该待推理模型对应的算子图。

步骤203,计算机设备基于算子图确定算子之间的依赖关系。

其中,模型算子图具体可以为有向无环图。其中包括了神经网络模型的每个算子以及算子之间的连接关系以及算子之间的执行顺序关系。其中,具有连接关系且具有明确执行顺序关系的算子之间可以确定为存在依赖关系。具体可以参阅图4示意,v

步骤204,计算机设备遍历算子图中的每一算子,若当前算子与已分配过的算子之间存在依赖关系,则将当前算子分配到存在依赖关系的已分配过的算子对应的计算流中。

进一步地,计算机设备可以根据算子之间的依赖关系来对算子进行计算流的分配。即根据算子之间的依赖关系将神经网络模型的算子分配到多个计算流中。首先,计算机设备可以将任意算子作为初始算子,并将该初始算子分配到一个空闲的计算流中。然后,依次遍历其他算子,若遍历到的当前算子与已经分配过的算子之间存在依赖关系,则将当前算子分配到与它存在依赖关系的,且已经分配过的算子对应的计算流中。其中,此处已分配过的算子具体可以为已经分配过对应计算流的算子。

步骤205,若当前算子与已分配过的算子之间都不存在依赖关系,则计算机设备检测是否存在空闲计算流。

如果检测到当前算子与已经分配过的算子之间都不存在依赖关系,则需要将该算子分配到与已分配算子的计算流都不同的计算流中。具体地,可以先检测GPU中是否存在空闲的计算流,即计算机设备先检测GPU中是否存在未分配算子的计算流。

步骤206,若存在空闲计算流,则计算机设备调用算子调度接口将当前算子分配到空闲计算流中。

若GPU中存在空闲计算流,则计算机设备便可以调用算子调度接口将当前算子分配到空闲计算流中。

步骤207,若不存在空闲计算流,则计算机设备调用计算流创建接口创建新的计算流,并调用算子调度接口将当前算子分配到新的计算流中。

如果GPU中不存在空闲计算流,则计算机设备可以调用算计算流创建接口来创建一个新的计算流,然后再调用算子调度接口将当前算子分配到该新创建的新的计算流中。

步骤208,计算机设备对推理请求数据进行批处理准备,并将批处理准备后的推理请求数据分配至多个推理计算流中进行推理,得到推理结果。

进一步地,计算机设备可以先对推理请求数据进行批处理准备,以便神经网络模型进行批处理推理,提升推理效率。在进行批处理准备后,便可以将批处理准备后的推理请求数据分配到多个推理计算流中进行推理,进而得到推理结果。

根据上述描述可知,本申请实施例提供的数据处理方法,方法通过响应于基于神经网络模型的推理请求,获取推理请求中包含的推理请求数据;识别神经网络模型中包含的多个算子以及多个算子之间的关联关系;基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;基于多个不同的计算流同步执行推理请求数据对应的推理任务,得到推理结果。

以此,本申请提供的数据处理方法,通过对基于神经网络模型的推理任务中的神经网络模型的算子信息以及算子之间的关联关系进行获取,并基于算子之间的关联关系确定的算子间的依赖关系将神经网络模型的多个算子分配到多个不同的计算流中进行同步计算。可以充分利用硬件的多计算流同步运算的优势,大大提升了神经网络模型的推理效率。

为了更好地实施以上数据处理方法,本申请实施例还提供一种数据处理装置,该数据处理装置可以集成在终端或服务器中。

例如,如图8所示,为本申请实施例提供的数据处理装置的结构示意图,装置可以包括获取单元301、识别单元302、分配单元303及推理单元304,如下:

获取单元301,用于响应于基于神经网络模型的推理请求,获取推理请求中包含的推理请求数据;

识别单元302,用于识别神经网络模型中包含的多个算子以及多个算子之间的关联关系;

分配单元303,用于基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;

推理单元304,用于基于多个不同的计算流同步执行对推理请求数据的推理任务,得到推理结果。

可选地,在一些实施例中,分配单元,包括:

检测子单元,用于基于关联关系对多个算子逐一进行依赖关系检测;

第一分配子单元,用于若当前检测的第一算子与已检测过的第二算子之间存在依赖关系,则将第一算子分配至第二算子所属的第一计算流中;

第二分配子单元,用于若当前检测的第一算子与已检测过的任一算子之间都不存在依赖关系,则将第一算子分配至空闲的第二计算流中。

可选地,在一些实施例中,第二分配子单元,包括:

检测模块,用于若当前检测的第一算子与已检测过的任一算子之间都不存在依赖关系,则进行空闲计算流检测;

第一分配模块,用于若检测到存在空闲的第二计算流,则将第一算子分配至第二计算流中;

第二分配模块,用于若检测到不存在空闲的计算流,则创建新的第二计算流,并将第一算子分配至第二计算流中。

可选地,在一些实施例中,第二分配模块,包括:

第一调用子模块,用于若检测到不存在空闲的计算流,则调用计算流创建接口;

第一分配子模块,用于基于计算流创建接口创建新的第二计算流,并将第一算子分配至第二计算流中。

可选地,在一些实施例中,第二分配模块,包括:

第二调用子模块,用于调用算子调度接口;

第二分配子模块,用于基于算子调度接口将第一算子分配至第二计算流中。

可选地,在一些实施例中,分配单元,包括:

划分子单元,用于基于关联关系中的依赖关系将多个算子划分为多个算子组;

第三分配子单元,用于为每一算子组分配不同的计算流,并将每一算子组中的算子分配到对应的计算流中。

可选地,在一些实施例中,识别单元,包括:

第一获取子单元,用于获取神经网络模型的算子图,算子图包括多个算子节点以及多个算子节点之间的连接边;

第一确定子单元,用于根据多个算子节点确定神经网络模型包括的多个算子;

第二确定子单元,用于基于多个算子节点之间的连接边确定多个算子之间的关联关系。

可选地,在一些实施例中,算子图为有向无环图,本申请提供的数据处理装置,还包括:

第二获取子单元,用于获取连接边指示的算子之间的指向关系;

第三确定子单元,用于基于指向关系确定连接边连接的算子之间的依赖关系。

可选地,在一些实施例中,推理单元,包括:

处理子单元,用于对推理请求数据进行预处理,得到批数据;

执行子单元,用于基于多个不同的计算流同步执行对批数据的推理任务,得到推理结果。

可选地,在一些实施例中,本申请提供的数据处理装置还包括:

接收子单元,用于接收计算流数量上限设置指令,数量上限设置指令包括目标数量;

第二分配模块,还包括:

获取子模块,用于若检测到不存在空闲的计算流,则获取当前计算流数量;

第三分配子模块,用于若当前计算流数量小于目标数量,则创建新的第二计算流,并将第一算子分配至第二计算流中;

第四分配子模块,用于若当前计算流数量等于目标数量,则获取每一计算流中的算力负载,并将第一算子分配至算力负载最小的第二计算流中。

具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。

根据上述描述可知,本申请实施例提供的数据处理装置,通过响应于基于神经网络模型的推理请求,获取单元301获取推理请求中包含的推理请求数据;识别单元302识别神经网络模型中包含的多个算子以及多个算子之间的关联关系;分配单元303基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;推理单元304基于多个不同的计算流同步执行对推理请求数据的推理任务,得到推理结果。

以此,本申请提供的数据处理方法,通过对基于神经网络模型的推理任务中的神经网络模型的算子信息以及算子之间的关联关系进行获取,并基于算子之间的关联关系确定的算子间的依赖关系将神经网络模型的多个算子分配到多个不同的计算流中进行同步计算。可以充分利用硬件的多计算流同步运算的优势,大大提升了神经网络模型的推理效率。

本申请实施例还提供一种计算机设备,该计算机设备可以为终端或服务器,如图9所示,为本申请提供的计算机设备的结构示意图。具体来讲:

该计算机设备可以包括一个或者一个以上处理核心的处理单元401、一个或一个以上存储介质的存储单元402、电源模块403和输入模块404等部件。本领域技术人员可以理解,图9中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

处理单元401是该计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储单元402内的软件程序和/或模块,以及调用存储在存储单元402内的数据,执行计算机设备的各种功能和处理数据。可选的,处理单元401可包括一个或多个处理核心;优选的,处理单元401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、对象界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理单元401中。

存储单元402可用于存储软件程序以及模块,处理单元401通过运行存储在存储单元402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储单元402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能以及网页访问等)等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储单元402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储单元402还可以包括存储器控制器,以提供处理单元401对存储单元402的访问。

计算机设备还包括给各个部件供电的电源模块403,优选的,电源模块403可以通过电源管理系统与处理单元401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源模块403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

该计算机设备还可包括输入模块404,该输入模块404可用于接收输入的数字或字符信息,以及产生与对象设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

尽管未示出,计算机设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,计算机设备中的处理单元401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储单元402中,并由处理单元401来运行存储在存储单元402中的应用程序,从而实现各种功能,如下:

响应于基于神经网络模型的推理请求,获取推理请求中包含的推理请求数据;识别神经网络模型中包含的多个算子以及多个算子之间的关联关系;基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;基于多个不同的计算流同步执行对推理请求数据的推理任务,得到推理结果。

应当说明的是,本申请实施例提供的计算机设备与上文实施例中的方法属于同一构思,以上各个操作的具体实施可参见前面的实施例,在此不作赘述。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本发明实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种方法中的步骤。例如,该指令可以执行如下步骤:

响应于基于神经网络模型的推理请求,获取推理请求中包含的推理请求数据;识别神经网络模型中包含的多个算子以及多个算子之间的关联关系;基于关联关系将多个算子分配到不同的计算流中,每个计算流中的算子之间存在依赖关系;基于多个不同的计算流同步执行对推理请求数据的推理任务,得到推理结果。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。

由于该计算机可读存储介质中所存储的指令,可以执行本发明实施例所提供的任一种方法中的步骤,因此,可以实现本发明实施例所提供的任一种方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

其中,根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在存储介质中。计算机设备的处理器从存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述数据处理方法中各种可选实现方式中提供的方法。

以上对本发明实施例所提供的数据处理方法、装置、计算机可读存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。

技术分类

06120116501133