一种深度学习模型的运行方法、装置、电子设备及介质与流程

文档序号:22739358发布日期:2020-10-31 09:21阅读:175来源:国知局
一种深度学习模型的运行方法、装置、电子设备及介质与流程

本申请涉及人工智能技术领域,具体而言,涉及一种深度学习模型的运行方法、装置、电子设备及介质。



背景技术:

目前,随着人工智能的蓬勃发展,越来越多的深度学习模型被部署在智能设备上,例如人脸识别模型、目标检测模型、目标追踪模型。ocr(opticalcharacterrecognition,光学字符识别)模型等。在智能设备上运行深度学习模型时会占用较多的cpu资源,从而带来不小的cpu负载,导致整个深度学习模型的运行过程出现卡顿或运行不准确的问题,严重的甚至会对智能设备的系统带来不良影响。

针对上述问题,现有技术提出了以下两种技术方案:

技术方案一:通过降低模型复杂度来降低运行深度学习模型时的cpu负载,常见的手段包括模型压缩和模型裁剪。对于复杂度越低的模型,在运行时常常会占用越少的cpu资源,从而降低cpu负载,但是深度学习模型的低复杂度往往以牺牲模型的精度为代价。真实的ai应用场景中对深度学习模型的精度有较高的要求,而采用该方案常常难以满足应用要求。

技术方案二:通过优化深度学习模型算子底层代码的实现来降低运行时的cpu负载。该方案的实现对开发者的技术要求高,且需要花费较多时间用于底层代码优化,但难以保证优化后的效果。同时,智能设备多种多样,涉及的cpu架构也各有不同。在某一种cpu上的优化方案,对其他cpu不具有通用性。综上,采用该方案在实际应用时十分复杂、易用性较低。



技术实现要素:

有鉴于此,本申请的目的在于提供一种深度学习模型的运行方法、装置、电子设备及介质,可以在不降低模型复杂度和优化模型算子底层代码的情况下,实现降低cpu负载的目的。

根据本申请的第一方面,提供一种深度学习模型的运行方法,包括:

获取深度学习模型中各个算子之间的逻辑关系;

根据各个算子之间的逻辑关系,调整所述深度学习模型中各个算子的运行时间,以使所述调整后的深度学习模型中,至少两个逻辑关系相连续的算子的运行总时长被延长;

按照所述调整后的所述深度学习模型中各个算子的运行时间,运行所述深度学习模型。

在一种可能的实施方式中,根据各个算子之间的逻辑关系,调整所述深度学习模型中各个算子的运行时间,以使所述调整后的深度学习模型中,至少两个逻辑关系相连续的算子的运行总时长被延长,包括:

针对至少一个目标算子对,在该目标算子对中的两个算子之间设置预定的延迟时间,以使该目标算子对的运行总时长被延长;所述目标算子对中的两个算子是逻辑关系相连续的两个算子,所述延迟时间用于表征目标算子对中的两个算子的执行间隔时间。

在一种可能的实施方式中,通过以下步骤确定所述目标算子对中的两个算子的延迟时间:

针对所述目标算子对,根据该目标算子对中的前一个算子的计算量确定该目标算子对中的两个算子的延迟时间。

在一种可能的实施方式中,通过以下步骤确定每个算子的计算量,包括:

针对每个算子,获取该算子在运行时所需的计算参数;所述计算参数包括以下的任意一种或多种:调用的计算单元数量、计算单元的调用次数;

基于每个算子在运行时所需的计算参数,确定该算子的计算量。

在一种可能的实施方式中,任意所述目标算子对中的两个算子的延迟时间均是相同的。

在一种可能的实施方式中,通过以下步骤确定所述目标算子对中的两个算子的延迟时间:

以所述深度学习模型中所有目标算子对的延迟时间变量的累加值不大于预设的总延迟时间,且每个目标算子对的延迟时间变量的平均值最大为约束条件,求解每个目标算子对的延迟时间变量的值;

基于求解的所述目标算子对的延迟时间变量的值,确定所述目标算子对中的两个算子的延迟时间。

在一种可能的实施方式中,通过以下步骤确定所述深度学习模型中所有目标算子对的延迟时间变量的累加值:

针对所述深度学习模型并行运行的情况,若多个目标算子对中的后一个算子均为同一算子,则所述多个目标算子对的延迟时间变量的累加值为所述多个目标算子对的延迟时间变量的值中的最大值。

在一种可能的实施方式中,通过以下步骤确定所述深度学习模型中所有目标算子对的延迟时间变量的累加值:

针对所述深度学习模型串行运行的情况,若多个目标算子对中的后一个算子均为同一算子,则所述多个目标算子对的延迟时间变量的累加值为所述多个目标算子对的延迟时间变量的值的累加值。

在一种可能的实施方式中,获取深度学习模型中各个算子之间的逻辑关系,包括:

