一种边缘环境下DNN应用计算卸载自适应中间件构建方法

文档序号:26748339发布日期:2021-09-25 01:36阅读:86来源:国知局
一种边缘环境下DNN应用计算卸载自适应中间件构建方法
一种边缘环境下dnn应用计算卸载自适应中间件构建方法
技术领域
1.本发明涉及人工智能领域,特别是一种边缘环境下dnn应用计算卸载自适应中间件构建方法。


背景技术:

2.人工智能领域的兴起促进移动设备的革新,智能个人助理(intelligent personal assistant,ipa)受可穿戴产品和智能家居的牵引而被广泛应用,例如,苹果的

siri

助手等。这些智能移动应用程序的主要界面是使用语音或图像的方式通过设备与用户进行交互的。受该交互模式的影响,传统的基于文本的输入方式预计将被取代,因此ipa将发展为日后移动设备不可或缺的交互模式,改善ipa的性能从而提升用户体验感成为一种新兴的趋势。而为ipa应用程序处理语音和图像输入,需要高度复杂且计算精确的机器学习技术,其中最常见的类型为深度神经网络(

deep neural network,dnn

)。由于深度神经网络能够实现语音辨识、图像归类、自动驾驶汽车和自然语言处理等高精度的任务,故它作为核心的机器学习技术备受智能应用的欢迎。当前许多主流公司,包括谷歌、微软和百度在内,都在其生产系统的许多应用中使用dnn作为机器学习组件。
3.dnn模型在推理和训练时需部署在设备或机器上,在大多数上述场景中,经过训练的深度学习模型通常部署于移动设备上,也称为纯移动设备技术。然而,受限于移动设备上的计算和存储资源,基于dnn的应用程序进一步利用云服务器来提高计算和存储性能,从而全面部署高级深度模型,即纯云技术。因此,在这种被称为纯云的方法中,模型的输入应从本地设备发送到云中心,并将输出发送回设备,这样与dnn应用推理过程相关的计算可以利用云服务器进行扩展,从而被高效地执行。但是,在缓解计算压力的同时,纯云技术要求移动设备通过无线网络传输大量数据,如图像、音频和视频,这可能导致移动设备的延迟和能耗。不仅如此,在移动设备同时向云发送大量数据的情况下,在云中执行的所有计算均可能因为拥塞而影响响应时延,用户体验无法得到保证。
4.为解决上述问题,近期部分研究工作提出了一种在移动设备和云之间划分深度推理网络的思想,这是一种纯移动设备和纯云方法之间的折衷技术。他们的工作表明,推理网络的深层,即神经元间均存在连接的全连接层,往往有较大的计算量,这类计算密集型dnn层最好能在计算能力强的节点上执行以提升计算效率;而推理网络的浅层,即提取特征的卷积层则相反,往往有较大的数据传输量,因而更适合在移动设备上执行,避免传输至云服务器时带来的开销。为说明不同层类型的不同特点,图1展示了一个典型的深度神经网络模型alexnet的结构,该模型作为图像识别应用的技术核心,已成为各类智能应用的基础并得到了广泛的应用。该图描述了模型在移动设备上运行时,各层的执行延时和传输数据量的情况,横轴表示层的命名,纵轴表示延时和数据大小,方块为各层延时,斜线为层间输出。由图可得,全连接层,即命名为fc开头的dnn层,层延时较大,说明计算量影响了层的执行,若该类dnn层在计算能力强的节点上执行,则可避免执行时延造成的总体响应瓶颈;同时,层间输出的数据大小也存在较大的差异。例如,在conv1

1和relu1

2之间传输的数据量非常
大,而它们的层延时较小,因此最好在同一计算节点上执行这两个层。且通过经验可得,在这种模型中,深层dnn具有更小的数据传输量。因此,与直接将模型的输入发送到云端计算相比,这类方法可以减少不必要的传输延迟,且可根据计算延时决定是否通过云端扩展。综上所述,基于dnn的应用程序通过计算分区不但可以减少云上的拥塞,从而增加其吞吐量,而且可以权衡计算延时和传输延时,从而提升总体响应性能以改善用户体验。
5.然而,上述方法仍然要求执行程序,从而收集所有dnn层的执行数据,且现有方法仅将dnn模型分成两个部分,即一个分区点,分别部署在设备和云上。为进一步扩展有效地分区和部署能力,移动边缘计算(moblie edge computing,mec)为卸载dnn模型于本地设备、边缘节点和云中心提供了全新的机会,利用该环境优越的计算能力以及灵活的地理分布特性,从而更好地解决网络执行时时间和空间的权衡问题。此外,为避免程序不断地预先执行,可结合随机森林机器学习算法,利用轻量级的预测器以降低动态执行整个程序带来的开销。而现有的方法并没有考虑移动边缘计算环境以及以静态代码分析为基础的时延预测问题。
6.受移动设备的可移动性和边缘服务器地理分布随机性的影响,移动边缘计算下的运行环境是高度动态且复杂的。移动设备随着位置变动,可用边缘服务器等网络连接也在不断变化。因此,在mec环境中高效地卸载dnn应用程序,比仅在云服务器环境中卸载更具挑战性。一方面,基于dnn的应用应考虑方案的适应性,以便卸载动态地发生在边缘环境之间的计算节点,且当设备移动时,卸载方案根据环境适应性改变使得应用保持可用状态。另一方面,卸载方案较多的情况下应考虑方案的有效性,不同的部署将导致不同的执行延迟和传输延迟,因此需要有效地评估卸载方案的开销,并确定有卸载价值的应用部分以及合适的计算节点。
7.基于上述问题与挑战,提出一个新颖的边缘环境下的计算卸载自适应中间件,该中间件能够满足dnn应用卸载时的可适应性以及有效性,在保证服务质量的同时提升应用的用户体验。


技术实现要素:

8.有鉴于此,本发明的目的是提供种边缘环境下dnn应用计算卸载自适应中间件构建方法,通过实现支撑设计模式及评估模型的dnn应用自适应计算卸载中间件,它能够支持上述卸载设计模式,并利用代价评估模型决定应用程序的最优卸载方案以进行计算卸载。
9.本发明采用以下方案实现:一种边缘环境下dnn应用计算卸载自适应中间件构建方法,包括以下步骤:
10.步骤s1:构建卸载机制,所述卸载机制的输入为dnn源码,输出为可卸载的dnn目标代码;
11.步骤s2:构建评估模型,所述评估模型的输入为环境配置和应用源码,输出为最优卸载方案。
12.进一步地,所述步骤s1的具体包括以下步骤:
13.步骤s11:提出管道一过滤器模式的设计模式;
14.步骤s12:利用代码重构技术将dnn源码转变为dnn目标代码,使该代码符合步骤s11的设计模式;代码重构目的是使代码严格遵循设计模式以实现卸载;
15.步骤s13:运行时机制根据配置文件对给定的卸载方案进行自适应卸载。
16.进一步地,所述步骤s11的具体内容为:
17.管道

