一种面向深度学习模型推理批处理优化方法与系统

专利检索2022-05-11  1



1.本发明涉及一种面向深度学习模型推理批处理优化方法与系统,属于计算机人工智能、云计算领域。


背景技术:

2.随着5g、物联网、大数据、云计算等新兴技术的快速发展,人工智能技术应运而生,并且正成为推动人类进入智能时代的决定性力量。全球产业界充分认识到人工智能技术引领新一轮产业变革的重大意义,纷纷转型发展,布局人工智能创新生态。伴随着人工智能产业的蓬勃发展,技术的进一步成熟以及政府和产业界投入的日益增长,人工智能应用的云端化将不断加速,对社会影响日益凸显。作为新一轮科技革命和产业变革的核心力量,正在推动传统产业升级换代,驱动“无人经济”快速发展,在智能交通、智能家居、智能医疗等民生领域产生积极正面影响。
3.机器学习(machine learning)是实现人工智能的核心方法。通过计算机分析处理数据,利用某种算法如分类、回归、聚类寻求内在规律,然后对事件作出预测或决策的过程。而深度学习(deep learning)是实现机器学习的一种技术手段,在特征提取方面表现出优异的性能,通过构建具有很多隐含层的神经网络,然后进行海量的数据训练,学习有用的特征,从而最终提升分类或预测的准确性。随着深度学习技术的不断成熟,目前在计算机视觉、图像处理、自然语言处理等领域形成了一系列较为经典和通用的算法和模型,如图像处理领域的alexnet和vggnet,自然语言处理领域的bert和transformer。从而越来越多的算法开发者将训练完成的深度学习算法模型进行部署,发布成推理服务,成为了许多科研工作的基础。
4.与此同时,无服务器架构随着云计算的发展成为新兴的云架构范式,提供给用户按需调用的服务方式,对用户隐藏了实例的任务管理细节,用户只需提供函数及其触发事件即可进行服务的发布。当下已经有大量应用部署在无服务器平台上,例如智能交通系统、物联网框架、订阅服务、视频/图像处理和深度学习相关服务。
5.通常无服务器架构中函数算法偏向于短小、可复用的代码块,具有生命周期短、无状态且不提供长连接服务等特点。在深度学习中,训练完成的算法可以导出为模型文件,函数代码中只需要提供加载模型和推理功能的实现,代码量相对较少,推理过程具备无状态的特点,在一些低延时的推理任务中执行时间常常在秒级,同样不需要提供长连接服务,在使用场景上,深度学习算法符合无服务器函数的要求。所以在无服务器架构中部署深度学习算法提供了很大的机会,将训练完成的深度学习算法模型通过服务发布的方式部署在无服务器架构中,并提供推理预测服务,降低算法的重复开发和部署工作。主要有以下挑战:
6.针对深度学习模型推理服务部署在无服务器架构的过程中,面临三方面的挑战:(1)如何针对突发性的推理服务请求进行很好的响应;(2)如何能够快速低时延的进行推理服务,保证系统的整体吞吐量;(3)如何自动识别最佳的深度学习模型资源的分配,保障在合理的资源分配下最大化系统的利用率,并且降低系统整体的推理。


技术实现要素:

7.本发明针对深度学习推理问题,提出一种面向深度学习模型推理批处理优化方法与系统,由于深度学习算法模型在推理计算时可以根据硬件计算资源进行批处理加速,提出一种负载容器批处理参数分析方法获取服务的最佳批处理参数,提出了一种自适应滑动窗口的批处理合并算法用来提升实时在线推理的性能。本发明的系统架构如图1所示。
8.本发明采用的技术方案如下:
9.一种面向深度学习模型推理批处理优化方法,其步骤包括:
10.1)通过请求拦截器获取已上线推理服务请求,将推理服务请求中的推理输入参数保存到预处理数据集中;
11.2)根据推理服务请求所占用资源的类型,将推理服务请求划分为cpu类型任务和gpu类型的任务;针对cpu类型任务设置多个容器,不同容器具有不同的内存大小和cpu核数;针对gpu类型任务,生成若干设定内存大小和gpu核数的gpu类型任务容器;
12.3)针对同一模型的推理服务,如果该推理服务为cpu类型任务,则根据所述预处理数据集中的推理输入参数针对该模型生成不同批处理大小的训练数据集并输入到各容器中对该模型进行性能测试,然后根据测试的结果指标生成负载性能表;然后将负载性能表中批处理合并的执行时间batchtime和不合并执行时间nobatchtime进行比值,通过比值与设定阈值δ进行比较结果对该负载性能表中的记录进行筛选;然后基于筛选出的记录中选取批处理大小出现频率最高的若干记录,从中选取内存最小的记录;如果该推理服务为gpu类型任务,则根据所述预处理数据集中的推理输入参数生成不同批处理大小的训练数据集并将其输入gpu类型任务容器中对该模型进行性能测试,选取满足阈值指标条件下批处理大小最大的记录;
13.4)根据步骤3)所选记录确定最佳参数,即所选记录中的批处理大小y
batch
和批处理执行时间t
batch

14.5)将实时收到的推理服务请求缓存到任务缓存队列中,然后工作量聚合器根据批处理执行时间t
batch
确定一时间区间,统计任务缓存队列中每一时间区间内的推理服务请求量,得到一时间序列;
15.6)从该时间序列中截取最近一段时间内的推理服务请求进行预测,得到下一时间区间的服务请求数量并将其输入自适应窗口算法模型,自适应窗口算法模型根据输入信息对当前窗口左右边界进行调整,然后从该任务缓存队列取出窗口内的推理服务请求生成批处理任务并根据推理服务请求所占用资源的类型发送到对应容器中执行。
16.进一步的,预测得到下一时间区间的服务请求数量、最佳批处理大小和最佳批处理执行时间的方法为:设所述时间序列为{x1,x2,x3,

xt},xt是第t个时间区间的推理服务请求,设α为平滑系数;根据递推关系计算二次指数平滑值,其中s
i(2)
是xi的二次指数平滑值,s
i(1)
是xi的一次指数平滑值;然后预测下一时间区间的服务请求数量y
t 1
=a
t
b
t

17.进一步的,所述自适应窗口算法模型根据输入信息对当前窗口左右边界进行调整
的方法为:首先确定窗口判别函数判断窗口是扩大还是缩小;然后根据公式t
length 1
=t
length
(p(t)
×
σ(z)
×
t
batch
)确定调整后的窗口;其中,δf=|y
t 1-y
t
|;t
length 1
是调整后的窗口长度,y
t
表示提t个时间区间的实时请求量大小。
18.进一步的,对当前窗口左右边界进行调整的策略为:w
left 1
=w
left
t
finished
,w
right 1
=w
left 1
t
length 1
;其中,w
left 1
、w
right 1
是调整后的左边界和右边界,t
finished
为窗口内已完成的批处理请求时间长度。
19.进一步的,如果记录对应的比值则保留该记录。
20.一种面向深度学习模型推理批处理优化系统,其特征在于,包括负载容器批处理分析工具模块和批处理合并工具模块;其中
21.负载容器批处理分析工具模块,用于通过请求拦截器获取已上线推理服务请求,将推理服务请求中的推理输入参数保存到预处理数据集中;然后根据推理服务请求所占用资源的类型,将推理服务请求划分为cpu类型任务和gpu类型的任务;针对cpu类型任务设置多个容器,不同容器具有不同的内存大小和cpu核数;针对gpu类型任务,生成若干设定内存大小和gpu核数的gpu类型任务容器;然后针对同一模型的推理服务,如果该推理服务为cpu类型任务,则根据所述预处理数据集中的推理输入参数针对该模型生成不同批处理大小的训练数据集并输入到各容器中对该模型进行性能测试,然后根据测试的结果指标生成负载性能表;然后将负载性能表中批处理合并的执行时间batchtime和不合并执行时间nobatchtime进行比值,通过比值与设定阈值δ进行比较结果对该负载性能表中的记录进行筛选;然后基于筛选出的记录中选取批处理大小出现频率最高的若干记录,从中选取内存最小的记录;如果该推理服务为gpu类型任务,则根据所述预处理数据集中的推理输入参数生成不同批处理大小的训练数据集并将其输入gpu类型任务容器中对该模型进行性能测试,选取满足阈值指标条件下批处理大小最大的记录;然后根据所选记录确定最佳参数,即所选记录中的批处理大小y
batch
和批处理执行时间t
batch