利用模型解析工具对所述深度学习模型进行模型解析,得到模型数据流图;

从所述模型数据流图中获取所述深度学习模型中各个算子之间的逻辑关系。

根据本申请的第二方面,提供一种深度学习模型的运行装置,包括:

获取模块,用于获取深度学习模型中各个算子之间的逻辑关系;

调整模块,用于根据各个算子之间的逻辑关系,调整所述深度学习模型中各个算子的运行时间,以使所述调整后的深度学习模型中,至少两个逻辑关系相连续的算子的运行总时长被延长;

运行模块,用于按照所述调整后的所述深度学习模型中各个算子的运行时间,运行所述深度学习模型。

在一种可能的实施方式中,所述调整模块包括:

设置单元,用于针对至少一个目标算子对,在该目标算子对中的两个算子之间设置预定的延迟时间,以使该目标算子对的运行总时长被延长;所述目标算子对中的两个算子是逻辑关系相连续的两个算子,所述延迟时间用于表征目标算子对中的两个算子的执行间隔时间。

在一种可能的实施方式中,所述调整模块还包括:

第一确定单元,用于针对所述目标算子对,根据该目标算子对中的前一个算子的计算量确定该目标算子对中的两个算子的延迟时间。

在一种可能的实施方式中,所述调整模块还包括:

获取单元,用于针对每个算子,获取该算子在运行时所需的计算参数;所述计算参数包括以下的任意一种或多种:调用的计算单元数量、计算单元的调用次数;

第二确定单元,用于基于每个算子在运行时所需的计算参数,确定该算子的计算量。

在一种可能的实施方式中,任意所述目标算子对中的两个算子的延迟时间均是相同的。

在一种可能的实施方式中,所述调整模块还包括:

求解单元,用于以所述深度学习模型中所有目标算子对的延迟时间变量的累加值不大于预设的总延迟时间,且每个目标算子对的延迟时间变量的平均值最大为约束条件,求解每个目标算子对的延迟时间变量的值;

第三确定单元,用于基于求解的所述目标算子对的延迟时间变量的值,确定所述目标算子对中的两个算子的延迟时间。

在一种可能的实施方式中,所述调整模块还包括:

第四确定单元,用于针对所述深度学习模型并行运行的情况,若多个目标算子对中的后一个算子均为同一算子,则将所述多个目标算子对的延迟时间变量的值中的最大值确定为所述多个目标算子对的延迟时间变量的累加值。

在一种可能的实施方式中,所述调整模块还包括:

第五确定单元,用于针对所述深度学习模型串行运行的情况,若多个目标算子对中的后一个算子均为同一算子,则将所述多个目标算子对的延迟时间变量的值的累加值确定为所述多个目标算子对的延迟时间变量的累加值。

在一种可能的实施方式中,所述获取模块包括:

模型解析单元,用于利用模型解析工具对所述深度学习模型进行模型解析,得到模型数据流图;

关系获取单元,用于从所述模型数据流图中获取所述深度学习模型中各个算子之间的逻辑关系。

根据本申请的第三方面,提供一种电子设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行上述第一方面,第一方面中任一可能的实施方式中所述方法的步骤。

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

本申请实施例提供一种深度学习模型的运行方法、装置、电子设备及介质,其中,该方法包括:获取深度学习模型中各个算子之间的逻辑关系;根据各个算子之间的逻辑关系,调整所述深度学习模型中各个算子的运行时间,以使所述调整后的深度学习模型中,至少两个逻辑关系相连续的算子的运行总时长被延长;按照所述调整后的所述深度学习模型中各个算子的运行时间,运行所述深度学习模型。本申请所提供的方案,针对传统方案中通过降低模型复杂度来降低cpu负载所导致的牺牲模型的精度的问题,以及优化模型算子底层代码的实现来降低cpu负载所导致的优化底层代码复杂度高以及通用性差的问题进行改进,即本申请首先获取深度学习模型中各个算子之间的逻辑关系,然后调整各个算子的运行时间,使得至少两个逻辑关系相连续的算子的运行总时长被延长,从而拉长了深度学习模型中各个算子的总运行时间,最后按照所述调整后的所述深度学习模型中各个算子的运行时间,运行所述深度学习模型。采用本申请所提供的方案可以在不降低模型复杂度和优化模型算子底层代码的情况下,实现降低cpu负载的目的。

附图说明

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

图1示出了本申请实施例提供的一种深度学习模型的运行方法的流程图;

图2示出了深度学习模型(vgg-19模型)的模型数据流图的具体实例;

图3示出了目标算子对的示意图;

图4示出了目标算子对中的两个算子的延迟时间的分配示意图;

图5示出了深度学习模型并行运行的情况下,目标算子对中的两个算子的延迟时间的最优分配示意图;

图6示出了深度学习模型串行运行的情况下,目标算子对中的两个算子的延迟时间的最优分配示意图;