过滤器设计模式,即将一个整体的执行单元按需划分为多个可独立执行的小单元;其中,每个执行单元称为一个过滤器部件,该部件有一组独立的输入端口和输出端口,负责承接上下层的中间执行数据;执行单元间的数据连接通路称为一个管道部件,所述管道部件负责接受数据与转发数据;所述管道

过滤器模式扩展dnn层级分布式卸载能力,模型中的层相当于过滤器,管道作为层间的数据传输带,该数据传输模式不依赖于过滤器执行的位置,因此过滤器可被卸载在相同或不同的计算节点上;其中,dnn第一层的参数包括输入数据,dnn最后一层的输出结果即为网络推理的结果;在一个典型的dnn代码执行过程中,过滤器负责层的接受输入、计算以及保存输出,其中,接受的输入值将作为该层的入参,来源于外界输入或是上一层的中间运算向量;计算即dnn层的执行;保存的输出值将作为推理结果或是后继层的入参;管道负责层间数据的调度,包括接受本地或是远程的过滤器输出,并发送至本地过滤器或远程过滤器。
18.进一步地,所述步骤s12中所述代码重构具体包括以下步骤:
19.步骤a:入参准备:在传入初始化数据initdata至dnn层中时,新增参数initl、endl,分别表示当前节点处理的初始dnn层标号和结束层标号;给定一个应用程序,在代码重构过程中插入initl、endl于参数列表,表示一次调用从初始dnn层initl执行至结束dnn层endl;新增参数currentl用以标记dnn应用执行的进度,即当前执行的过滤器标号;那么,当前节点中dnn层标号不在initl至endl范围内的dnn层将被跳过执行;由于不执行initl的上一层,initdata被赋值作为上一层执行的中间结果输出;
20.步骤b:新增管道机制:新增方法pipe(i)于执行每一层layer[i]之前,该方法决定layer[i]是否由当前节点的过滤器执行,对过滤器起激活作用,是运行时支撑机制的核心;
[0021]
步骤c:新增过滤器:新增两个判断语句;第一个判断语句用以控制当前过滤器是否执行,第二个判断语句用以包装并存储本次调用中最后一个过滤器执行的结果,进而通过管道发送给远程节点的过滤器,即对管道起激活作用;新增全局变量output用以保存待管道接收的中间输出结果,当前层的后继层若卸载于远程时,则需用到该变量。
[0022]
进一步地,在dnn应用执行阶段,根据管道

过滤器设计模式进行代码重构的目标程序代码和配置文件将部署在mec环境中的所有计算节点上,对于配置文件的定义如下:一个dnn应用的卸载方案可通过配置文件config.file(x)表示,其中,x∈l表示dnn模型中的一个层编号,也称为过滤器x,l,且配置文件将不断更新至最新生成的卸载方案;需要明确的是,按层粒度标记每一层的卸载位置时,当过滤器x需要在本地节点被激活,则config_file(x)==local;当过滤器x需要卸载至远程节点时,则config_file(x)==remote_,其中,remote_后接卸载节点的名称;运行时的计算卸载机制通过管道来控制,并通过管道机制算法即通过输入的待激活的过滤器x和当前需要执行的dnn层

currentl

进行比较,如果currentl大于x,则x不执行直接跳过,如果当前currentl与x相等,则需要执行,并进一步通过config文件进行判断,如果是本地执行则直接在本地激活过滤器x,如果是需要远程执行,则通过rpc来激活卸载的目标计算节点的过滤器,达到计算卸载的目的。
[0023]
进一步地,所述步骤s2的具体包括以下步骤:
[0024]
步骤s21:对基本信息进行建模,包括dnn结构模型、随机森林回归的代价预测模型
组以及环境上下文模型;其中,dnn结构模型以dnn层代码作为输入,通过静态代码分析对模型中的层参数进行特征抽取;随机森林回归的代价预测模型组以dnn结构模型的信息作为输入,以随机森林回归模型作为训练器,输出为经过训练的模型组所预测的时延;
[0025]
步骤s22:综合上述三种模型,对要计算的卸载方案进行影响因素分析以及目标函数的构建;
[0026]
所述影响因素指在衡量计算卸载方案性能问题时,对该问题结果可能产生影响的所有因素,它们可能来源于上述三个信息模型;所述目标函数为执行dnn模型所需的总体响应时间;
[0027]
步骤s23:评估模型的输出为最优的计算卸载方案,该方案能决策出dnn每一层的部署节点,从而得到最优的目标函数,即使卸载后的应用性能最佳,该方案的粒度为dnn层,通过配置文件实现对该方案的配置,并随目标代码部署于计算节点上。
[0028]
进一步地,步骤s21所述dnn结构模型的具体构建如下:
[0029]
一个dnn模型结构可抽象为一个有向图g
d
=(l,r),表示层特征和层间传输关系;其中,
[0030]
l={l1,l2,

,l
n
}为dnn模型中层的集合,每个l
n
为模型中的一个层;r为dnn模型中数据流边的集合,每条边r
ij
∈r表示从层l
i
到l
j
的数据流向;
[0031]
一个dnn层结构包括一个类型参数和一个至多个的特征参数,表示为l
i
=<type,feature>的二元组,用以描述该层信息;其中,type表示dnn层的类型,feature表示dnn层的特征参数;
[0032]
一个dnn层的类型参数表示为{type|conv,reul,pooling,fc},即代码分析提取的四种层类型,每个层仅有一个该参数;其中,conv表示为卷积层,reul表示为激励层,pooling表示为池化层,fc表示为全连接层;
[0033]
一个dnn层的特征参数表示为{feature|name=value},即参数名和参数值的一个键值对,每个层有一至多个的该参数;其中,当type=conv时,{name|channel,k
size
,k
number
,stride,padding},channel表示卷积层的特征定义频道数,k
size
表示卷积层的卷积核尺寸,k
number
表示卷积层的卷积核数量,stride表示卷积层的移动步长,padding表示卷积层的填充值;当type=reul或type=fc时,{name|in
number
,out
number
},in
number
表示激励层或全连接层的输入神经元的数量,out
number
表示激励层或全连接层的输出神经元的数量;当type=pooling时,{name|channel,k
size
,stride},channel表示池化层的输入通道维度,k
size
表示池化层的区域大小,stride表示池化层的移动步长;
[0034]
所述环境上下文模型的构建如下:
[0035]
一个上下文边缘环境可抽象为一个无向图g
c
=(n,e),其中n表示一组计算节点,包括本地设备和远程服务器;e表示一组存在于节点n
i
∈n间的通讯链路。每条边edge(n
i
,n
j
)∈e具有以下属性:节点n
i
和n
j
间的数据传输速率以及往返时间
[0036]
进一步地,步骤s21中所述基于随机森林回归的代价预测建模具体构建如下:对于每一层,代价预测模型将dnn层的类型和特征作为输入,并预测该层的执行时间;个dnn层在某一计算节点上的执行代价包括执行时间和数据量大小,表示为的二元组,其中,time表示从接收输入数据到生成输出数据过程的执行时间,这取决于计算
节点的性能;datasize表示输出数据的数据量大小,为固定值;使用随机森林回归模型来预测
[0037]
利用历史数据集来训练预测模型:首先在各个计算节点上执行dnn应用程序,并从包括alexnet、vgg16、vgg19、resnet

