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

任务调度系统、方法、电子设备及可读存储介质

文献发布时间:2023-06-19 11:39:06


任务调度系统、方法、电子设备及可读存储介质

技术领域

本申请涉及计算机技术领域,具体而言,涉及一种任务调度系统、方法、电子设备及可读存储介质。

背景技术

目前的任务调度系统主要是针对单一的算法场景(比如人脸识别、视频处理等)和/或单一的计算平台来设计的,比如某个任务调度系统是针对A平台上的人脸识别算法场景设计的。当需要对算法进行切换时(如将人脸识别算法场景切换到车辆识别算法场景)或对计算平台进行切换时(如从A平台换为B平台),则需要重新开发针对相应算法和/或相应计算平台的任务调度系统,这种方式导致开发成本较大。

发明内容

本申请实施例的目的在于提供一种任务调度系统、方法、电子设备及可读存储介质,用以改善现有技术中需要针对相应算法和/或相应计算平台分别设计一种任务调度系统导致开发成本较大的问题。

第一方面,本申请实施例提供了一种任务调度系统,所述系统包括:

对外接口层,用于接收目标任务,所述目标任务包括待处理数据和目标任务类型;

计算引擎层,用于根据所述目标任务类型对应的配置信息,将所述目标任务拆分成多个由计算平台的处理器执行的子任务,并将所述子任务提交给原子接口层;其中,所述配置信息包含完成所述目标任务所要执行的子任务和各个子任务之间的依赖关系;

所述原子接口层,用于确定执行各所述子任务所需的处理器,通过调用计算平台的计算接口将所述子任务分发至相应处理器;

硬件抽象层,包含至少一个计算平台的计算接口。

在上述实现过程中,该系统使用了分层的设计,包括对外接口层、计算引擎层、原子接口层和硬件抽象层。对于不同的计算平台,通过硬件抽象层提供统一的计算接口,从而可以将计算平台与上层业务解耦,这样在切换不同的计算平台或算法场景时,只需要在硬件抽象层注册对应的计算平台即可,容易实现计算平台的扩展,无需重新设计整个系统,节省了开发成本和时间。并且,当需要对算法场景即目标任务类型进行扩展时,只需设置并加载待扩展的目标任务类型的配置信息即可使计算引擎层支持扩展的算法场景,后续在指定目标任务时给出相应的目标任务类型,即可在计算引擎层支持的多种的算法场景中进行切换,无需重新设计整个系统,节省了开发成本和时间。

可选地,所述目标任务的数量为多个;

所述计算引擎层包括任务拆分模块、异步任务模块和任务处理模块;

所述任务拆分模块,用于根据所述目标任务类型对应的配置信息,将每个目标任务拆分成多个由计算平台的处理器执行的子任务,得到每个目标任务的子任务执行流;

所述异步任务模块,用于将多个所述目标任务插入到异步任务队列中;

所述任务处理模块,用于从所述异步任务队列中获取当前处理的当前目标任务,执行所述当前目标任务的子任务,直到所述当前目标任务的各子任务均执行完毕,所述执行当前目标任务的子任务包括:根据所述当前目标任务的子任务执行流从所述当前目标任务的各子任务中确定当前要执行的当前子任务,将所述当前子任务提交给所述原子接口层。

可选地,所述执行当前目标任务的子任务还包括:从所述原子接口层获取当前子任务的执行结果,将当前子任务作为上一子任务,将所述执行结果作为新的当前子任务的输入;

根据所述当前目标任务的子任务执行流从所述当前目标任务的各子任务中确定当前要执行的当前子任务包括:根据所述上一子任务和所述当前目标任务的子任务执行流,从所述当前目标任务的各子任务中确定当前要执行的当前子任务。

可选地,每个子任务都有其对应的处理器类型;

所述将当前子任务提交给所述原子接口层,包括:将所述当前子任务提交给所述当前处理器类型对应的worker模块,所述worker模块位于所述原子接口层。

可选地,所述确定执行各所述子任务所需的处理器,包括:对所述计算平台的处理器进行负载统计,并根据处理器的负载情况,确定执行当前子任务的处理器。

可选地,所述根据处理器的负载情况,确定执行所述当前子任务的处理器,包括:

根据接收当前子任务的worker模块对应的处理器类型确定当前处理器类型,确定当前处理器类型对应的各处理器的负载情况,根据所述负载情况从当前处理器类型对应的各处理器中确定执行所述当前子任务的处理器。

可选地,所述计算引擎层所能获取的所述当前目标任务的最大数量为N个,对于多个所述当前目标任务,执行各当前目标任务的子任务的步骤并行执行。

可选地,所述对外接口层包括handle接口;