图7示出了本申请实施例提供的一种深度学习模型的运行装置的结构示意图;

图8示出了本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。

另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。

传统方案一中,通过降低模型复杂度来降低运行深度学习模型时的cpu负载,常见的手段包括模型压缩和模型裁剪。对于复杂度越低的模型,在运行时常常会占用越少的cpu资源,从而降低cpu负载,但是深度学习模型的低复杂度往往以牺牲模型的精度为代价。真实的ai应用场景中对深度学习模型的精度有较高的要求,而采用该方案常常难以满足应用要求。

传统方案二中,通过优化深度学习模型算子底层代码的实现来降低运行时的cpu负载。该方案的实现对开发者的技术要求高,且需要花费较多时间用于底层代码优化,但难以保证优化后的效果。同时,智能设备多种多样,涉及的cpu架构也各有不同。在某一种cpu上的优化方案,对其他cpu不具有通用性。综上,采用该方案在实际应用时十分复杂、易用性较低。

基于上述技术问题,本申请实施例提供了一种深度学习模型的运行方法,下面进行详细说明。

请参照图1,图1为本申请实施例提供的一种深度学习模型的运行方法的流程图。如图1所示,所述运行方法主要包括以下步骤:

步骤s101、获取深度学习模型中各个算子之间的逻辑关系;

步骤s102、根据各个算子之间的逻辑关系,调整所述深度学习模型中各个算子的运行时间,以使所述调整后的深度学习模型中,至少两个逻辑关系相连续的算子的运行总时长被延长;

步骤s103、按照所述调整后的所述深度学习模型中各个算子的运行时间,运行所述深度学习模型。

在步骤s101中,深度学习模型指的是具有“多隐层”的神经网络,这里的“多隐层”代表有三个以上隐层。深度学习模型通常有八九层甚至更多隐层。隐层多了,相应的神经元连接的权重、阈值等参数就会更多。这意味着深度学习模型可以自动提取很多复杂的特征。随着云计算、大数据时代的到来,海量的训练数据配合逐层预训练和误差逆传播微调的方法,让模型训练效率大幅提高,同时降低了过拟合的风险。常见的深度学习模型包括:alexnet模型、vggnet模型、googlenet模型、resnet模型、resnext模型、r-cnn模型、squeezenet模型和gan模型等等。本实施例中的深度学习模型为延时非敏感的深度学习模型,也即性能指标中不关注延时带来的不利影响的深度学习模型。

算子指的是一个函数空间到函数空间上的映射o:x→x。广义上的算子可以推广到任何空间。在本实施例中,深度学习模型的算子指的是深度学习模型中每一层的运算。也即,将深度学习模型中每一层的运算封装成一个算子。

逻辑关系即“依赖关系”,是指在深度学习模型中,两个算子中一个算子的变更将会影响到另一个算子的关系。并且,逻辑关系是相对的,对于算子a,其既可以为算子b的前置算子、算子c的后置算子,也可以为算子d的并列算子。因此,算子a与算子b为前置关系,算子a与算子c为后置算子,算子a与算子d为并列关系。

在一种可能的实施方式中,利用模型解析工具对所述深度学习模型进行模型解析,得到模型数据流图。然后从所述模型数据流图中获取所述深度学习模型中各个算子之间的逻辑关系。

关于模型解析工具,一般深度学习推理引擎或框架(如pytorch、tensorflow、厂商自研产品等)均自带有模型解析工具,市场上也有一些专门的模型解析工具,用于对深度学习模型进行模型解析。

模型数据流图是从解析后的深度学习模型文件中获取的,逻辑关系是从模型数据流图中获取的。模型数据流图能用来清晰地展示了深度学习模型的每一层的算子以及各个算子之间的逻辑关系。请参照图2,图2示出了深度学习模型(vgg-19模型)的模型数据流图的具体实例。如图2所示,vgg-19模型的模型数据流图中包括二维卷积算子(conv)、池化算子(pool)和全连接算子(fc)。需要说明的是,图2中的模型数据流图仅用于教导本领域技术人员如何实施本发明,本发明不限于此,还可以为其他类型的模型数据流图,例如具有分支的模型数据流图。

在步骤s102中,逻辑关系相连续指的是:一个算子的输出结果为另一算子的输入条件,那么这两个算子逻辑关系相连续。如图2所示,模型流程图中第一个二维卷积算子的输出结果为第二个二维卷积算子的输入条件,那么模型流程图中前两个二维卷积算子逻辑关系相连续。

每个算子的运行时间为从该算子开始运行到下一算子开始运行之间的时长。两个逻辑关系相连续的算子的运行总时长为从两个逻辑关系相连续的算子中的前一算子开始运行到后一算子结束运行之间的时长。