50和resnet

152在内的dnn应用程序中收集数据;随机森林回归预测模型如公式(1)所示,其中输入值(x)取决于层的类型,当层类型为卷积层conv时,如公式(2)所示;当层类型为池化层pooling时,如公式(3)所示;当层类型为激励层relu时,如公式(4)所示;当层类型为全连接层fc时,如公式(5)所示。
[0038]
y=predict(x)
ꢀꢀꢀꢀꢀ
(1)
[0039]
x
conv
=(channel,k
size
,k
number
,stride,padding)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0040]
x
pooling
=(channel,k
size
,stride)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)
[0041]
x
relu
=(in
number
,out
number
)
ꢀꢀꢀꢀꢀ
(4)
[0042]
x
fc
=(in
number
,out
number
)
ꢀꢀꢀꢀꢀꢀꢀꢀ
(5)
[0043]
采用以上重要变量,以及参数ntree和mtry,便可训练获得一个可预测执行成本的回归模型;其中,ntree表示基于收集的层执行成本样本生长的回归树的数量,mtry表示在每个节点上用于预测的预测因子的数量。
[0044]
进一步地,所述步骤s22的具体内容为:在决定每一dnn层应被卸载于哪一计算节点过程中,所需考虑的影响因子为:l表示dnn模型中一组dnn层集合,l={l1,l2,

,l
n
};n表示一组计算节点集合,包括ds,me和rc,n
k
∈n;表示dnn层l
i
的一组父节点集合;dep表示一组计算卸载决策,dep=(dep(l1),dep(l2),

,dep(l
n
));表示节点n
i
和n
j
间的数据传输速率表示节点n
i
和n
j
间的往返时间;t
i
表示执行完dnn层l
i
的时刻;t
d
(l
k
,l
m
)表示dnn层l
k
和l
m
间的数据传输时间;t
e
(l
i
)表示执行dnn层l
i
的执行时间;t
response
表示一个dnn应用程序在某一卸载决策下的响应时间;
[0045]
其中,在dep=(dep(l1),dep(l2),

,dep(l
n
))中,dep表示一种计算卸载方案,每一个l
i
∈l均存在一个对应的卸载节点一个dnn应用程序的响应时间被表示为t
response
,它等同于执行完最后一层dnn层l
end
的时刻t
end
,其中t
i
表示为执行完dnn层l
i
的时刻;构造的目标函数即为评估一个卸载方案的完整响应时间t
response
的过程;
[0046]
构造目标函数如公式(6)所示,当一个卸载决策的目标函数值最小,则该卸载决策是最优的;
[0047]
t
response
=t
n
ꢀꢀꢀꢀꢀꢀꢀꢀ
(6)。
[0048]
与现有技术相比,本发明具有以下有益效果:
[0049]
本发明通过实现支撑设计模式及评估模型的dnn应用自适应计算卸载中间件,它能够支持上述卸载设计模式,并利用代价评估模型决定应用程序的最优卸载方案以进行计算卸载。
附图说明
[0050]
图1为本发明实施例的现有技术中alexnet模型的各层层延时和层间输出情况图。
[0051]
图2为本发明实施例的方法的概览图。
[0052]
图3为本发明实施例的上下文环境结构卸载中间件图。
[0053]
图4为本发明实施例的不同设计模式下的dnn模型图,其中,图4(a)为单一模式图,图4(b)为管道

过滤器模式图。
[0054]
图5为本发明实施例的基于dnn应用程序的管道

过滤器模式图。
[0055]
图6为本发明实施例的重构dnn应用程序图,其中,图6(a)为源程序图,图6(b)为目标程序图。
[0056]
图7为本发明实施例的一个dnn模型的例子图。
[0057]
图8为本发明实施例的上下文环境结构图。
具体实施方式
[0058]
下面结合附图及实施例对本发明做进一步说明。
[0059]
应该指出,以下详细说明都是例示性的,旨在对本技术提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本技术所属技术领域的普通技术人员通常理解的相同含义。
[0060]
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本技术的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0061]
本实施例提供一种边缘环境下dnn应用计算卸载自适应中间件构建方法,包括以下步骤:
[0062]
步骤s1:构建卸载机制,所述卸载机制的输入为dnn源码,输出为可卸载的dnn目标代码;
[0063]
步骤s2:构建评估模型,所述评估模型的输入为环境配置和应用源码,输出为最优卸载方案。
[0064]
在本实施例中,所述步骤s1的具体包括以下步骤:
[0065]
步骤s11:提出管道

过滤器模式的设计模式;
[0066]
步骤s12:利用代码分析和代码重构技术将dnn源码转变为dnn目标代码,使该代码符合步骤s11的设计模式;所述代码分析目的是寻找卸载目标即以dnn层为卸载单元,代码重构目的是使代码严格遵循设计模式以实现卸载;
[0067]
步骤s13:运行时机制根据配置文件对给定的卸载方案进行自适应卸载。
[0068]
在本实施例中,所述步骤s11的具体内容为:
[0069]
管道

过滤器设计模式,即将一个整体的执行单元按需划分为多个可独立执行的小单元;(这些单元可以是dnn层,或者函数等)其中,每个执行单元称为一个过滤器部件,该部件有一组独立的输入端口和输出端口,负责承接上下层的中间执行数据;执行单元间的数据连接通路称为一个管道部件,所述管道部件负责接受数据与转发数据;所述管道