所述handle接口,用于接收算法句柄的初始化请求,所述初始化请求包括所述目标任务的配置信息和与所述目标任务相关的需加载的模型信息;

所述根据目标任务类型对应的配置信息,将多个所述目标任务拆分成多个由计算平台的处理器执行的子任务,包括:根据目标任务类型对应的配置信息,将所述模型信息组织成所述目标任务的子任务执行流。

可选地,所述硬件抽象层,还用于通过注册回调函数的方式将待注册的计算平台注册到所述硬件抽象层。

第二方面,本申请实施例提供了一种任务调度方法,应用于上述第一方面提供的系统,所述方法包括:

通过所述对外接口层接收所述目标任务,所述目标任务包括待处理数据和目标任务类型;

通过所述计算引擎层根据所述目标任务类型对应的配置信息,将所述目标任务拆分成多个由计算平台的处理器执行的子任务,并将所述子任务提交给原子接口层;其中,所述配置信息包含完成所述目标任务所要执行的子任务和各个子任务之间的依赖关系;

通过所述原子接口层确定执行各所述子任务所需的处理器,通过调用计算平台的计算接口将所述子任务分发至相应处理器。

第三方面,本申请实施例提供一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如上述第二方面提供的所述方法中的步骤。

第四方面,本申请实施例提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时运行如上述第二方面提供的所述方法中的步骤。

本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的一种任务调度系统的结构示意图;

图2为本申请实施例提供的一种异步任务队列的示意图;

图3为本申请实施例提供的一种计算平台对应的流水线的示意图;

图4为本申请实施例提供的一种任务调度系统的详细结构示意图;

图5为本申请实施例提供的一种任务调度方法的流程图;

图6为本申请实施例提供的一种用于执行任务调度方法的电子设备的结构示意图。

具体实施方式

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

本申请实施例提供一种任务调度系统,使用了分层的设计,包括对外接口层、计算引擎层、原子接口层和硬件抽象层。对于不同的计算平台,通过硬件抽象层提供统一的计算接口,从而可以将计算平台与上层业务解耦,这样当需要将任务调度系统兼容新的硬件平台时,只需要在硬件抽象层注册对应的计算平台即可,容易实现计算平台的扩展,无需重新设计整个系统,节省了开发成本和时间。并且,当需要对算法场景即目标任务类型进行扩展时,只需设置并加载待扩展的目标任务类型的配置信息即可使计算引擎层支持扩展的算法场景,后续在指定目标任务时给出相应的目标任务类型,即可在计算引擎层支持的多种的算法场景中进行切换,无需重新设计整个系统,节省了开发成本和时间。

请参照图1,图1为本申请实施例提供的一种任务调度系统100的结构示意图,该任务调度系统100包括对外接口层110、计算引擎层120、原子接口层130和硬件抽象层140,下面针对各个层的功能进行详细说明。

对外接口层110,用于接收目标任务,该目标任务包括待处理数据和目标任务类型。

其中,对外接口层110可以对外提供一个统一的接口(如API接口),目标任务可以是由上层应用通过该统一的接口发送给对外接口层110的,可以理解地,上层应用发送给对外接口层110的任务均可通过该统一的接口发送,对外接口层110也可以对计算引擎层120提供的接口进行统一封装,从而当计算引擎层提供的接口发生变化时确保对外接口层对外提供的接口不变。

目标任务是指需要执行的具体任务,目标任务可以有多种目标任务类型,如人脸识别、车辆识别、语音识别等目标任务类型。目标任务可以为一个或多个,每个目标任务都有其对应的目标任务类型。如目标任务1和目标任务2为人脸识别类型的任务,目标任务3为车辆识别类型的任务。目标任务所包括的待处理数据可以是指图像(图像指图片或视频),如人脸图像、车辆图像,或者在目标任务的任务类型为语音识别时,其待处理数据可以包括语音数据,在目标任务的任务类型为文字识别时,待处理数据可以为文本数据等。

在具体实现过程中,上层应用在发送给对外接口层110的目标任务中携带有待处理数据和目标任务类型,这样对外接口层110接收到目标任务后,可对目标任务进行解析,以获得其中携带的待处理数据和目标任务类型。

在一些实施方式中,对外接口层110还包括有License模块,其可用于进行授权管理,内部包含软件授权、硬件授权和能力集管理等功能,可以基于计算平台的具体授权类型,初始化相应的能力集。

在一些实施方式中,对外接口层110还可以包括有Model Mgr模块,该模块可用于对计算引擎层120中集成的模型进行管理,负责对各个模型对应的模型信息的解包,模型的加载和运行等,其内部会维护每一个模型的模型信息,以确保线程安全和保证尽量不重复加载资源,增加资源开销。