传统方案中,深度学习模型运行时,是按照模型数据流图的逻辑关系无延迟地依次执行每个算子。本实施例通过调整模型数据流图中各个算子的运行时间,来延长至少两个逻辑关系相连续的算子的运行总时长。例如:通过调整图2中第二个算子(二维卷积算子)和第三个算子(池化算子)的运行时间,来延长该二维卷积算子和该池化算子的运行总时长。

在步骤s103中,运行指的是对深度学习模型中的算子进行深度推理,一般采用深度学习推理引擎或框架(如pytorch、tensorflow、厂商自研产品等)进行深度推理。

对于移动端降低负载的情况,步骤s103在移动端实现,上述步骤s101和步骤s102在云端实现,从而降低移动端的计算量。步骤s103改进了移动端的深度学习模型的推理框架的功能,即改进深度学习模型的运行顺序,从无间隔运行各个算子改进为按照调整后的运行时间来运行各个算子,从而降低移动端的cpu负载。移动端(移动互联网终端)是指通过无线网络技术上网接入互联网的终端设备。移动端可以为手机、平板电脑、行车记录仪、智能导航仪等移动互联网终端。

对于云端降低负载的情况,上述步骤s101至步骤s103均在云端实现,从而在云端cpu资源异常紧张的情况降低云端cpu负载。

综上,按照调整后的深度学习模型中各个算子的运行时间,运行所述深度学习模型,可以减少cpu资源的利用,降低了cpu负载。采用本申请实施例所提供的方案可以在不降低模型复杂度和优化模型算子底层代码的情况下,实现降低cpu负载的目的。一方面,由于采取降低模型复杂度来降低cpu负载会降低模型精度,无法满足真实的ai应用场景的应用需求,采用本申请所提供的方案无需改变模型结构,不会牺牲模型精度,能够满足真实的ai应用场景的应用需求。另一方面,由于优化模型算子底层代码来降低cpu负载会导致在实际应用时十分复杂、易用性较低,采用本申请所提供的方案降低了实际应用的复杂度,并且可以应用于各种类型的cpu上,具有通用性。

下面对上述步骤s102进行详细说明。

目标算子对中的两个算子是逻辑关系相连续的两个算子。深度学习模型中各个算子可以按照逻辑关系组成多个目标算子对,请参照图3,图3为目标算子对的示意图。如图3所示,深度学习模型中各个算子的逻辑关系为算子a-算子b-算子c-算子d,那么算子a和算子b组成一个目标算子对,算子b和算子c组成一个目标算子对,算子c和算子d组成一个目标算子对,算子d和下一个要运行的算子组成一个目标算子对。图3中目标算子对的组合形式仅用于教导本领域技术人员如何实施本发明,本发明不限于此,还可以一个算子指向多个算子,一个算子分别与多个算子组成多个目标算子对。

延迟时间用于表征目标算子对中的两个算子的执行间隔时间。例如:现有的目标算子对中的算子a和算子b在执行时无延迟,本实施例执行完目标算子对中的算子a之后,延迟一定时间,再继续执行目标算子对中的算子b。

目标算子对的运行总时长为目标算子对中前一个算子开始运行到后一个算子结束运行之间的时长。假设目标算子对包括算子a和算子b,算子a开始运行到结束运行的时长表示为ta,算子b开始运行到结束运行的时长表示为tb。算子a和算子b的执行间隔时间,即算子a结束运行到算子b开始运行之间的时长,表示为tc。那么目标算子对的运行总时长t总=ta+tb+tc。

在一种可能的实施方式中,针对至少一个目标算子对,在该目标算子对中的两个算子之间设置预定的延迟时间,以使该目标算子对的运行总时长被延长。在该实施方式中,包括两种情况,第一种情况:对部分目标算子对中的两个算子之间设置预定的延迟时间;第二种情况,对全部目标算子对中的两个算子之间设置预定的延迟时间。

对于如何确定目标算子对中的两个算子的延迟时间,下面进行详细介绍。

(1)针对目标算子对,根据该目标算子对中的前一个算子的计算量确定该目标算子对中的两个算子的延迟时间。

关于算子的计算量,需要说明的是,针对每个算子,获取该算子在运行时所需的计算参数;所述计算参数包括以下的任意一种或多种:调用的计算单元数量、计算单元的调用次数。然后基于每个算子在运行时所需的计算参数,确定该算子的计算量。举例来说,对于二维卷积算子,其包括多个简单运算(例如乘积、求和等),每种简单运算在运行时需要调用一次相应的计算单元,因此在确定二维卷积的计算量时可以通过调用的计算单元数量和/或计算单元的调用次数来确定。

需要说明的是,深度学习模型中所有目标算子对的总延迟时间,需要满足低于该深度学习模型可容忍的总延迟时间的条件。也即,本实施例适用于延时非敏感的深度学习模型,不适用于对于实时性要求很高的深度学习模型。深度学习模型所有算子的可容忍运行总时长减去深度学习模型所有算子的实际运行总时长,可以得到深度学习模型可容忍的总延迟时间。举例来说,人脸识别模型所有算子的可容忍运行总时长为10秒左右,人脸识别模型所有算子的实际运行总时长为2秒左右,那么人脸识别模型可容忍的总延迟时间为8秒左右。