过滤器模式扩展dnn层级分布式卸载能力,模型中的层相当于过滤器,管道作为层间的数据传输带,该数据传输模式不依赖于过滤器执行的位置,因此过滤器可被卸载在相同或不同的计算节点上;其中,dnn第一层的参数包括输入数据,dnn最后一层的输出结果即为网络推理的结果;在一个典型的dnn代码执行过程中,过滤器负责层的接受输入、计算以及保存输出,其中,接受的输入值将作为该层的入参,来源于外界输入或是上一层的中间运算向量;计算即
dnn层的执行;保存的输出值将作为推理结果或是后继层的入参;管道负责层间数据的调度,包括接受本地或是远程的过滤器输出,并发送至本地过滤器或远程过滤器。
[0070]
在本实施例中,所述步骤s12中所述代码重构具体包括以下步骤:
[0071]
步骤a:入参准备:在传入初始化数据initdata dnn层中时,新增参数initl、endl,分别表示当前节点处理的初始dnn层标号和结束层标号;给定一个应用程序,在代码重构过程中插入initl、endl于参数列表,表示一次调用从初始dnn层initl执行至结束dnn层endl;新增参数currentl用以标记dnn应用执行的进度,即当前执行的过滤器标号;那么,当前节点中dnn层标号不在initl至endl范围内的dnn层将被跳过执行;由于不执行initl的上一层,initdata被赋值作为上一层执行的中间结果输出;
[0072]
步骤b:新增管道机制:新增方法pipe(i)于执行每一层layer[i]之前,该方法决定layer[i]是否由当前节点的过滤器执行,对过滤器起激活作用,是运行时支撑机制的核心;
[0073]
步骤c:新增过滤器:新增两个判断语句;第一个判断语句用以控制当前过滤器是否执行,第二个判断语句用以包装并存储本次调用中最后一个过滤器执行的结果,进而通过管道发送给远程节点的过滤器,即对管道起激活作用;新增全局变量output用以保存待管道接收的中间输出结果,当前层的后继层若卸载于远程时,则需用到该变量。
[0074]
在本实施例中,在dnn应用执行阶段,根据管道

过滤器设计模式进行代码重构的目标程序代码和配置文件将部署在mec环境中的所有计算节点上,对于配置文件的定义如下:一个dnn应用的卸载方案可通过配置文件config.file(x)表示,其中,x∈l表示dnn模型中的一个层编号,也称为过滤器x,l,且配置文件将不断更新至最新生成的卸载方案;需要明确的是,按层粒度标记每一层的卸载位置时,当过滤器x需要在本地节点被激活,则config_file(x)==local;当过滤器x需要卸载至远程节点时,则config_file(x)==remote_,其中,remote_后接卸载节点的名称;运行时的计算卸载机制通过管道来控制,并通过管道机制算法即通过输入的待激活的过滤器x和当前需要执行的dnn层

currentl

进行比较,如果currentl大于x,则x不执行直接跳过,如果当前currentl与x相等,则需要执行,并进一步通过config文件进行判断,如果是本地执行则直接在本地激活过滤器x,如果是需要远程执行,则通过rpc来激活卸载的目标计算节点的过滤器,达到计算卸载的目的。
[0075]
在本实施例中,所述步骤s2的具体包括以下步骤:
[0076]
步骤s21:对基本信息进行建模,包括dnn结构模型、随机森林回归的代价预测模型组以及环境上下文模型;其中,dnn结构模型以dnn层代码作为输入,通过静态代码分析对模型中的层参数进行特征抽取;随机森林回归的代价预测模型组以dnn结构模型的信息作为输入,以随机森林回归模型作为训练器,输出为经过训练的模型组所预测的时延;
[0077]
步骤s22:综合上述三种模型,对要计算的卸载方案进行影响因素分析以及目标函数的构建;
[0078]
所述影响因素指在衡量计算卸载方案性能问题时,对该问题结果可能产生影响的所有因素,它们可能来源于上述三个信息模型;所述目标函数为执行dnn模型所需的总体响应时间;
[0079]
步骤s23:评估模型的输出为最优的计算卸载方案,该方案能决策出dnn每一层的部署节点,从而得到最优的目标函数,即使卸载后的应用性能最佳,该方案的粒度为dnn层,通过配置文件实现对该方案的配置,并随目标代码部署于计算节点上。
[0080]
在本实施例中,步骤s21所述dnn结构模型的具体构建如下:
[0081]
一个dnn模型结构可抽象为一个有向图g
d
=(l,r),表示层特征和层间传输关系;其中,l={l1,l2,

,l
n
}为dnn模型中层的集合,每个l
n
为模型中的一个层;r为dnn模型中数据流边的集合,每条边r
ij
∈r表示从层l
i
到l
j
的数据流向;
[0082]
一个dnn层结构包括一个类型参数和一个至多个的特征参数,表示为l
i
=<type,feature>的二元组,用以描述该层信息;其中,type表示dnn层的类型,feature表示dnn层的特征参数;
[0083]
一个dnn层的类型参数表示为{type|conv,reul,pooling,fc},即代码分析提取的四种层类型,每个层仅有一个该参数;其中,conv表示为卷积层,reul表示为激励层,pooling表示为池化层,fc表示为全连接层;
[0084]
一个dnn层的特征参数表示为{feature|name=value},即参数名和参数值的一个键值对,每个层有一至多个的该参数;其中,当type=conv时,{name|channel,k
size
,k
number
,stride,padding},channel表示卷积层的特征定义频道数,k
size
表示卷积层的卷积核尺寸,k
number
表示卷积层的卷积核数量,stride表示卷积层的移动步长,padding表示卷积层的填充值;当type=reul或type=fc时,{name|in
number
,out
number
},in
number
表示激励层或全连接层的输入神经元的数量,out
number
表示激励层或全连接层的输出神经元的数量;当type=pooling时,{name|channel,k
size
,stride},channel表示池化层的输入通道维度,k
size
表示池化层的区域大小,stride表示池化层的移动步长;
[0085]
所述环境上下文模型的构建如下:
[0086]
一个上下文边缘环境可抽象为一个无向图g
c
=(n,e),其中n表示一组计算节点,包括本地设备和远程服务器;e表示一组存在于节点n
i
∈n间的通讯链路。每条边edge(n
i
,n
j
)∈e具有以下属性:节点n
i
和n
j
间的数据传输速率以及往返时间
[0087]
在本实施例中,步骤s21中所述基于随机森林回归的代价预测建模具体构建如下:对于每一层,代价预测模型将dnn层的类型和特征作为输入,并预测该层的执行时间;个dnn层在某一计算节点上的执行代价包括执行时间和数据量大小,表示为的二元组,其中,time表示从接收输入数据到生成输出数据过程的执行时间,这取决于计算节点的性能;datasize表示输出数据的数据量大小,为固定值;使用随机森林回归模型来预测
[0088]
利用历史数据集来训练预测模型:首先在各个计算节点上执行dnn应用程序,并从包括alexnet、vgg16、vgg19、resnet

50和resnet