计算引擎层120,用于根据目标任务类型对应的配置信息,将所述目标任务拆分成多个由计算平台的处理器执行的子任务,并将子任务提交给原子接口层130,其中,每个子任务都有其对应的处理器类型,配置信息包含有完成目标任务所要执行的子任务和各个子任务之间的依赖关系。

计算引擎层120中可预先存储有针对不同的任务类型对应的配置信息,或者配置信息也可以是存储在其他地方,计算引擎层120可以从其他地方获取目标任务类型对应的配置信息。当系统支持多种任务类型的任务时,可从不同任务类型对应的配置信息中确定出目标任务类型对应的配置信息。配置信息用于指示完成目标任务所要执行的子任务和各个子任务之间的依赖关系,所以,计算引擎层120则可以根据配置信息将目标任务拆分成多个子任务,如目标任务为人脸识别,其拆分获得的子任务包括:采样、人脸检测预处理,人脸检测模型处理、人脸检测后处理,人脸跟踪预处理、人脸跟踪、人脸跟踪后处理等子任务,各个子任务之间的依赖关系可以理解为是各个子任务之间的执行顺序,如先对待处理数据(如人脸图像)进行采样后再对采样后的数据进行人脸检测预处理,这样的关系即可称为子任务间的依赖关系。

在一些实施方式中,每个子任务都有其对应的处理器类型,如处理器类型包含有CPU、GPU、IVE、NNIE等,不同的计算平台中的处理器的类型可能不同,且一个计算平台中,可以有一个或多个不同类型的处理器(一个计算平台中有多个不同类型的处理器时,称该计算平台为异构计算平台)。不同计算平台中不同类型的处理器的数量也可以不同,如计算平台1包括5个NNIE、3个GPU和2个CPU,计算平台2包括4个NNIE、2个GPU、3个CPU和5个IVE。这里计算平台可以理解为是不同的计算芯片,其可以是不同厂家提供的,这些计算芯片中集成有不同类型的处理器。同样的子任务运行在不同计算平台上时可对应不同的处理器类型。例如,子任务1可运行在IVE上,也可运行在CPU上,当在子任务1运行在计算平台1上时,由于计算平台1不包括IVE,子任务1运行在CPU上,当在子任务1运行在计算平台2上时,由于计算平台2包括IVE,子任务1运行在IVE上。

在一些实施方式中,配置信息中还可以包含各个子任务对应的处理器类型,或者,计算引擎层120中也可以存储有不同的子任务对应的处理器类型,如子任务“采样”对应的处理器类型为CPU,表示需要将该子任务提交给CPU处理,子任务“目标检测预处理”对应的处理器类型为GPU,表示需要将该子任务提交给GPU处理。这里需要说明的是,不同的子任务对应的处理器类型可以是相同的,如子任务“采样”和子任务“目标跟踪”对应的处理器类型均为CPU,表示均需要将这两个子任务提交给CPU处理,或者一个子任务可以在不同处理器类型上执行,如子任务“人脸检测预处理”对应的处理器类型可以包括CPU或GPU,表示该子任务可以在CPU上执行,也可以在GPU上执行,则具体进行分发时,可以根据负载均衡进行分发,如可设置该任务优先在CPU上处理,如果计算平台上有5个CPU,则将该子任务提交给其中一个负载较小的CPU,如果这5个CPU都负载比较大,而GPU负载比较小,则可将该子任务分发至GPU中。可以理解地,每个子任务对应的处理器类型可以是根据实际业务需求所设定的。

计算引擎层120将目标任务拆分成子任务后,将子任务提交给原子接口层130。

原子接口层130,用于确定执行各个子任务所需的处理器,通过调用对应的计算接口将各个子任务分发至相应处理器。

在一些实施方式中,原子接口层130从子任务对应的处理器类型的各处理器中确定执行子任务所需的处理器。例如,子任务1对应的处理器类型为CPU类型,计算平台有2个CPU,则原子接口层130从2个CPU中选择一个作为执行子任务1的CPU。

在一些实施方式中,原子接口层130可以对处理器进行负载统计,在确定执行子任务所需的处理器时对处理器进行负载均衡处理。例如,子任务1对应的处理器类型为CPU类型,计算平台有2个CPU,通过负载统计发现CPU1上执行了1个子任务,CPU2空闲,则原子接口层130根据负载均衡策略选择CPU2作为执行子任务1的CPU。

在一些实施方式中,原子接口层130对计算平台提供的模型计算等原子级计算接口进行封装,例如封装为可供计算引擎层120调用的函数。