针对第一种情况,即对部分目标算子对中的两个算子之间设置预定的延迟时间。

将深度学习模型可容忍的总延迟时间,按照部分目标算子对中的前一个算子的计算量,分配给部分目标算子对。具体实施中,按照各个算子的计算量将各个算子分为几个等级,计算量小,计算量中,计算量大。若算子的计算量小,则该算子的权重可分配为0;若算子的计算量中,则该算子的权重可分配为2;若算子的计算量高,则该算子的权重可分配为3。计算各个算子的总权重∑ωi,计算每个算子的权重ωi与总权重∑ωi的比值ρi,将该比值ρi与深度学习模型可容忍的总延迟时间t相乘,得到每个算子所属目标算子对的延迟时间ti=ρi*t,该算子为所属目标算子对的前一个算子。对于计算量小的算子,其所属目标算子对的延迟时间ti为0,那么相当于仅对部分目标算子对中的两个算子之间设置非零的延迟时间。

请参照图4,图4为目标算子对中的两个算子的延迟时间的分配示意图。如图4所示,假设算子a计算量小,ω1=0;算子b计算量中,ω2=2;算子c计算量小,ω3=2;算子d计算量大,ω4=3。并且假设t=10s。

算子a对应的ρ1=ω1/(ω1+ω2+ω3+ω4)=0/(0+2+2+3)=0;

算子b对应的ρ2=ω2/(ω1+ω2+ω3+ω4)=2/(0+2+2+3)=0.286;

算子c对应的ρ3=ω3/(ω1+ω2+ω3+ω4)=2/(0+2+2+3)=0.286;

算子d对应的ρ4=ω4/(ω1+ω2+ω3+ω4)=3/(0+2+2+3)=0.428。

算子a所属目标算子对的延迟时间t1=ρ1*t=0s;

算子b所属目标算子对的延迟时间t2=ρ2*t=0.286*10s=2.86s;

算子c所属目标算子对的延迟时间t3=ρ3*t=0.286*10s=2.86s;

算子d所属目标算子对的延迟时间t4=ρ4*t=0.428*10s=4.28s。

上述算子权重的分配数值仅用于教导本领域技术人员如何实施本发明,本发明不限于此,在具体实施中还可以为算子权重分配其他数值。并且,深度学习模型可容忍的总延迟时间为10s仅用于教导本领域技术人员如何实施本发明,在具体实施中根据不同深度学习模型设置不同的可容忍的总延迟时间。

针对第二种情况,即对全部目标算子对中的两个算子之间设置预定的延迟时间。

将深度学习模型可容忍的总延迟时间,按照全部目标算子对中的前一个算子的计算量,分配给全部目标算子对。具体实施中,分别确定每个算子的计算量qi,根据每个算子的计算量qi确定该算子的权重。例如,预先从算子的最小计算量到最大计算量均分为多个数值范围。处于第一数值范围的,算子的权重为1,处于第二数值范围的,算子的权重为2,…以此类推,从而构建了算子的权重表。在该权重表中,每个权重对应算子的计算量的数值范围。在已知算子的计算量qi时,可以通过该权重表查询对应的权重。计算各个算子的总权重∑ωi,计算每个算子的权重ωi与总权重∑ωi的比值ρi,将该比值ρi与深度学习模型可容忍的总延迟时间t相乘,得到每个算子所属目标算子对的延迟时间ti=ρi*t,该算子为所属目标算子对的前一个算子。

如图4所示,假设算子a的计算量处于第一数值范围,算子b的计算量处于第二数值范围,算子c的计算量处于第五数值范围,算子d的计算量处于第二数值范围。那么ω1=1,ω2=2,ω3=5,ω4=2。并且假设t=10s。

算子a对应的ρ1=ω1/(ω1+ω2+ω3+ω4)=1/(1+2+5+2)=0.1;

算子b对应的ρ2=ω2/(ω1+ω2+ω3+ω4)=2/(1+2+5+2)=0.2;

算子c对应的ρ3=ω3/(ω1+ω2+ω3+ω4)=5/(1+2+5+2)=0.5;

算子d对应的ρ4=ω4/(ω1+ω2+ω3+ω4)=2/(1+2+5+2)=0.2。

算子a所属目标算子对的延迟时间t1=ρ1*t=0.1*10s=1s;

算子b所属目标算子对的延迟时间t2=ρ2*t=0.2*10s=2s;

算子c所属目标算子对的延迟时间t3=ρ3*t=0.5*10s=5s;

算子d所属目标算子对的延迟时间t4=ρ4*t=0.2*10s=2s。