22.批处理合并工具模块,用于将实时收到的推理服务请求缓存到任务缓存队列中,然后工作量聚合器根据批处理执行时间t
batch
确定一时间区间,统计任务缓存队列中每一时间区间内的推理服务请求量,得到一时间序列;然后从该时间序列中截取最近一段时间内的推理服务请求进行预测,得到下一时间区间的服务请求数量并将其输入自适应窗口算法模型,自适应窗口算法模型根据输入信息对当前窗口左右边界进行调整,然后从该任务缓存队列取出窗口内的推理服务请求生成批处理任务并根据推理服务请求所占用资源的类型发送到对应容器中执行。
23.本发明的负载容器批处理参数分析方法采用“先服务,后策略”方式,使算法模型先服务上线一段时间,通过请求拦截获取服务的请求数据,自动生成不同容器环境和不同批处理大小的服务请求,然后进行负载性能测试,生成算法模型的负载性能表,通过参数分析方法选择出合适的容器资源配置、批处理大小和批处理执行时间。如图2所示,包括以下步骤:
24.对深度学习推理服务请求进行拦截的步骤:通过请求拦截器对已经上线服务http
请求(即推理服务请求)进行转发,从而获得此请求的各项参数。将推理服务请求的http参数保存在请求参数数据集中,如请求发送时刻、响应时间,将推理输入参数保存到预处理数据集中,用来生成训练数据集。
25.通过容器生成器生成不同资源大小的容器的步骤:根据推理服务请求任务类型,以占用资源的类型进行划分,分为cpu类型任务和gpu类型的任务。针对cpu类型任务,按照不同的内存大小和cpu核数分成多组容器,其中内存大小和cpu核数按照预先制定的多种规格;针对gpu类型任务,直接生成到特定内存和gpu核数的gpu类型任务容器。
26.通过推理输入参数生成不同批处理大小的训练数据集的步骤:通过制定不同大小的批处理,生成对同一模型生成多个数据集,此数据集作为输入参数放到对应的容器中进行执行。
27.进一步地,进行负载性能测试的方法:针对cpu类型任务,对同一模型的推理服务,将不同大小的批处理数据集分别在不同的容器中进行性能测试,然后将测试的结果指标进行保存,如内存大小、批处理大小、批处理执行时间、不合并执行时间,根据这些指标生成负载性能表。针对gpu类型任务,则根据所述预处理数据集中的推理输入参数生成不同批处理大小的训练数据集并将其输入gpu类型任务容器中对该模型进行性能测试,选取满足阈值指标条件下批处理大小最大的记录;然后根据所选记录确定最佳参数,即所选记录中的批处理大小y
batch
和批处理执行时间t
batch
;。
28.进一步地,批处理参数分析方法包括以下步骤:
29.将负载性能表中批处理合并的执行时间batchtime和不合并执行时间nobatchtime进行比值,通过比值与设定阈值δ,进行比较来选取合适的记录。选取规则如下:
30.针对cpu类型任务,将满足阈值的记录进一步筛选,因为此时会有多组容器记录满足条件,需要在剩余的容器记录中继续选择,此时选取规则是在剩余容器记录中统计出现频率最多的批处理大小的候选记录集合,然后从中选取内存最小的记录作为最终结果。针对gpu类型任务,只需在满足阈值指标条件下,选择批处理大小最大记录即可,此批处理的参数作为后续自适应滑动窗口算法中的重要参数。
31.一种基于自适应滑动窗口的批处理合并算法,对深度学习推理服务请求进行合并优化,主要包括推理服务请求的时序预测算法和自适应滑动窗口调整算法。如图3所示。
32.推理服务时序预测算法,用户对后续推理服务合并提供条件,其中包含三个部分:任务缓存队列、请求时间序列、时间序列预测,预测结果评价。
33.任务缓存队列:任务缓存队列根据推理服务请求到达先后顺序进行缓存,其中队列需要对每个请求到达时刻进行标记,由于现有的无服务平台不支持服务请求的缓存,因此需要在无服务器之外增设任务缓存队列,为推理服务启动批处理支持。
34.进一步地,请求时间序列,请求时间序列的生成需要在固定时间区间内统计服务请求数据量,区间的大小决定了时序数据统计的粒度,也能够反映出不同的规律特点,直接决定算法服务预测的时间跨度。由于不同的算法拥有不同的服务状态,时间序列的统计粒度各不相同,所以本文选择负载容器批处理参数分析方法阶段获取的记录的批处理执行时间作为参考标准,生成请求时间序列。
35.进一步地,时间序列预测,选取二次指数平滑算法进行服务预测,其实本质上是将历史数据进行加权平均作为未来时刻的预测结果,对不同时间的数据进行非等权处理贴近真实数据。从而得到服务的预测值和变化的趋势大小。
36.进一步地,还包括可视化模块,用于将自动化机器学习模块过程进行图表展示,负责过程指标数据和进度数据的收集和整理。
37.进一步地,预测评价指标,通过rmse和mae对预测的结果进行评估,通过预测的结果的误差值来判断预测的效果。
38.自适应滑动窗口调整算法。通过上述的负载容器参数分析方法和时间序列预测工作,已经完成此模型请求动态进行合并的基础工作,在真实的工作负载场景下,自适应滑动窗口调整算法,根据服务请求数量的趋势变化进行动态调整的自适应滑动窗口大小,从而满足在不同的窗口大小下根据流量的大小进行合并,从而提示推理服务的性能,主要包含以下步骤:
39.判断服务请求的趋势变化,通过p(t)窗口判别函数,在当前时间点,判断服务请求数据是增加还是减少,其中如果是增加,则对应窗口变大;如果是减少,则对应窗口变小。
40.进一步的,确定窗口调整的服务。引入负载容器参数批处理参数分析阶段中获取的批处理大小和批处理执行时间参数。
41.进一步的,确定预测的流量大小的增量δf,然后计算预测的流量增量δf占最佳批处理大小的比例z。
42.进一步的,通过sigmoid函数对z进行优化,得到σ(z)
43.进一步的,通过将窗口判别函数p(t)、σ(z)与批处理执行时间进行乘积,在与当前时间窗口大小t
length
进行累加,得到新的窗口大小t
length 1