计算引擎层120在将目标任务拆分成多个子任务后,将子任务提交给原子接口层130,原子接口层130接收到子任务后,可根据子任务对应的处理器类型,确定执行子任务所需的处理器,如从子任务对应的处理器类型中确定执行子任务所需的处理器,如子任务“采样”对应的处理器类型为CPU,而计算平台包括5个CPU,原子接口层130可从这5个CPU中确定出具体执行子任务“采样”的CPU。

原子接口层130在确定出子任务对应的处理器后,可通过调用硬件抽象层140提供的计算接口,将子任务分发至对应的处理器执行。

硬件抽象层140,包含至少一个计算平台的计算接口。

当硬件抽象层140只能用于一个计算平台时,包括一个计算平台的计算接口。当硬件抽象层140兼容多个计算平台时,包括多个计算平台的计算接口。

在一些实施方式中,硬件抽象层140兼容的计算平台中,至少有一个是异构多处理器平台,包含多类型的处理器。

在一些实施方式中,计算平台可以为嵌入式平台如CPU/ASIC平台。

硬件抽象层140可以将系统兼容的计算平台封装为计算接口,当系统兼容多个计算平台时,对不同计算平台封装得到的计算接口是统一的,计算接口对应的计算包括graph,tensor,kernel等NN相关计算。

在一些实施方式中,通过注册回调函数的方式将待注册的计算平台注册到硬件抽象层140中,从而可实现计算平台的扩展。如需要新添加计算平台3时,只需要依次实现graph,tensor,kernel等NN计算相关的接口,并进行回调注册,任务调度系统100就可以兼容计算平台3了。也就是说,硬件抽象层140可以适配多种计算平台,当需要新增硬件抽象层所能适配的计算平台时,只需要在硬件抽象层140添加对应的计算平台即可,无需改变上层结构,节省了开发成本。在后续使用任务调度平台进行任务调度时,可在初始化时选择所要使用的计算平台。

可以理解的是,任务调度系统100可兼容多个计算平台,当任务调度部署在一个计算平台上时,其只在当前计算平台上使用。

在一些实施方式中,在需要对多个目标任务进行执行时,计算引擎层120包括任务拆分模块、异步任务模块和任务处理模块。

任务拆分模块,用于根据目标任务类型对应的配置信息,将多个目标任务拆分成多个由计算平台的处理器执行的子任务,得到目标任务的子任务执行流;

异步任务模块,用于将多个目标任务插入到异步任务队列中;

任务处理模块,用于从异步任务队列中获取当前处理的当前目标任务,执行当前目标任务的子任务,直到当前目标任务的各自任务均执行完毕,执行当前目标任务的子任务包括:根据当前目标任务的子任务执行流从当前目标任务的各子任务中确定当前要执行的当前子任务,将当前子任务提交给原子接口层130。

其中,多个目标任务的任务类型可以相同或不同,如3个目标任务分别是对图像1进行人脸检测、对图像2进行人脸检测、对图像3进行车辆识别,为了实现对这3个目标任务的高效处理,可通过异步任务模块将这3个目标任务进行加入到异步任务队列中,然后再通过任务处理模块从异步任务队列中提取目标任务给原子接口层130。

计算引擎层120接收到多个目标任务后,其中的异步任务模块将多个目标任务插入到异步任务队列中,其异步任务队列可如图2所示。

任务拆分模块根据每个目标任务的目标任务类型对应的配置信息,将每个目标任务拆分成多个子任务,得到每个目标任务的子任务执行流,也即按照各个目标任务的子任务之间的依赖关系,得到每个目标任务的子任务执行流,子任务执行流用于表示各个子任务的执行顺序。如,人脸检测类型的目标任务对应的子任务执行流为子任务1(图像预处理,待处理图像为子任务1输入)->子任务2(运行检测模型,子任务1的输出作为子任务2的输入)->子任务3(后过滤模型,子任务2的输出和待处理图像共同作为子任务3的输入)等。

任务处理模块可以依次从异步任务队列中提取当前需处理的当前目标任务,然后执行当前目标任务的子任务。

在一些实施方式中,异步任务队列可以包括多个目标任务,计算平台允许同时并行处理N个目标任务,任务处理模块监控当前正在被处理的目标任务的完成情况,当有目标任务执行完毕时,即从异步任务队列中提取当前需处理的当前目标任务。

例如,计算平台允许同时并行处理4个目标任务,任务处理模块监控到2个目标任务刚刚处理完成,当前正在被处理的目标任务为2个,为打满算力,可从异步队列中提取2个目标任务作为当前目标任务。正在被处理的各目标任务的可异步执行,即正在被处理的各目标任务的执行进度可能不同,例如目标任务1执行到了子任务1,目标任务2执行到了子任务3。