152在内的dnn应用程序中收集数据;随机森林回归预测模型如公式(1)所示,其中输入值(x)取决于层的类型,当层类型为卷积层conv时,如公式(2)所示;当层类型为池化层pooling时,如公式(3)所示;当层类型为激励层relu时,如公式(4)所示;当层类型为全连接层fc时,如公式(5)所示。
[0089]
y=predict(x)
ꢀꢀꢀꢀꢀꢀ
(1)
[0090]
x
conv
=(channel,k
size
,k
number
,stride,padding)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0091]
x
pooling
=(channel,k
size
,stride)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)
[0092]
x
relu
=(in
number
,out
number
)
ꢀꢀꢀꢀꢀꢀꢀ
(4)
[0093]
x
fc
=(in
number
,out
number
)
ꢀꢀꢀꢀꢀꢀꢀ
(5)
[0094]
采用以上重要变量,以及参数ntree和mtry,便可训练获得一个可预测执行成本的回归模型;其中,ntree表示基于收集的层执行成本样本生长的回归树的数量,mtry表示在每个节点上用于预测的预测因子的数量。
[0095]
在本实施例中,所述步骤s22的具体内容为:在决定每一dnn层应被卸载于哪一计算节点过程中,所需考虑的影响因子为:l表示dnn模型中一组dnn层集合,l={l1,l2,

,l
n
};n表示一组计算节点集合,包括ds,me和rc,n
k
∈n;表示dnn层l
i
的一组父节点集合;dep表示一组计算卸载决策,dep=(dep(l1),dep(l2),

,dep(l
n
));表示节点n
i
和n
j
间的数据传输速率表示节点n
i
和n
j
间的往返时间;t
i
表示执行完dnn层l
i
的时刻;t
d
(l
k
,l
m
)表示dnn层l
k
和l
m
间的数据传输时间;t
e
(l
i
)表示执行dnn层l
i
的执行时间;t
response
表示一个dnn应用程序在某一卸载决策下的响应时间;
[0096]
其中,在dep=(dep(l1),dep(l2),

,dep(l
n
))中,dep表示一种计算卸载方案,每一个l
i
∈l均存在一个对应的卸载节点一个dnn应用程序的响应时间被表示为t
response
,它等同于执行完最后一层dnn层l
end
的时刻t
end
,其中t
i
表示为执行完dnn层l
i
的时刻;构造的目标函数即为评估一个卸载方案的完整响应时间t
response
的过程;
[0097]
构造目标函数如公式(6)所示,当一个卸载决策的目标函数值最小,则该卸载决策是最优的;
[0098]
t
response
=t
n
ꢀꢀꢀꢀꢀꢀꢀꢀ
(6)。
[0099]
较佳的,本实施例的方法概览如图2所示。图中分别有三个黑框模块,左侧为方法的具体实现,包括输入输出、数据流、重要部件和一些中间产物;中间为方法主体的名称,主要为两大模块:卸载机制和评估模型;右侧为该方法针对的场景以及应用,即给定的边缘环境配置和应用的dnn源码。图中实线为技术方式,虚线为数据流,球形表示方法产物,虚线框模块均为本文提出的方法,也是该中间件的核心,本实施例方法步骤的简单描述如下:
[0100]
卸载机制(offloading mechanism)为支撑dnn代码进行计算卸载的关键。它的输入为dnn源码(dnn source code),输出为可卸载的dnn目标代码(dnn target code)。首先,方法中将提出一种类似管道

过滤器模式(pipe

filter pattern)的设计模式;其次,利用代码重构技术(refactor),将dnn源码转变为dnn目标代码,使该代码符合上述设计模式这里的代码重构目的是使代码严格遵循设计模式以实现卸载;最后,运行时机制将根据配置文件(configuration files),对给定的卸载方案进行自适应卸载。
[0101]
卸载机制的设计模式
[0102]
(1)设计模式
[0103]
本实施例提出一种称为管道

过滤器的设计模式,并给出定义,如定义1所示。
[0104]
定义1:管道

过滤器设计模式,即将一个整体的执行单元划分为多个可独立执行的小单元。其中,每个执行单元称为一个过滤器部件,该部件有一组独立的输入端口和输出端口,负责承接上下层的中间执行数据;执行单元间的数据连接通路称为一个管道部件,该部件类似于rpc,负责接受数据与转发数据。
[0105]
管道

过滤器模式可保障数据流的传输与执行单元的有效执行,适用于有明显执行单元划分并且依赖数据流的应用。由于dnn应用程序具有明显的执行单元,且采用了数据流软件体系结构,故采用该设计模式,以扩展模型中数据传输的灵活性。传统的执行模式限
制了dnn应用的分布式部署,如图4(a)所示,模型作为单体,接收输入数据,并在最后一层输出结果,而中间的数据传输流是连续的。本文方法提出的管道

过滤器模式扩展了dnn层级分布式卸载能力,如图4(b)所示,模型中的层相当于过滤器,管道作为层间的数据传输带,该数据传输模式不依赖于过滤器执行的位置,因此过滤器可被卸载在相同或不同的计算节点上。与单一模式相同的是,dnn第一层的参数包括输入数据,dnn最后一层的输出结果即为网络推理的结果。
[0106]
基于dnn应用的管道

过滤器模式描述如下:dnn应用中的每一层,例如,卷积层、池化层、全连接层等,均代表一个过滤器部件;层间数据传输可通过管道封装。那么,在一个典型的dnn代码执行过程中,过滤器负责层的接受输入、计算以及保存输出,其中,接受的输入值将作为该层的入参,来源于外界输入或是上一层的中间运算向量,例如图像识别中的输入图片、卷积核的卷积矩阵、全连接层的加权和等;计算即dnn层的执行,例如卷积等;保存的输出值将作为推理结果或是后继层的入参。管道负责层间数据的调度,包括接受本地或是远程的过滤器输出,并发送至本地过滤器或远程过滤器。
[0107]
较佳的,在本实施例中,如图5是自适应卸载一个五层dnn的例子,dnn模型被部署在本地设备、远程节点a和远程节点b,其中,方框代表过滤器,即dnn层;虚线代表所有可能的数据流向,实线代表其中一种基于管道

过滤器的卸载方案的数据流向;若数据流的接收和发送端在同一节点,则为本地调用,若在不同节点,则为远程调用;以pipe开头的命名为管道的名称。初始状态为dnn应用在本地移动设备端接收一个输入数据,并由pipe1接收,其可与本地以及远程节点a、b上的过滤器l1,l1′
,l1″
连通;pipel可将数据直接传输至本地过滤器l1中,并在l1进行本地计算,或是通过rpc将数据传输到远程节点的l1′
,l1″
上,实现计算卸载,节点a、b为边缘或云服务器。第一层和第五层由本地过滤器执行,第二、三层由远程节点a的过滤器执行,第四层由远程节点b的过滤器。该例子在管道