上述算子权重的分配数值仅用于教导本领域技术人员如何实施本发明,本发明不限于此,在具体实施中还可以为算子权重分配其他数值。并且,深度学习模型可容忍的总延迟时间为10s仅用于教导本领域技术人员如何实施本发明,在具体实施中根据不同深度学习模型设置不同的可容忍的总延迟时间。

综上,针对所述目标算子对,根据该目标算子对中的前一个算子的计算量确定该目标算子对中的两个算子的延迟时间。在该方案中,针对计算量大的算子,设置的权重大,从而对应的目标算子对中的两个算子的延迟时间长;针对计算量小的算子,设置的权重小甚至为0,从而应的目标算子对中的两个算子的延迟时间短甚至为0。这样,在模型运行过程中,给计算量大的算子足够的延迟时间来降低该算子在单位时间内的cpu负载,可以降低每个算子在单位时间内的cpu负载。

(2)任意所述目标算子对中的两个算子的延迟时间均是相同的。

针对第一种情况,即对部分目标算子对中的两个算子之间设置预定的延迟时间。

将深度学习模型可容忍的总延迟时间平均分配给部分目标算子对。具体实施中,首先确定需要设置延迟时间的部分目标算子对,一般为占用cpu资源较多的目标算子对,例如各种卷积算子。其次,将选中的部分目标算子对的前一个算子的权重设为1,其他目标算子对的前一个算子的权重设为0。计算各个算子的总权重∑ωi,计算每个算子的权重ωi与总权重∑ωi的比值ρi,将该比值ρi与深度学习模型可容忍的总延迟时间t相乘,得到每个算子所属目标算子对的延迟时间ti=ρi*t,该算子为所属目标算子对的前一个算子。这样,选中的部分目标算子对中的两个算子的延迟时间相同,其他目标算子对中的两个算子的延迟时间为0。

如图4所示,假设算子b和算子c为卷积算子,ω1=0,ω2=1,ω3=1,ω4=0。并且假设t=10s。

算子a对应的ρ1=ω1/(ω1+ω2+ω3+ω4)=0/(0+1+1+0)=0;

算子b对应的ρ2=ω2/(ω1+ω2+ω3+ω4)=1/(0+1+1+0)=0.5;

算子c对应的ρ3=ω3/(ω1+ω2+ω3+ω4)=1/(0+1+1+0)=0.5;

算子d对应的ρ4=ω4/(ω1+ω2+ω3+ω4)=0/(0+1+1+0)=0。

算子a所属目标算子对的延迟时间t1=ρ1*t=0*10s=0s;

算子b所属目标算子对的延迟时间t2=ρ2*t=0.5*10s=5s;

算子c所属目标算子对的延迟时间t3=ρ3*t=0.5*10s=5s;

算子d所属目标算子对的延迟时间t4=ρ4*t=0*10s=0s。

上述算子权重的分配数值仅用于教导本领域技术人员如何实施本发明,本发明不限于此,在具体实施中还可以为算子权重分配其他数值。并且,深度学习模型可容忍的总延迟时间为10s仅用于教导本领域技术人员如何实施本发明,在具体实施中根据不同深度学习模型设置不同的可容忍的总延迟时间。

针对第二种情况,即对全部目标算子对中的两个算子之间设置预定的延迟时间。

将深度学习模型可容忍的总延迟时间平均分配给全部目标算子对。具体实施中,每个算子的权重ωi相同,例如每个算子的权重ωi均为1。计算各个算子的总权重∑ωi,计算每个算子的权重ωi与总权重∑ωi的比值ρi,将该比值ρi与深度学习模型可容忍的总延迟时间t相乘,得到每个算子所属目标算子对的延迟时间ti=ρi*t,该算子为所属目标算子对的前一个算子。这样,全部目标算子对中的两个算子的延迟时间相同。

如图4所示,假设算子a、算子b、算子c和算子d的权重相同,即ω1=1,ω2=1,ω3=1,ω4=1。并且假设t=10s。

算子a对应的ρ1=ω1/(ω1+ω2+ω3+ω4)=1/(1+1+1+1)=0.25;

算子b对应的ρ2=ω2/(ω1+ω2+ω3+ω4)=1/(1+1+1+1)=0.25;

算子c对应的ρ3=ω3/(ω1+ω2+ω3+ω4)=1/(1+1+1+1)=0.25;

算子d对应的ρ4=ω4/(ω1+ω2+ω3+ω4)=1/(1+1+1+1)=0.25。

算子a所属目标算子对的延迟时间t1=ρ1*t=0.25*10s=2.5s;

算子b所属目标算子对的延迟时间t2=ρ2*t=0.25*10s=2.5s;

算子c所属目标算子对的延迟时间t3=ρ3*t=0.25*10s=2.5s;

算子d所属目标算子对的延迟时间t4=ρ4*t=0.25*10s=2.5s。