例如,任务处理模块从异步任务队列中提取目标任务1作为当前目标任务,目标任务1被拆分的子任务形成的子任务执行流可表示为:子任务1->子任务2->子任务3->子任务4,表示先执行子任务1,任务处理模块先从子任务执行流中提取子任务1提交给原子接口层130,在子任务1执行完后,任务处理模块确定当前要执行的当前子任务为子任务2,则从子任务执行流中提取子任务2提交给原子接口层130,直到将最后一个子任务4提交给原子接口层130。当目标任务1执行到子任务3时,发现之前正在被处理的目标任务4和目标任务5的最后一个子任务均已执行完毕,此时任务处理模块可继续从异步任务队列中提取下二个需执行的目标任务,如目标任务2和目标任务3,按照同样的方式对目标任务2和目标任务3进行处理。

在上述实现过程中,通过将多个目标任务加入到异步任务队列中进行处理,使得多个目标任务可并行处理,这样可以避免串行任务模式下执行任务的各个处理间等待时间较长,性能损耗多的问题,通过这种方式,可以将目标任务以队列的方式以及将子任务以子任务执行流的方式不间断地提交给原子接口层130,可有效减少各个处理器间的等待时间,提高任务执行效率。

在一些实施方式中,任务处理模块在执行当前目标任务的子任务的实现方式中,可以从原子接口层130获取当前子任务的执行结果,将当前子任务作为上一子任务,使新的当前子任务的输入包括所属执行结果,然后根据上一子任务和当前目标任务的子任务执行流,从当前目标任务的各子任务中确定当前要执行的当前子任务。

例如,任务处理模块在将当前子任务1提交给原子接口层130后,原子接口层130将子任务1分发至计算平台中的对应处理器执行,在计算平台中的处理器执行完该子任务1后,可以将子任务1的执行结果通过原子接口层130返回给任务处理模块,这样任务处理模块即可从原子接口层130获得该子任务1的执行结果。在执行完子任务1后,查找该当前目标任务对应的子任务执行流,若子任务执行流中子任务1的下一子任务为子任务2,则确定当前要执行的当前子任务为子任务2,由于各个子任务之间具有一定的依赖关系,即下一子任务的输入包含上一子任务的输出,所以在任务处理模块提取子任务2执行时,将子任务1的执行结果作为子任务2的输入。

在上述实现过程中,按照子任务执行流来依次提取需执行的子任务,这样可以不间断地向原子接口层130提交子任务,减少处理器的等待时间,从而可提高子任务的执行效果。

在一些实施方式中,每个子任务都有其对应的处理器类型;任务处理模块,还用于确定当前子任务对应的当前处理器类型,然后可以将当前子任务提交给当前处理器类型对应的worker模块,该worker模块位于原子接口层130。

其中,原子接口层130的worker对应有不同的处理器类型,如有些worker对应CPU,有些worker对应NNIE。Worker本质上为函数,任务处理模块通过调用woker来实现将子任务提交给原子接口层130的过程。

在一些实施方式中,执行当前子任务包括调用当前子任务对应的processor(计算引擎层中的processor模块)来执行当前子任务。在一些实施方式中,任务处理模块中的processor调用woker模块来实现将子任务提交给原子接口层130的过程。processor和子任务类型一一对应。在一些实施方式中,在计算引擎层120添加基类processor的抽象,该抽象包含:线程管理,耗时统计,批量计数等操作,所有的processor均继承自该基类。

在一些实施方式中,当新增加任务类型时,根据新增加的任务类型的配置信息确定新增加的任务类型所包含的子任务类型,并基于基类初始化子任务类型对应的processor。例如新增加了人脸检测任务类型,根据人脸检测任务类型对应的配置信息确定人脸检测类型的目标任务包括图像预处理、检测模型、后过滤模型子任务,会新初始化图像预处理、检测模型、后过滤模型对应的3个processor。

每个子任务对应有一个处理器类型,任务处理模块可在提取当前需执行的当前子任务后,通过查找获得当前子任务对应的处理器类型,然后将当前子任务提交给对应的处理器类型对应的worker模块。例如,当前子任务1对应的处理器类型为CPU,则将当前子任务1提交给CPU类型对应的worker模块。

在一些实施方式中,同一类型的处理器对应的worker模块对应同一个work模块接口,work模块接口接收到当前子任务后,由该接口对应的worker模块确定执行子任务的处理器。