过滤器设计模式的卸载过程描述如下:首先通过配置文件获得当前层的序号以及结束层的序号;其次每个管道可根据配置发送数据到指定过滤器中,例如pipe1将发送初始数据并传输给l1;而在远程节点a中,它会根据配置文件判断并跳过前序节点已经执行的计算任务,并从指定过滤器开始执行,例如在pipe2进行rpc接收远程节点a上过滤器的输出后,节点判断并跳过l1′
,执行过滤器l2′
,l3′
;最后,若当前层序号为最后一层时可通过最后一个过滤器输出返回结果,并保存至管道中。
[0108]
然而,dnn应用程序的源代码不符合管道

过滤器模式,因此需通过代码重构使其符合该模式,从而具有可卸载性。
[0109]
(2)代码重构
[0110]
为了支持基于dnn应用的自适应卸载,应用程序的代码结构应重构为符合图4(b)提出的设计模式。从宏观的角度看,需实现dnn应用卸载部分计算任务即连续的层(l
i
到l
j
)至某一远程节点,同时,当l
i
到l
j
执行于远程节点时,应用程序可进一步选择卸载其它层的计算任务到其他节点,例如将l
p
到l
q
卸载于另一远程节点上。从微观的角度看,每个计算节点都应部署dnn应用,节点可根据配置文件跳过已经执行的层(l1到l
i
),并且执行指定计算任务而后返回结果,同时,某节点的执行起始层应能正确接收前序层的数据,且在接收前无法执行后续层。因此本实施例将介绍对给定dnn应用的python源码进行代码重构的步骤,其源程序结构的形式化描述如图6(a)所示,重构后的目标程序形式化描述如图6(b)所示。
[0111]
图6(a)所示是一个dnn应用的源程序,对各参数的解释如注释所示。它从第一层开始执行,并接收初始数据initdata(例如图片等),它每一层的输出,即中间结果,是不可见的并且直接作为下一层的入参,直到执行至最后一层返回结果。语句layer[i].type(initdata,layer[i

1].feature)表示layer[i]将layer[i

1]的输出作为输入,其中,type表示当前层的执行类型,例如卷积层;feature表示当前层的配置信息,例如特征通道数。图6(b)所示是一个dnn应用重构后的目标程序,它允许每个层作为初始层或结束层,并通过initl和endl参数进行控制;它新增一个全局变量currentl,用以定位当前执行的层位置;目标代码加入了pipe(),该方法用以激活卸载机制。因此,代码重构主要包括三个步骤:
[0112]
步骤a:入参准备:在传入初始化数据initdata至网络中时,新增参数initl、endl,分别表示当前节点处理的初始层标号和结束层标号;给定一个应用程序,在代码重构过程中插入initl、endl于参数列表,表示一次调用从初始层initl执行至结束层endl;新增参数currentl用以标记dnn应用执行的进度,即当前执行的过滤器标号;那么,当前节点中层标号不在initl至endl范围内的dnn层将被跳过执行;由于不执行initl的上一层,initdata被赋值作为上一层执行的中间结果输出;
[0113]
步骤b:新增管道机制:新增方法pipe(i)于执行每一层layer[i]之前,该方法决定layer[i]是否由当前节点的过滤器执行,对过滤器起激活作用,是运行时支撑机制的核心;
[0114]
步骤c:新增过滤器:新增两个判断语句;第一个判断语句用以控制当前过滤器是否执行,第二个判断语句用以包装并存储本次调用中最后一个过滤器执行的结果,进而通过管道发送给远程节点的过滤器,即对管道起激活作用;新增全局变量output用以保存待管道接收的中间输出结果,当前层的后继层若卸载于远程时,则需用到该变量。
[0115]
(3)运行时机制
[0116]
在dnn应用执行阶段,根据管道

过滤器设计模式进行代码重构的目标程序代码和配置文件将部署在mec环境中的所有计算节点上,对于配置文件的定义如定义2所示。
[0117]
定义2:一个dnn应用的卸载方案可通过配置文件config.file(x)表示,其中,x∈l表示dnn模型中的一个层编号,也称为过滤器x,l,且配置文件将不断更新至最新生成的卸载方案;需要明确的是,按层粒度标记每一层的卸载位置时,当过滤器x需要在本地节点被激活,则config.file(x)=local;
[0118]
当过滤器x需要卸载至远程节点时,则config.file(x)=remote_,其中,remote_后接卸载节点的名称。
[0119]
运行时的计算卸载机制通过管道来控制。本文提出了一个管道机制算法,用来激活过滤器达到计算卸载的目的,如算法1所描述。
[0120][0121][0122]
首先,在已知卸载方案的情况下,配置文件和当前执行的层号,即模型执行的进度,作为全局参数和管道算法的入参。pipe()函数的入参也包括即将激活的过滤器序号x,则当前管道为连通过滤器x

1和过滤器x的数据传输,函数的返回值为下一个待激活的过滤器编号。接着,根据入参的值采用不同的过滤器激活方式:line 1表示模型执行的进度已超过待激活的过滤器x,该计算节点不负责过滤器x的执行,因此直接返回从而卸载过滤器x(line1

3)。该操作的目的是使dnn层不被多次执行,保障唯一的数据流;使计算节点仅完成配置中的相应卸载,减少重复计算造成的开销,也提高模型推理速率。line4表示模型执行至当前管道的位置,下一个待激活的过滤器为x,且配置文件的关键字说明当前计算节点负责过滤器x的执行,因此直接返回需激活的过滤器标号从而激活过滤器x(line 4

6),根据
图6(b),pipe(x)激活过滤器x,通过第一个判断条件,执行dnn层计算语句,并执行第二个判断条件,决定是否将输出结果保存于output,同时,currentl的值在激活当前过滤器后自增1。该操作的目的是推进当前dnn层的执行,激活本地过滤器;保存需管道进行rpc的中间数据结果,保障远程卸载的数据流连续性。line 7同样表示模型执行至当前管道的位置,然而下一个待激活的过滤器为x不在当前计算节点上。因此先将上述参数output通过该管道的rpc机制传输并激活远程节点的过滤器(line7

8);在等待远程卸载的结果返回后,计算下一个在当前计算节点上执行的过滤器标号k,并将接收到的远程执行结果赋值给过滤器k的前序过滤器k