上述算子权重的分配数值仅用于教导本领域技术人员如何实施本发明,本发明不限于此,在具体实施中还可以为算子权重分配其他数值。并且,深度学习模型可容忍的总延迟时间为10s仅用于教导本领域技术人员如何实施本发明,在具体实施中根据不同深度学习模型设置不同的可容忍的总延迟时间。

综上,将深度学习模型可容忍的总延迟时间平均分配给部分或全部目标算子对,为部分或全部目标算子对中的前一个算子分配相同的权重,从而实现任意所述目标算子对中的两个算子的延迟时间均是相同的,实现过程比较简单、便捷。

(3)通过最优求解方法确定目标算子对中的两个算子的延迟时间。

延迟时间变量为目标算子对的延迟时间的未知变量。深度学习模型中所有目标算子对的延迟时间变量的累加值指的是:深度学习模型中所有目标算子对的总延迟时间变量。预设的总延迟时间为深度学习模型可容忍的总延迟时间。每个目标算子对的延迟时间变量的平均值指的是:每个目标算子对的延迟时间变量的多个解的平均值。

深度学习模型并行运行指的是同时运行并列的两个算子,可以节省运行时间。深度学习模型串行运行指的是依次执行每个算子,即使两个算子并列,也是执行完一个算子后再执行下一算子。

对于模型数据流图中的算子存在分支的情况,可以采用最优分配方法来确定延迟时间。具体地,以所述深度学习模型中所有目标算子对的延迟时间变量的累加值不大于预设的总延迟时间,且每个目标算子对的延迟时间变量的平均值最大为约束条件,求解每个目标算子对的延迟时间变量的值。基于求解的所述目标算子对的延迟时间变量的值,确定所述目标算子对中的两个算子的延迟时间。

1)针对所述深度学习模型并行运行的情况,若多个目标算子对中的后一个算子均为同一算子,则所述多个目标算子对的延迟时间变量的累加值为所述多个目标算子对的延迟时间变量的值中的最大值。

请参照图5,图5为深度学习模型并行运行的情况下,目标算子对中的两个算子的延迟时间的最优分配示意图。如图5所示,算子a与算子c为第一目标算子对,算子b和算子c为第二目标算子对,算子c与下一算子为第三目标算子对。第一目标算子对中两个算子的延迟时间变量为t1,第二目标算子对中两个算子的延迟时间变量为t2,第三目标算子对中两个算子的延迟时间变量为t3。第一目标算子对的累积延时时间的中间变量为n1,第二目标算子对的累积延时时间的中间变量为n2,第三目标算子对的累积延时时间的中间变量为n3。并且,预设的总延迟时间为tmax。

第一目标算子对,延迟时间t1,n1=t1;

第二目标算子对,延迟时间t2,n2=t2;

第三目标算子对,延迟时间t3,n3=max(n1,n2)+t3。

对于上述变量,可以列出以下方程组:

通过常用的求解器(例如matlab求解器,pardiso求解器,hypermesh求解器,cplex求解器等)来求解上述方程组,从而求解出各个目标算子对的延迟时间变量的值,即各个目标算子对中的两个算子的延迟时间。

2)针对所述深度学习模型串行运行的情况,若多个目标算子对中的后一个算子均为同一算子,则所述多个目标算子对的延迟时间变量的累加值为所述多个目标算子对的延迟时间变量的值的累加值。

请参照图6,图6为深度学习模型串行运行的情况下,目标算子对中的两个算子的延迟时间的最优分配示意图。如图6所示,算子a与算子c为第一目标算子对,算子b和算子c为第二目标算子对,算子c与下一算子为第三目标算子对。第一目标算子对中两个算子的延迟时间变量为t1,第二目标算子对中两个算子的延迟时间变量为t2,第三目标算子对中两个算子的延迟时间变量为t3。第一目标算子对的累积延时时间的中间变量为n1,第二目标算子对的累积延时时间的中间变量为n2,第三目标算子对的累积延时时间的中间变量为n3。并且,预设的总延迟时间为tmax。

第一目标算子对,延迟时间t1,n1=t1;

第二目标算子对,延迟时间t2,n2=t2;

第三目标算子对,延迟时间t3,n3=n1+n2+t3。

对于上述变量,可以列出以下方程组:

通过常用的求解器(例如matlab求解器,pardiso求解器,hypermesh求解器,cplex求解器等)来求解上述方程组,从而求解出各个目标算子对的延迟时间变量的值,即各个目标算子对中的两个算子的延迟时间。

综上,通过上述最优求解方法确定目标算子对中的两个算子的延迟时间,虽然实现较为复杂,需要用求解器来求解方程组,但是求解出的延迟时间为最优解,采用求解出的延迟时间来运行深度学习模型,降低负载的效果最佳。