在一些实施方式中,一个work模块接口对应的worker模块可以为1个或多个。一个worker模块接口对应一个worker模块时,表明每种处理器类型对应设置有一个worker模块,worker模块可以用于对每种处理器类型对应的多个处理器进行负载统计,其内部维护有一个处理器任务负载的队列,即已分配给各个处理器处理的任务。或者,为了对处理器的负载进行高效统计,针对每个处理器可单独设置一个worker模块,此时一个work模块接口对应的worker模块可以为多个。如计算平台包括2个NNIE,则有2个worker模块,这两个worker模块分别对应一个NNIE,用于分别统计各自对应的NNIE中的任务执行情况,若当前子任务对应的处理器类型为NNIE,则可在通过NNIE类型对应的worker模块接口接收到子任务后,将当前子任务分别提交给两个worker模块,这两个worker模块根据各自统计的NNIE的任务执行情况协商由谁将当前子任务提交给对应的NNIE,如worker模块1对应NNIE1,worker模块2对应NNIE2,若worker模块1统计的NNIE1中的任务执行数量较少,则可由worker模块1将当前子任务提交给NNIE1。

在上述实现过程中,通过设置处理器类型对应的worker模块,如此可通过worker模块实现对各处理器类型对应的各个处理器的管理,以便于实现任务的高效分发。

在一些实施方式中,在上述确定执行各子任务所需的处理器的实现方式中,可以对计算平台的处理器进行负载统计,并根据处理器的负载情况,确定执行当前子任务的处理器。

原子接口层130可以对计算平台的各个处理器进行负载统计,如统计各个处理器当前需处理以及正在处理的任务数量,任务数量越多表示负载越大,在为当前子任务分配处理器时,为了实现各处理器的负载均衡,将当前子任务分配至负载较小的处理器中。例如,当前子任务对应的处理器类型为CPU,计算平台上包含有3个CPU,则原子接口层130统计这三个CPU的负载情况,如任务数量,若CPU1上的任务数量最少,表示CPU1的负载最小,则将当前子任务分发至CPU1上进行处理。当然,若有两个CPU上的任务数量相同,且小于另一CPU上的任务数量,则可随机将当前子任务分发至其中一个CPU中处理即可。

在上述实现过程中,根据处理器的负载情况进行任务的分配,可确保各处理器间的负载均衡,提高任务处理效率。

在一些实施方式中,可以通过原子接口层130中的worker模块对各处理器的负载情况进行统计,由于各个处理器类型均各自对应有worker模块,所以在将当前子任务提交给对应的worker模块后,可以根据接收当前子任务的worker模块对应的处理器类型确定当前处理器类型,确定当前处理器类型对应的各处理器的负载情况,再根据负载情况从当前处理器类型对应的各处理器中确定执行当前子任务的处理器。

例如,针对当前子任务1,若该子任务1对应的处理器类型为CPU,则将该子任务1提交给CPU对应的worker模块,如此可确定当前处理器类型为CPU,若CPU类型的处理器包含有多个时,则统计各个处理器的负载情况,如任务数量,然后从多个处理器中选择负载最小的一个处理器作为执行子任务1的处理器,如选择任务数量最小的一个处理器作为执行子任务1的处理器。

在一些实施方式中,任务处理模块所能获取的当前目标任务的最大数量为N个,对于多个所述当前目标任务,执行各当前目标任务的子任务的步骤并行执行。

任务处理模块可并行执行多个目标任务。任务处理模块所能获取的当前目标任务的最大数量由任务处理模块能够并行执行的目标任务的数量和当前正在执行的目标任务的数量决定。若任务处理模块能够并行执行的目标任务为N个,且当前没有正在执行的目标任务,则任务处理模块所能获取的当前目标任务的数量为N个。若任务处理模块能够并行执行的目标任务为N个,且当前正在执行的目标任务为2个,则任务处理模块所能获取的当前目标任务的数量为N-2个。无论如何,任务处理模块所能获取的当前目标任务的最大数量不大于任务处理模块能够并行执行的目标任务的数量。

一例中,任务处理器通过维护N条并行流水线的方式来执行正在执行的目标任务,一个目标任务在一条流水线中执行。如图3所示,如目标任务1在流水线1中执行,其对应的子任务在该流水线对应的各个处理器之间流转,例如在处理器CPU-IVE-NNIE中执行,目标任务2在流水线2中执行,其对应的子任务在该流水线对应的各个处理器之间流转,例如在处理器IVE-NNIE-CPU中执行,在分配时,可将子任务分发至对应流水线中的相应处理器,图3中示出的处理器类型表示该流水线所支持的处理器类型,当然计算平台中的处理器类型不同,其流水线对应的处理器也不同。由于流水线有多个,多个目标任务在各流水线中异步执行,所以,可以实现对这些目标任务的异步并行处理,从而可提高处理效率。

可以理解的是,由于各流水线对应的计算平台相同,各流水线对应的处理器类型也相同,特殊情况下,各流水线对应的处理器的类型可以不同。计算平台可以并行运行的流水线个数,也即计算平台运行并行运行的目标任务的数量可根据计算平台的算力确定。在一些实施方式中,在初始化时确定计算平台和计算平台可并行执行的流水线数量。