1(line 9

10);最后,该函数返回下一个在本地待激活的过滤器(line 11)。该操作的目的是激活远程过滤器,达到卸载dnn层到远程节点执行的目的;在远程执行结束后,继续激活本地过滤器,因此,对本地的后继过滤器而言,远程卸载计算的过程是透明的,但降低了本地执行的能耗开销。
[0123]
评估模型(estimation model)为根据环境和应用评估并选择dnn卸载方案的有效手段。它的输入为环境配置和应用源码,输出为最优卸载方案(optimal scheme)。评估模型的基础是环境和应用的信息,为规范评估的输入,方法首先对基本信息进行建模,包括dnn结构模型、随机森林回归的代价预测模型组以及环境上下文模型。其中,dnn结构模型(dnn structure model)以dnn层代码作为输入,通过静态代码分析对模型中的层参数进行特征抽取。例如,图中各层类型用彩色区分,包括卷积层、池化层、全连接层和激励层,代码分析将抽取出层类型以及名称,如图中的全连接层,并抽取出它的特征参数,如全连接层中输入输出的神经元个数,这些信息将作为预测模型的输入。此外,由于代码重构是自动的,这就要求程序能在关键语句中自动拆分、插入、组合成目标语句,因此该模块的产物也作为卸载机制重构时的重要依据。随机森林回归(rf regression model)的代价预测模型组以dnn结构模型的信息作为输入,以随机森林回归模型作为训练器,输出为经过训练的模型组所预测的时延,即图中的成本(cost)。环境上下文模型(context model)是对边缘环境下所有计算节点的配置、网络连接状态进行建模的产物。综合上述三种模型,本文对该卸载方案的计算问题进行影响因素的分析以及目标函数的构建。其中,影响因素指在衡量计算卸载方案性能问题时,对该问题结果可能产生影响的所有因素,它们可能来源于上述三个信息模型;目标函数指评估卸载方案质量的关键,在本文方法中,目标函数为执行dnn模型所需的总体响应时间。最终,评估模型的输出为最优的计算卸载方案,该方案可决策出dnn每一层的部署节点,从而得到最优的目标函数,即使卸载后的应用性能最佳,该方案的粒度为dnn层,通过配置文件实现对该方案的配置,并随目标代码部署于计算节点上。
[0124]
卸载方案的评估模型
[0125]
(1)基本信息建模
[0126]
为了实现代码重构以及对随机森林回归模型进行训练,首先对dnn结构进行建模;为了实现对各层延迟进行预测而避免直接执行程序造成的开销,其次对随机森林回归模型组进行描述;最后,根据移动设备上下文信息,对计算节点以及它们之间的连接关系进行建模。以上信息模型将直接影响计算卸载部署方案的评估。
[0127]
图7展示了一个dnn模型的例子,一个dnn模型的基本构成单位为层,图中用不同颜色的正方形表示不同类型的dnn层,其中,黄色表示卷积层,它通过过滤器对特征进行推理计算;蓝色表示激励层,它是一个非线性函数,该函数接受一个卷积层的输出,并生成具有
相同维度的输出;紫色表示池化层,可以定义为通用池、平均池或最大池;绿色表示全连接层,计算输入的加权和的权重。由于各层的作用不相同,它们的特征参数也互不相同。其中,每个正方形为一个层单元,顶部的引号中为层的名称,如conv1和relu1,冒号前为根据定义3对层进行建模标号;正方形的底部是层的特征参数,例如,名为conv1的卷积层中,channel:3为参数channel对应的值为3;黑色箭头为数据流,也是层执行的顺序。本文方法对dnn代码进行静态代码分析,通过代码关键字提取出一个dnn应用程序的结构,该结构包括各层的不同参数和各层之间的数据流向。其定义如下:
[0128]
定义3:一个dnn模型结构可抽象为一个有向图g
d
=(l,r),表示层特征和层间传输关系;其中,l=(l1,l2,

,l
n
}为dnn模型中层的集合,每个l
n
为模型中的一个层;r为dnn模型中数据流边的集合,每条边r
ij
∈r表示从层l
i
到l
j
的数据流向;
[0129]
定义4:一个dnn层结构包括一个类型参数和一个至多个的特征参数,表示为l
i
=<type,feature>的二元组,用以描述该层信息;其中,type表示dnn层的类型,feature表示dnn层的特征参数;
[0130]
定义5:一个dnn层的类型参数表示为{type|conv,reul,pooling,fc},即代码分析提取的四种层类型,每个层仅有一个该参数;其中,conv表示为卷积层,reul表示为激励层,pooling表示为池化层,fc表示为全连接层;
[0131]
定义6:一个dnn层的特征参数表示为{feature|name=value},即参数名和参数值的一个键值对,每个层有一至多个的该参数;其中,当type=conv时,{name|channel,k
size
,k
number
,stride,padding},channel表示卷积层的特征定义频道数,k
size
表示卷积层的卷积核尺寸,k
number
表示卷积层的卷积核数量,stride表示卷积层的移动步长,padding表示卷积层的填充值;当type=reul或type=fc时,{name|in
number
,out
number
},in
number
表示激励层或全连接层的输入神经元的数量,out
number
表示激励层或全连接层的输出神经元的数量;当type=pooling时,{name|channel,k
size
,stride},channel表示池化层的输入通道维度,k
size
表示池化层的区域大小,stride表示池化层的移动步长;
[0132]
算法2描述了抽取dnn模型结构的过程。caffe将训练后的模型存储于原型配置文件中,算法2将该文件作为输入,并使用python中的数据结构dictionaries保存输出结果。该文件中的语句表示为u={u1,u2,

,u
n
},其中,语句u
i
∈u表示文件中的第i条语句。对u集合进行迭代,对于每个元素,提取u
i
中的关键字(line 3

4),这里的关键字包括“convolution”,“pooling”,“relu”和“innerproduct”。例如,“convolution”关键字表示一个卷积层;“pooling”关键字表示池化层;“relu”关键字表示激励层;“innerproduct”关键字表示全连接层。对于每一层保存名称(line5),根据关键字保存各层的类型(line 6

14),然后根据类型保存对应的特征参数(line 15)。接着,根据关键字“bottom”更新r集。例如,如果语句u
i
有一个关键词“bottom:relul”,其中relu1为l
t
的名称,则判定当前层的上一层l
s
即为l
t
(line 16

21)。最后,更新l集合(line 22)。
[0133][0134]
[0135]
(2)基于随机森林回归的代价预测建模
[0136]
对于每一层,代价预测模型将dnn层的类型和特征作为输入,并预测该层的执行时间。为得到该模型,本文方法分别在不同的计算节点执行同一个dnn应用程序,并收集每层的执行时间。预测过程使用r语言环境以及随机森林回归算法。由于该算法可以对变量的重要性排序,并且袋外数据的错误率可以验证模型的泛化能力。因此该算法是预测层特征参数与执行代价这种非线性关系的最佳工具,可以在不执行dnn应用的情况下有效地预测dnn层的执行时间。假设l
i
层在n
k
计算节点上执行,l
i
的定义见定义3,n
k
的定义见定义8,其执行代价如定义7所示。
[0137]
定义7:一个dnn层在某一计算节点上的执行代价包括执行时间和数据量大小,表示为的二元组,其中,time表示从接收输入数据到生成输出数据过程的执行时间,这取决于计算节点的性能;datasize表示输出数据的数据量大小,这是一个可以在dnn分析工具中获得的固定值。
[0138]
由于dnn应用层的数量和计算节点的多样性,在运行时获取各层在各计算节点上的执行时间将产生昂贵的代价。因此,我们使用随机森林回归模型来预测
[0139]
本实施例利用历史数据集来训练预测模型:首先在各个计算节点上执行dnn应用程序,并从包括alexnet、vgg16、vgg19、resnet