综上所述,本申请实施例提供一种深度学习模型的运行方法,该方法包括:获取深度学习模型中各个算子之间的逻辑关系;根据各个算子之间的逻辑关系,调整所述深度学习模型中各个算子的运行时间,以使所述调整后的深度学习模型中,至少两个逻辑关系相连续的算子的运行总时长被延长;按照所述调整后的所述深度学习模型中各个算子的运行时间,运行所述深度学习模型。本申请所提供的方案,针对现有技术中通过降低模型复杂度来降低cpu负载所导致的牺牲模型的精度的问题,以及优化模型算子底层代码的实现来降低cpu负载所导致的优化底层代码复杂度高以及通用性差的问题进行改进,即本申请首先获取深度学习模型中各个算子之间的逻辑关系,然后调整各个算子的运行时间,使得至少两个逻辑关系相连续的算子的运行总时长被延长,从而拉长了深度学习模型中各个算子的总运行时间,最后按照所述调整后的所述深度学习模型中各个算子的运行时间,运行所述深度学习模型。采用本申请所提供的方案可以在不降低模型复杂度和优化模型算子底层代码的情况下,实现降低cpu负载的目的。一方面,由于采取降低模型复杂度来降低cpu负载会降低模型精度,无法满足真实的ai应用场景的应用需求,采用本申请所提供的方案无需改变模型结构,不会牺牲模型精度,能够满足真实的ai应用场景的应用需求。另一方面,由于优化模型算子底层代码来降低cpu负载会导致在实际应用时十分复杂、易用性较低,采用本申请所提供的方案降低了实际应用的复杂度,并且可以应用于各种类型的cpu上,具有通用性。

基于相同的技术构思,本申请实施例还提供一种深度学习模型的运行装置、电子设备、以及计算机存储介质等,具体可参见以下实施例。

请参照图7,为本申请实施例所提供的一种深度学习模型的运行装置的结构示意图。如图7所示,可以包括:

获取模块701,用于获取深度学习模型中各个算子之间的逻辑关系;

调整模块702,用于根据各个算子之间的逻辑关系,调整所述深度学习模型中各个算子的运行时间,以使所述调整后的深度学习模型中,至少两个逻辑关系相连续的算子的运行总时长被延长;

运行模块703,用于按照所述调整后的所述深度学习模型中各个算子的运行时间,运行所述深度学习模型。

在一种可能的实施方式中,调整模块702包括:设置单元,用于针对至少一个目标算子对,在该目标算子对中的两个算子之间设置预定的延迟时间,以使该目标算子对的运行总时长被延长;所述目标算子对中的两个算子是逻辑关系相连续的两个算子,所述延迟时间用于表征目标算子对中的两个算子的执行间隔时间。

在一种可能的实施方式中,调整模块702还包括:第一确定单元,用于针对所述目标算子对,根据该目标算子对中的前一个算子的计算量确定该目标算子对中的两个算子的延迟时间。

在一种可能的实施方式中,调整模块702还包括:

获取单元,用于针对每个算子,获取该算子在运行时所需的计算参数;所述计算参数包括以下的任意一种或多种:调用的计算单元数量、计算单元的调用次数;

第二确定单元,用于基于每个算子在运行时所需的计算参数,确定该算子的计算量。

在一种可能的实施方式中,任意所述目标算子对中的两个算子的延迟时间均是相同的。

在一种可能的实施方式中,调整模块702还包括:

求解单元,用于以所述深度学习模型中所有目标算子对的延迟时间变量的累加值不大于预设的总延迟时间,且每个目标算子对的延迟时间变量的平均值最大为约束条件,求解每个目标算子对的延迟时间变量的值;

第三确定单元,用于基于求解的所述目标算子对的延迟时间变量的值,确定所述目标算子对中的两个算子的延迟时间。

在一种可能的实施方式中,调整模块702还包括:

第四确定单元,用于针对所述深度学习模型并行运行的情况,若多个目标算子对中的后一个算子均为同一算子,则将所述多个目标算子对的延迟时间变量的值中的最大值确定为所述多个目标算子对的延迟时间变量的累加值。

在一种可能的实施方式中,调整模块702还包括:

第五确定单元,用于针对所述深度学习模型串行运行的情况,若多个目标算子对中的后一个算子均为同一算子,则将所述多个目标算子对的延迟时间变量的值的累加值确定为所述多个目标算子对的延迟时间变量的累加值。

在一种可能的实施方式中,获取模块701包括:

模型解析单元,用于模型解析工具对所述深度学习模型进行模型解析,得到模型数据流图;

关系获取单元,用于从所述模型数据流图中获取所述深度学习模型中各个算子之间的逻辑关系。

本申请实施例公开了一种电子设备,如图8所示,包括:处理器801、存储器802和总线803,所述存储器802存储有所述处理器801可执行的机器可读指令,当电子设备运行时,所述处理器801与所述存储器802之间通过总线803通信。所述机器可读指令被所述处理器801执行时执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

本申请实施例所提供的深度学习模型的运行方法的计算机程序产品,包括存储了处理器801可执行的非易失的程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

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

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

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1