在一些实施方式中,上述的异步任务模块采用的生产者消费者模式来对异步任务队列进行管理,其异步任务队列包括有多个用于容纳目标任务的任务节点,所以在将目标任务插入到异步任务队列中时,可以通过异步任务模块的生产者消费者模式将目标任务插入到任务队列中的空闲任务节点中。

也就是说,每个任务节点用于维护一个目标任务,任务节点以队列的方式排列。每个任务节点都有一个完整的处理单元,包含目标任务处理过程中的输入数据、中间结果、运行状态等。

若某个任务节点对应的目标任务处理完成之后,异步任务模块可以将该任务节点中所维护的信息删除,该任务节点即可变为空闲任务节点,在分配新的目标任务时,则将该目标任务插入到空闲任务节点中,以减少各个处理器的等待时间。

在一些实施方式中,不同的目标任务可以基于其运行状态来申请空闲任务节点的空间资源,即针对不同的运行状态可以申请的空间资源不同,从而可以避免申请过多的空间资源而造成资源浪费的情况。

在一些实施方式中,对外接口层110还可以包括handle接口,该handle接口用于接收算法句柄的初始化请求,该初始化请求包括目标任务的配置信息和与目标任务相关的需加载的模型信息,在计算引擎层120中的任务拆分模块可根据目标任务类型对应的配置信息,将模型信息组成目标任务的子任务执行流。

其中,在执行目标任务之前,还需要先对系统进行初始化,在初始化阶段配置各任务类型对应的配置信息和执行该各任务类型的目标任务所需的模型信息,如模型类型、模型版本等模型信息。并且,在拆分子任务时,还可以根据配置信息将模型信息组成指子任务执行流,比如执行子任务时是否需要调用模型、需要调用哪些模型。

在一些实施方式中,一个算法句柄可以表示一个最小的算法运行单元(即模型信息),当创建算法句柄时,可以实现任务类型对应的模型信息的配置。该handle接口还可以对算法句柄进行销毁或复位操作,以实现算法场景的切换,如在算法场景切换时,可以通过对算法句柄进行销毁或复位操作,如将原有的算法句柄进行销毁后添加一个新的算法句柄,或者对原有的算法句柄进行复位操作,从而可重新实现配置信息和模型信息的配置,实现算法场景的切换。

另外,如图4所示,任务调度系统100还可包括有Kits模块,该模块用于提供基础的组件接口,如:日志组件,定时器组件,Json序列化组件,Xml序列化组件,数据队列,计时器等。

计算引擎层120还包括有Handle Manager模块,该模块可用于管理算法句柄,每一个算法句柄可以独立配置,该模块内部内部会维护句柄运行的上下文信息。

计算引擎层120还包括Search模块,用于进行特征检索,人脸识别等。

计算引擎层120还包括Compare模块,可用于将两张人脸图像进行比对,主要应用于人脸验证之类的比对场景。

原子接口层130还可以包括原子接口层130所支持的算法模块(人脸检测模型,车辆识别模型),其主要实现人脸场景,视频结构化场景等具体模型的处理。比如:人脸检测模型,人脸检测模型会实现该模型需要的图像转换,softmax,nms等多个处理。

原子接口层130还可以包括Img模块,其可用于封装通用的图像处理操作,如:压缩,色彩转换,透视变换,仿射变换等,此外还会针对具体平台进行一些处理的加速优化。

原子接口层130还可以包括Track模块,其可用于实现人脸跟踪。

请参照图5,图5为本申请实施例提供的一种任务调度方法的流程图,该方法包括如下步骤:

步骤S210:通过所述对外接口层接收所述目标任务,所述目标任务包括待处理数据和目标任务类型。

步骤S220:通过所述计算引擎层根据所述目标任务类型对应的配置信息,将所述目标任务拆分成多个由计算平台的处理器执行的子任务,并将所述子任务提交给原子接口层;其中,所述配置信息包含完成所述目标任务所要执行的子任务和各个子任务之间的依赖关系。

步骤S230:通过所述原子接口层确定执行各所述子任务所需的处理器,通过调用计算平台的计算接口将所述子任务分发至相应处理器。

可选地,所述目标任务的数量为多个;所述计算引擎层包括任务拆分模块、异步任务模块和任务处理模块;所述方法还包括:

通过所述任务拆分模块根据所述目标任务类型对应的配置信息,将每个目标任务拆分成多个由计算平台的处理器执行的子任务,得到每个目标任务的子任务执行流;

通过所述异步任务模块将多个所述目标任务插入到异步任务队列中;