44.进一步的,确定窗口的左右边界,其中左边界的移动策略为当前左边界与已完成的服务时间相加作为新的左边界,右边界为新的左边界加上t
length 1
作为新的有边界大小。
45.本发明与现有技术相比的优点在于:由于窗口的选择具有时间敏感性,窗口大小直接影响批处理合并的效率。窗口大小选择的传统方法有基于固定请求个数的滑动窗口和基于固定时间的滑动窗口。这两种方法的窗口大小被限定在特定的条件下,无法满足时序数据短期内动态变化的需要,而本文中的自适应窗口大小可以根据流量大小自动进行缩放,将调整之后时间窗口大小作为服务请求合并的左边界和右边界,使得在不同的请求时刻,不同流量大小拥有不同的窗口大小。重点在于自适应调整窗口大小,与其最大的区别在于自适应滑动窗口的批处理合并算法允许窗口内有多个批处理,也就是说当窗口扩大时,窗口内请求大于最大批处理大小时,会按照贪心算法划分成多个批处理进行调用,当窗口内存在剩余请求时,合并到下一个窗口中。
附图说明
46.图1为本发明的批处理优化系统整体架构图。
47.图2为本发明的批处理参数分析流程图。
48.图3为批处理合并流程图。
49.图4为批处理合并架构图。
50.图5为平台算法发布流程图。
51.图6为openfaas部署调用流程图。
具体实施方式
52.本发明的技术方案可以表示为图1所示,主要包括:负载容器批处理分析工具模块和批处理合并工具模块、算法服务调用模块。通过上述两个模块的协同工作,可以实现本发明提出的度学习模型推理批处理优化技术与系统。
53.上述模块中,负载容器批处理分析工具模块:
54.如图4左侧分支所示,负载容器批处理分析工具解决了容器性能与服务性能最佳匹配的问题。通过将历史服务请求进行存储生成服务请求数据集,batch生成器对服务请求数据集中推理输入参数划分为不同批处理大小的集合,然后由容器生成器构造不同内存大小的容器,自动对openfaas配置文件pod.yaml中spec:containers:resources的request:cpu、request:memory参数进行调整,并通过faas-cli deploy-f./functon.yml进行函数部署。
55.之后负载训练器将模拟服务请求发送batch训练集中不同batch的数据进行推理,在每一次批处理推理结束后,负载训练器同时需要将此batch数据中每条记录开启多线程异步进行推理来测试不进行批处理的服务性能,并统计服务性能指标,当此环境容器对所有训练集合测试完毕,则销毁此容器,生成下一内存大小容器继续上述步骤。最终生成负载性能表,包含所有不同批处理大小的性能参数,其中参数选择器将通过自定义的算法规则选择出此算法模型在某一特定内存大小的批处理大小和批处理执行时间参数,而这两个参数将作为关键数据指导后续实时流量场景下的自适应滑动窗口的批处理合并算法,并将此内存大小作为此算法模型的线上容器环境。具体实现如下:
56.其中负载性能表如下,其中参数选择的策略如下
[0057][0058][0059]
针对此模块实现过程,提供如下接口配置。
[0060]
接口名称接口含义getarraylist(《request[input]》)返回一个服务请求的数据集outmultmemorypod(merory,core)然回一个创建好的容器outmultsizebatch(size)返回一个固定大小的批处理数据集collecttrainresult(pod,size)返回一个特定容器,批处理大小的执行结果selectbestparam(result)返回最佳的批处理大小和内存大小
[0061]
上述模块中,批处理合并工具模块:
[0062]
如图4右侧分支所示,批处理合并工具则解决了在实时场景下如何进行批处理合并的问题,用来对服务性能进行提升。对于实时的服务请求,开启nginx配置将服务请求转发到批处理合并工具中,由任务缓存队列进行缓存,缓存队列由linkedblockingqueue阻塞队列进行实现,接下来工作量聚合器将对队列中的请求任务按照时间区间进行计数,时间区间大小选取以此算法服务容器负载阶段生成的批处理执行时间作为参考标准,生成服务请求的时间序列,此序列保存当前与历史时间区间的流量大小。
[0063]
最后通过时序预测算法,从时间序列中截取近期推理服务请求开始预测,将预测算法得到的预测结果参数,即下一时间区间的服务请求数量和批处理参数(最佳批处理大小和最佳批处理执行时间),输入自适应窗口算法模型,自适应窗口算法模型对当前窗口左右边界进行调整,然后从请求缓存队列取出窗口内的推理服务请求生成批处理任务并根据推理服务请求所占用资源的类型发送到对应的openfaas集群算法容器中进行执行。
[0064]
具体实现过程如下:首先实现服务的预测方法。计算一次指数平滑值,推理服务请求的时间序列{x1,x2,x3,

xt},是第i期的一次平滑值,xi是第i期的实际值,α为平滑系数(在0和1之间,其中α数值越小,预测值与近期数据越相关),递推关系如下:(在0和1之间,其中α数值越小,预测值与近期数据越相关),递推关系如下:然后计算二次指数平滑值,二次指数平滑需要通过再进行一次加权平均对有趋势要素的序列进行预测。所以s
i(2)
是第i期的二次指数平滑值,s
i(1)
是第i期的一次指数平滑值,公式如下:当已有数据一共有t期,可以进行预测t t预测值。如果对t 1期做出预测,则将t取为1即可;y
t t
=a
t
b
t
×
t,其中通过参数bt来分析服务请求未来的趋势大小,根据预测值yt t来判断未来的流量大小,预测结果直接决定自适应窗口的大小变化。
[0065]
然后是自适应滑动窗口调整算法的实现。自适应滑动窗口调整算法的第一步是确定窗口判别函数:判断窗口是扩大还是缩小。如公式所示,其中t代表预测的当前时间点区间,当bt大于0,代表流量增加,反之减少。
[0066]
接下来需要确定窗口调整的幅度大小,本文引入负载容器批处理参数分析阶段中的获取批处理大小和批处理执行时间参数,公式如下:
[0067]
t
length 1
=t
length
(p(t)
×
σ(z)
×
t
batch
)
[0068][0069][0070]
δf=|y
t 1-y
t
|
[0071]
其中,t
length 1
指的是调整后窗口的长度;y
batch
,t
batch
是通过批处理参数分析得到的最佳批处理大小和执行时间;z为预测的流量增量占最佳批处理大小y
batch
的比例;y
t
表示上一时间区间的实时请求量大小;σ(z)为激活函数,这里使用sigmoid函数。解决服务流量
激增导致z取值过大问题,通过sigmoid激活函数将z值映射到(0,1)的范围内。最后窗口的左右边界的位置移动策略为:
[0072]wleft 1
=w
left
t
finished
[0073]wright 1
=w
left 1
t
length 1
[0074]
其中,w
left 1
、w
right 1
指的是调整后的左边界和右边界;t
finished
为窗口内已完成的批处理请求时间长度。从上述公式可以得出,窗口每次调整的最大步长为负载容器批处理参数分析中的最佳批处理大小的执行时间长度,但是当流量一直在增加,每次都会延长窗口的大小,所以窗口内部请求数量会超出最佳批处理的大小,此时对窗口内请求组成多个批处理来执行。当服务流量减少时,窗口进行减小,直至窗口左右边界重合,此时每一个服务请求不进行批处理单独调用。
[0075]
针对此模块实现过程,提供如下接口配置。
[0076]
接口名称接口含义addqueue(《request[input]》)返回保存的服务请求队列counttimeinterval(《request[input]》)返回请求时间队列initandresizewindow(arraylist)返回初始化和重新调整后的窗口大小predicttimeserires(arraylist)返回时间序列预测的参数invoking(batch)返回批处理执行结果
[0077]
上述模块中,算法服务调用模块:
[0078]
如图5、6所示,当发布流程进入无服务器平台阶段时,首先通过gateway网关将部署算法请求的转发到openfaas provider,provider根据用户已经编写好的函数模板通过faas-netes进行部署,其中包括配置docker镜像,生成kubernetes的deployment、service、secret等资源组件,将算法部署到pod容器中,然后将函数发布为一个服务,通过openfaas operator对资源组件进行crd管理。当算法进行服务调用时,请求路由首先到达网关gateway,将请求转发给容器内8080端口的watchdog监视器,通过stdin和stdout传递http请求信息,完成服务的调用。
[0079]
尽管为说明目的公开了本发明的具体实施例,其目的在于帮助理解本发明的内容并据以实施,本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
转载请注明原文地址:https://win.8miu.com/read-950377.html

最新回复(0)