50和resnet

152在内的dnn应用程序中收集数据;随机森林回归预测模型如公式(1)所示,其中输入值(x)取决于层的类型,当层类型为卷积层conv时,如公式(2)所示;当层类型为池化层pooling时,如公式(3)所示;当层类型为激励层relu时,如公式(4)所示;当层类型为全连接层fc时,如公式(5)所示。
[0140]
y=predict(x)
ꢀꢀꢀꢀꢀ
(1)
[0141]
x
conv
=(channel,k
size
,k
number
,stride,padding)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0142]
x
pooling
=(channel,k
size
,stride)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)
[0143]
x
relu
=(in
number
,out
number
)
ꢀꢀꢀꢀꢀ
(4)
[0144]
x
fc
=(in
number
,out
number
)
ꢀꢀꢀꢀꢀ
(5)
[0145]
采用以上重要变量,以及参数ntree和mtry,便可训练获得一个可预测执行成本的回归模型;其中,ntree表示基于收集的层执行成本样本生长的回归树的数量,mtry表示在每个节点上用于预测的预测因子的数量。因此,最终模型定义如表1所示,其中,rmse为均方根误差。
[0146]
表1预测模型的定义
[0147][0148]
(3)环境上下文建模
[0149]
计算卸载基于上下文环境,是评估模型的基础。因此本实施例将描述环境上下文,并对其进行建模分析,图8展示了上下文环境,包括一个在不同场景的设备(ds),多个移动边缘服务器(me)和一个远程云服务器(rc)。该环境上下文结构的定义如定义8所示。
[0150]
定义8:一个上下文边缘环境可抽象为一个无向图g
c
=(n,e),其中n表示一组计算节点,包括本地设备和远程服务器;e表示一组存在于节点n
i
∈n间的通讯链路。每条边edge(n
i
,n
j
)∈e具有以下属性:节点n
i
和n
j
间的数据传输速率以及往返时间
[0151]
一个典型的卸载场景如下:起初数据部署于本地设备(仅n
ds
);在执行过程中,dnn层可被卸载于边缘计算节点n
me
或远程计算节点n
rc
,前提是卸载前后的计算节点间有通讯链路相连接;最终,输出的结果应发送至本地设备。
[0152]
评估模型
[0153]
基于建模,本实施例将展开对评估模型的阐述。评估模型中有各种影响因素,将决定最终的卸载方案。首先介绍这些影响因素的表示以及含义,并且通过描述如何通过目标函数优化影响因子使得决策成本最小。为最小化总体响应时间,评估模型将在卸载决策过程中,决定哪些层需要卸载,并卸载于哪些计算节点上。
[0154]
(1)影响因子
[0155]
表2列举了在决定每一dnn层应被卸载于哪一计算节点过程中,所需考虑的影响因子。其中,l,n
k
∈n,以及在上文已被定义。
[0156]
表2影响卸载决策的因子
[0157][0158]
其中,在dep=(dep(l1),dep(l2),

,dep(l
n
))中,dep表示一种计算卸载方案,每一个l
i
∈l均存在一个对应的卸载节点一个dnn应用程序的响应时间被表示为t
response
,它等同于执行完最后一层dnn层l
end
的时刻t
end
,其中t
i
表示为执行完dnn层l
i
的时刻;构造的目标函数即为评估一个卸载方案的完整响应时间t
response
的过程;
[0159]
(2)影响因子
[0160]
本节中阐述的目标函数可评估一个卸载决策的响应时间,它将根据影响因素进行计算。基于上一节中的影响因素,构造目标函数如公式(6)所示,当一个卸载决策的目标函数值最小,则该卸载决策是最优的。如表2所示,t
i
是执行完dnn层l
i
的时刻,假设执行第一层dnn开始的时刻为0,则最后一层l
n
执行完成的时刻即为总体响应时间,如公式(6)所示。
[0161]
t
response
=t
n
ꢀꢀꢀꢀꢀꢀ
(6)
[0162]
每一dnn层的t
i
计算如公式(6)所示,描述如下:首先,执行完当前层l
i
的时刻的计算由两部分组成,一部分是该层的执行时间,另一部分是所有父层执行完并将数据发送至当前层的时间。根据表2,执行当前层l
i
的执行时间表示为t
e
(l
i
);根据dnn模型结构的特性,当且仅当所有父层分支执行完毕并发送数据到当前层后,当前层才可被执行,因此,t
i
包括所有父层分支所花费时间的最大值。其中,每一条父层分支的时间由执行完该父层的时刻和该父层和当前层之间的数据传输时间组成。根据表2,父层和l
i
间的数据传输时间表示为其中属于当前层l
i
的父节点集合
[0163][0164]
在公式(7)中,当前层的执行时间t
e
(l
i
)计算表示为公式(8),与父节点的数据传输时间计算表示为公式(9)。根据上述公式,在给定一个卸载决策时,计算其响应时间的过程描述如算法3所示。
[0165][0166][0167]
用一个例子来阐述算法3的过程,假设一个dnn应用程序有五层并且执行在三个计算节点上,给定一个卸载决策:将第2层和第3层卸载到远程节点a,将第4层卸载到远程节点b,并将第1层和第5层留在本地执行,且第5层应在第3层和第4层执行之后执行。在本例中,该方案的响应时间由第5层执行完后的时刻,即t5决定。首先计算t1(line 12

13),由于得到公式t1=t
e
(l1)(line 9),并且可根据公式(5

8)计算;其次计算t2,由于则可得到t
max
(line 6),由于父层有且仅有一层,因此t
max
即为t1+t
d
(l1,l2),其中t
d
(l1,l2)可以根据公式(5

9)计算得到;同理可得t3和t4;最后,根据公式(5

7),可以计算执行第五层的时刻t5=max{t3+t
d
(l3,l5),t4+t
d
(l4,l5)}+t
e
(l5),其中t
d
(l3,l5)和t
d
(l4,l5)的计算同理t
d
(l1,l2),t
e
(5)的计算同理t
e
(l1)。因此t
response
=t5便可通过上述公式和算法计算出结果,也就是该卸载决策的目标函数。
[0168][0169]
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1