通过所述任务处理模块从所述异步任务队列中获取当前处理的当前目标任务,执行所述当前目标任务的子任务,直到所述当前目标任务的各子任务均执行完毕,所述执行当前目标任务的子任务包括:根据所述当前目标任务的子任务执行流从所述当前目标任务的各子任务中确定当前要执行的当前子任务,将所述当前子任务提交给所述原子接口层。

可选地,所述执行当前目标任务的子任务还包括:从所述原子接口层获取当前子任务的执行结果,将当前子任务作为上一子任务,将所述执行结果作为新的当前子任务的输入;

根据所述当前目标任务的子任务执行流从所述当前目标任务的各子任务中确定当前要执行的当前子任务包括:根据所述上一子任务和所述当前目标任务的子任务执行流,从所述当前目标任务的各子任务中确定当前要执行的当前子任务。

可选地,每个子任务都有其对应的处理器类型;

所述将当前子任务提交给所述原子接口层,包括:将所述当前子任务提交给所述当前处理器类型对应的worker模块,所述worker模块位于所述原子接口层。

可选地,所述确定执行各所述子任务所需的处理器,包括:对所述计算平台的处理器进行负载统计,并根据处理器的负载情况,确定执行当前子任务的处理器。

可选地,所述根据处理器的负载情况,确定执行所述当前子任务的处理器,包括:

根据接收当前子任务的worker模块对应的处理器类型确定当前处理器类型,确定当前处理器类型对应的各处理器的负载情况,根据所述负载情况从当前处理器类型对应的各处理器中确定执行所述当前子任务的处理器。

可选地,所述计算引擎层所能获取的当前目标任务的最大数量为N个,对于多个所述当前目标任务,执行各当前目标任务的子任务的步骤并行执行。

可选地,所述对外接口层包括handle接口;所述方法还包括:

通过所述handle接口接收算法句柄的初始化请求,所述初始化请求包括所述目标任务的配置信息和与所述目标任务相关的需加载的模型信息;

所述根据目标任务类型对应的配置信息,将多个所述目标任务拆分成多个由计算平台的处理器执行的子任务,包括:根据目标任务类型对应的配置信息,将所述模型信息组织成所述目标任务的子任务执行流。

可选地,所述方法还包括:

通过所述硬件抽象层通过注册回调函数的方式将待注册的计算平台注册到所述硬件抽象层。

需要说明的是,本领域技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的方法的具体工作过程,可以参考前述系统实施例中的对应过程,在此不再重复描述。

请参照图6,图6为本申请实施例提供的一种用于执行任务调度方法的电子设备的结构示意图,上述的任务调度系统运行在该电子设备中,所述电子设备可以包括:至少一个处理器210,例如CPU,至少一个通信接口220,至少一个存储器230和至少一个通信总线240。其中,通信总线240用于实现这些组件直接的连接通信。其中,本申请实施例中设备的通信接口220用于与其他节点设备进行信令或数据的通信。存储器230可以是高速RAM存储器,也可以是非易失性的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器230可选的还可以是至少一个位于远离前述处理器的存储装置。存储器230中存储有计算机可读取指令,当所述计算机可读取指令由所述处理器210执行时,电子设备执行上述图5所示方法过程。

可以理解,图5所示的结构仅为示意,所述电子设备还可包括比图5中所示更多或者更少的组件,或者具有与图5所示不同的配置。图5中所示的各组件可以采用硬件、软件或其组合实现。

本申请实施例提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,执行如图5所示方法实施例中电子设备所执行的方法过程。

本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如,包括:通过所述对外接口层接收所述目标任务,所述目标任务包括待处理数据和目标任务类型;通过所述计算引擎层根据所述目标任务类型对应的配置信息,将所述目标任务拆分成多个由计算平台的处理器执行的子任务,并将所述子任务提交给原子接口层;其中,所述配置信息包含完成所述目标任务所要执行的子任务和各个子任务之间的依赖关系;通过所述原子接口层确定执行各所述子任务所需的处理器,通过调用计算平台的计算接口将所述子任务分发至相应处理器。

综上所述,本申请实施例提供一种任务调度系统、方法、电子设备及可读存储介质,该系统使用了分层的设计,包括对外接口层、计算引擎层、原子接口层和硬件抽象层。对于不同的计算平台,通过硬件抽象层提供统一的计算接口,从而可以将计算平台与上层业务解耦,这样在切换不同的计算平台或算法场景时,只需要在硬件抽象层注册对应的计算平台即可,容易实现计算平台的扩展,无需重新设计整个系统,节省了开发成本和时间。

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

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

再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

相关技术
  • 任务调度系统、方法、电子设备及可读存储介质
  • 任务调度方法和装置、电子设备以及计算机可读存储介质
技术分类

06120113008407