模型部署方法、模型部署装置、终端设备及可读存储介质与流程

文档序号:26192560发布日期:2021-08-06 18:45阅读:96来源:国知局
模型部署方法、模型部署装置、终端设备及可读存储介质与流程

本发明属于人工智能技术领域,涉及模型部署领域,特别涉及一种模型部署方法、模型部署装置、终端设备及可读存储介质。



背景技术:

机器学习(machinelearning,简称ml)是当今计算机科学中发展最快的领域之一,典型的机器学习技术可以对大量预收集的数据集上的特定应用训练统计模型,以更新模型参数(也称为“权重”),直到收敛为止;将训练后的模型用于推理,也即预测新数据的结果。基于神经网络的深度学习由于其出色的效果而成为最广泛使用的ml算法。神经网络模型是多层的有向无环图(dag),模型通常由卷积、矩阵乘法、池化、批正则化等操作组成,它们以线性链或更复杂的模式(例如,分支和残差链接)连接。神经网络模型的泛化能力和准确性通常随着更深的拓扑和更大的网络层而提高,如resnet、vgg,但这同样会带来更高的执行延迟。

研究者不断推出复杂的网络模型以取得更好的泛化能力和准确率;随之而来的是模型的参数量也越来越大,计算复杂度越来越高;例如,openai提出的gpt-3模型仅仅参数量就达到了惊人的1750亿,模型占用的硬盘存储空间也超过700g。研究者当前已经提出了各种系统级优化方案来解决由更大和更复杂的模型引起的性能挑战;其中,在硬件方面,使用gpu和专用加速器(例如,googletpus)支持更快的计算;在软件方面,有许多框架来弥合以生产力为中心的高级接口与面向性能的低级实现之间的差距,包括tensorflow,pytorch,mxnet,tvm等。

然而,上述研究未能很好解决大参数模型的部署问题。具体的,当前工作大多默认运行深度学习模型的机器的内存和硬盘是足量的,可以直接在单台机器上运行模型,拿到模型的输出;在云服务器集群上,一般用分布式存储,取得更好的文件读写速率,进而取得较好的吞吐率,但这会浪费较多时间在传输上,也不能充分发挥所有设备的运算能力。随着深度学习的发展,研究者发现运算资源总是受限的;另外,负责运算的设备通常需要更强的算力,而负责读写的在多数时候算力是闲置的,这一方面造成了巨大的浪费,另一方面也使得吞吐率难以提升。

综上所述,为了让深度学习模型运行在受限资源场景下,亟需一种新的受限资源下的深度学习模型部署方法、系统、设备及介质。



技术实现要素:

本发明的目的在于提供一种模型部署方法、模型部署装置、终端设备及可读存储介质,以解决上述存在的一个或多个技术问题。本发明能够充分兼容不同算力的设备,可提高运行效率以及全局上的吞吐率。

为达到上述目的,本发明采用以下技术方案:

本发明的一种模型部署方法,包括以下步骤:

获取待部署深度神经网络模型的算子模型集合;将算子模型集合中满足预设条件的算子模型进行算子融合或算子分割处理,获得处理后的算子模型集合;

获取所述处理后的算子模型集合中每个算子模型在用于部署模型的设备集合中的每个设备上的运行时间,获得运行时间集合;

基于所述运行时间集合,采用预设搜索方法对所述处理后的算子模型集合中的算子模型进行组合,获得子模型集合;

基于所述子模型集合,将待部署深度神经网络模型部署于所述设备集合上,完成模型部署。

本发明的进一步改进在于,所述获取待部署深度神经网络模型的算子模型集合的步骤具体包括:

选择单层神经网络作为基本粒度,对待部署深度神经网络模型进行划分,获得算子模型集合。

本发明的进一步改进在于,所述将算子模型集合中满足预设条件的算子模型进行算子融合或算子分割处理,获得处理后的算子模型集合的步骤具体包括:

将算子模型集合中每个算子模型的参数量与所述设备集合中内存最小的设备的内存进行比较;将算子模型集合中每个算子模型的参数量与所述设备集合中内存最小的设备的内存进行比较;将所述参数量大于所述内存的算子模型进行算子分割,分割直到参数量小于所述内存的1/2;将所述参数量小于所述内存的1/10的算子模型进行算子融合,融合直到大于所述内存的1/10且小于1/2。

本发明的进一步改进在于,所述预设搜索方法为回溯法搜索方法;

采用回溯法搜索方法对所述处理后的算子模型集合中的算子模型进行组合时,当实际运行时间大于等于高吞吐率优先方案的理论延时时,采用高吞吐率优先方案;所述高吞吐率优先方案具体步骤包括:

将节点按输入-输出的拓扑结构依次编号,表示为node1,node2,…,nodei,…,noden;从node1开始直到noden,对nodei查询拓扑图,获取与nodei连通的分支节点,获得搜索树,对所述搜索树进行dfs遍历得到分割方案;其中,对nodei的每个分支节点nodei+1产生两个分支,用于表示nodei与nodei+1处于同一子模型和不同子模型;nodei有多个分支节点时,找到所有分支节点汇聚的入节点nodej,将除去nodei到nodej间节点以外分割方案相同的方案视为相同方案进行合并,获得最终的x个方案;遍历所述x个方案,对于某个方案,如果其需要的设备数量大于可用设备数目d,则去掉该方案,获得现存的方案集合;

遍历现存的方案集合:对于其中的每个方案,计算每一个子模型对应的算子模型在每种设备上的开销;将在不同设备上的开销进行组合,用最大的设备的开销乘以消耗的设备数量得到总的开销,找到使总的开销最小的一个组合作为最优组合,记为划分分割方案;比较所有划分分割方案的最小开销,将最小的最小开销对应的划分分割方案作为最终的划分分割方案。

本发明的进一步改进在于,采用回溯法搜索方法对所述处理后的算子模型集合中的算子模型进行组合时,当实际运行时间小于高吞吐率优先方案的理论延时,采用低服务延时优先方案;所述低服务延时优先方案具体步骤包括:

将节点按输入-输出的拓扑结构依次编号,表示为node1,node2,…,nodei,…,noden;从node1开始直到noden,对nodei查询拓扑图,获取与nodei连通的分支节点,获得搜索树,对所述搜索树进行dfs遍历得到分割方案;其中,对nodei的每个分支节点nodei+1产生两个分支,用于表示nodei与nodei+1处于同一子模型和不同子模型;nodei有多个分支节点时,找到所有分支节点汇聚的入节点nodej,将除去nodei到nodej间节点以外分割方案相同的方案视为相同方案进行合并,获得最终的x个方案;遍历所述x个方案,对于某个方案,如果其需要的设备数量大于可用设备数目d,则去掉该方案,获得现存的方案集合;

遍历现存的方案集合:对于其中的每个方案,计算每一个子模型对应的算子模型在每种设备上的开销;将在不同设备上的开销进行组合,累加得到总的开销,找到使总的开销最小的一个组合作为最优组合,记为划分分割方案;比较所有划分分割方案的最小开销,将最小的最小开销对应的划分分割方案作为最终的划分分割方案。

本发明的进一步改进在于,所述用于部署模型的设备集合中的所有设备均相同;所述预设搜索方法为动态规划搜索方法;

采用动态规划搜索方法对所述处理后的算子模型集合中的算子模型进行组合时,当实际运行时间小于高吞吐率优先方案的理论延时,采用低服务延时优先方案;所述低服务延时优先方案具体步骤包括:

将节点按输入-输出的拓扑结构依次编号,表示为node1,node2,…,nodei,…,noden,用n×n的矩阵m表示它们的连通关系;其中,每个有分支的节点均有多个初节点,每个汇聚的节点均有多个入节点;

从node1开始遍历至noden;其中,如果nodei是分支节点的父节点,找到分支节点的汇聚节点nodej,对nodei到nodej间的节点递归调用优化目标为{min{numberi..j×max{low_costi..j}}的算法,找到最优的组合使此分支的延时最小;根据状态转移方程求出最优化方案为low_costj=low_costi+lcompute(i..j)+lcommunicate(i),记录low_costj的子模型组合方式;遍历完后,low_costn为预估的最小延时,查询记录获得深度学习模型划分部署方案;numberi..j表示node_i到node_j之间需要消耗的机器数量;

其中,采用low_costi表示第0个算子到第i个算子的所有子模型组合方式中总延时最低的组合方式,其状态转移方程表示为:

low_costn=min{low_cost0+lcompute(0..n)+lcommunicate(0),low_cost1+lcompute(1..n)+lcommunicate(1),...,low_costn-1+lcompute(n-1..n)+lcommunicate(n-1)}

low_cost0=0,

lcommunicate(0)=0,

lcommunicate=data_size*coefficient,

其中,lcompute(i..j)为第i个算子到第j个算子组合形成的子模型的计算延时,costi为第i个算子的计算延时,lcommunicate指数据传输的延时,data_size是指待传输的数据的大小,coefficient是根据网络带宽变化的一个常量。

本发明的进一步改进在于,采用动态规划搜索方法对所述处理后的算子模型集合中的算子模型进行组合时,当实际运行时间大于等于高吞吐率优先方案的理论延时,采用高吞吐率优先方案;所述高吞吐率优先方案具体步骤包括:

将节点按输入-输出的拓扑结构依次编号,表示为node1,node2,..,nodei,...,noden,用n×n的矩阵m表示它们的连通关系;其中,每个有分支的节点均有多个初节点,每个汇聚的节点均有多个入节点;

从node1开始遍历至noden;其中,如果nodei是分支节点的父节点,找到分支节点的汇聚节点nodej,对nodei到nodej间的节点递归调用优化目标为{min{numberi..j×max{low_costi..j}}的算法,找到最优的组合使此分支的延时最小;根据状态转移方程求出最优化方案为low_costj=low_cost×device0..j,记录low_costj对应的子模型组合方式;遍历完noden后,low_costn为预估的最小延时,查询记录的子模型组合方式获得深度学习模型划分部署方案。

本发明的一种模型部署装置,包括:

算子模型集合获取模块,用于获取待部署深度神经网络模型的算子模型集合;将算子模型集合中满足预设条件的算子模型进行算子融合或算子分割处理,获得处理后的算子模型集合;

运行时间集合获取模块,用于获取所述处理后的算子模型集合中每个算子模型在用于部署模型的设备集合中的每个设备上的运行时间,获得运行时间集合;

子模型集合获取模块,用于根据所述运行时间集合,采用预设搜索方法对所述处理后的算子模型集合中的算子模型进行组合,获得子模型集合;

部署模块,用于根据所述子模型集合,将待部署深度神经网络模型部署于所述设备集合上,完成模型部署。

本发明的一种电子设备,包括:处理器;存储器,用于存储计算机程序指令;所述计算机程序指令由所述处理器加载并运行时,所述处理器执行本发明任一项上述的模型部署方法。

本发明的一种可读存储介质,所述可读存储介质存储有计算机程序指令,所述计算机程序指令被处理器加载并运行时,所述处理器执行本发明任一项上述的模型部署方法。

与现有技术相比,本发明具有以下有益效果:

本发明提供的模型部署方法中,将待部署的大参数模型分割成多个小的算子模型,基于所述算子模型采用预设的规划方法获得子模型,使子模型能够完美适配不同算力的计算设备的内容容量,减少非计算开销,充分发挥现有的计算设备的能力。本发明的模型部署方法可在算力受限的设备上部署参数量较大的模型。需要提到的是,本发明方法将模型部署在不同设备上,自然引入了通信开销,但是引入的通信开销远远小于模型本身的计算开销;对于云计算平台来讲,通信开销更不值一提,相比于将参数从硬盘中分块加载的工作,通信开销也是远远小于加载开销的。

本发明进一步改进的模型部署方法实施例中,提供了具体地的模型分割算法,可以生成高负载和低负载两种情况下的配置方案,分别被称为低服务延时优先(latency-first)方案和高吞吐率优先(throughput-first)方案,还支持提前预设好设备参数,根据设备调整方案;方案一旦生成后,服务供应商可以根据需求灵活调整方案。

本发明进一步改进的模型部署方法实施例中,针对更常见的各计算设备算力几乎相同的场景,提出了一种复杂度更低的动态规划算法,可以更高效地得出全局最优的设备分割方案。

附图说明

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

图1是本发明实施例的一种模型部署方法的流程示意框图;

图2是本发明实施例中,一种算子融合示意图;

图3是本发明实施例中,低服务延时优先的流程示意图;

图4是本发明实施例中,高吞吐率优先的流程示意图;

图5是本发明实施例中,部署结果示意图。

具体实施方式

为使本发明实施例的目的、技术效果及技术方案更加清楚,下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述;显然,所描述的实施例是本发明一部分实施例。基于本发明公开的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的其它实施例,都应属于本发明保护的范围。

本发明实施例的一种模型部署方法,包括以下步骤:

获取待部署深度神经网络模型的算子模型集合;将算子模型集合中满足预设条件的算子模型进行算子融合或算子分割处理,获得处理后的算子模型集合;

获取所述处理后的算子模型集合中每个算子模型在用于部署模型的设备集合中的每个设备上的运行时间,获得运行时间集合;

基于所述运行时间集合,采用预设搜索方法对所述处理后的算子模型集合中的算子模型进行组合,获得子模型集合;

基于所述子模型集合,将待部署深度神经网络模型部署于所述设备集合上,完成模型部署。

机器学习已经成为现代数据驱动应用中最重要、最普遍的技术,深度学习的最新进展在图像/视频分类和自然语言处理等各种具有挑战性的任务上取得了前所未有的成果。近些年来,研究者不断推出复杂的网络模型以取得更好的泛化能力和准确率。但随之而来的是模型的参数量也越来越大,计算复杂度越来越高。openai提出的gpt-3模型仅仅参数量就达到了惊人的1750亿,模型占用的硬盘存储空间也超过700g。随着深度学习的发展,研究者发现运算资源总是受限的。为了让深度学习模型运行在受限资源场景下,本发明实施例提出了一种新的模型部署方法,所述方法能够将待部署模型切分成小的单元,部署在弱运算能力的设备上,更能够发挥设备算力,减少读写开销。具体地,本发明实施例公开了一种灵活的深度学习模型部署方法,使得深度学习模型能充分兼容不同算力的设备,并充分榨干设备的算力,取得最优的运行效率和总体上的吞吐率;不管是云计算中强算力的设备,还是边缘计算中弱算力的设备乃至嵌入式设备,本发明都能充分考虑到它们的算力区别,在全局上取得最优的吞吐率。

本发明申请实施例中,开销主要来源于两个部分,模型本身的执行时间和设备间的通信时间;其中,通常执行时间是远大于通信时间的。

本发明申请实施例中,设定了两个优化场景,包括:

(1)在低频请求场景下,模型部署方法应当为用户单次请求提供更低的预测延时;

(2)在高频请求场景下,模型部署方法应当在保证单次预测延时可接受的情况下,整体上对吞吐率进行优化,在单位时间内为更多的用户提供服务。

值得注意的是,针对吞吐率优化时,所有设备组成一条较为复杂的流水线,而吞吐率取决于流水线中最慢的一级流水;因此,高吞吐率场景下的优化方案也通常会倾向于让各个设备的负载更加均衡。

本发明实施例中,一旦可用资源和待部署模型确定下来,就可以生成低服务延时优先(latency-first)方案和高吞吐率优先(throughput-first)方案,同时计算出对应的理论延时timelatency和timethroughpu;实际运行时,先采用低服务延时优先方案,当用户的实际运行时间大于高吞吐率优先方案的理论延时timethroughput时,切换为高吞吐率优先方案,记录当前的请求数目numberflag。定义:当用户请求数目numberrequest>numberflag时,为高负载环境,采用高吞吐率(throughput-first)优先方案。当用户请求数目numberrequest<numberflag时,为低负载环境,采用低服务延时优先(latency-first)方案。

本发明实施例中,设总共有n个算子模型,设第i个算子模型的计算延时为lcomp,i,第i个算子模型和第i+1个算子模型之间的通信延时为lcomm,i。

其中,低延时方案下的优化函数为min{∑ilcomp,i+lcomm,i},表示将算子模型组合成不同的子模型,取得延时最小的一种算子模型组合方式,使得总体上的延时最低;由于高吞吐率优先方案下设备组成一条较为复杂的流水线,而吞吐率取决于流水线中最慢的一级流水,所以此时的优化函数为min{n×maxi{lconp,i,lcomm,i}},表示取所有算子模型组合方式中,使得其延时最大的子模型的延时与子模型数量乘积最小的一种组合方式。

请参阅图1,本发明实施例的一种模型部署方法,用于将待部署的深度神经网络模型部署于资源限定的用于部署模型的设备集合上,具体包括以下步骤:

筛选获得待部署深度神经网络模型的算子模型集合,并行后处理,获得处理后的算子模型集合;其中,后处理包括:将满足预设条件(根据算子模型参数量与最小内存设备的内存进行比较)的算子模型进行算子融合或算子分割;每个算子模型在设备集合中每个设备上作延迟统计,获得运行时间集合;基于所述运行时间集合,采用预设搜索方法对所述处理后的算子模型集合中的算子模型进行组合,获得子模型集合;基于所述子模型集合,将待部署深度神经网络模型部署于所述设备集合上,完成模型部署。

深度学习模型有一个明显的特点,各种容易区分的算子根据某种特定的拓扑结构组成整体的模型。如果把各个算子视为节点,它们之间的连接视为边,深度学习模型的拓扑结构可以看作典型的有向图,这些节点和边都有着各自的值,代表运算和通信的开销。由于内存容量有差异,不同设备能承载模型的能力是不同的,对于支持虚存的设备来说,虽然可以通过虚存运行参数量更大的模型,但对应会产生大量“缺页中断”,带来巨大开销。所以如果一个子模型中包含的节点过多,最终会因为“缺页中断”使得开销暴涨。

本发明申请实施例提供的方法中,将这些节点和边划分成一个个子模型,使得总的开销最小。

本发明申请实施例中,粒度选择的具体步骤包括:在对深度学习模型进行划分时,过于粗粒度可能会错过潜在的最优划分的机会,并且无法使模型完全放入设备的内存中,而过于细粒度地划分则会使搜索最佳策略的速度变慢。在深度学习模型中,选择单层神经网络作为基本粒度是很自然的事情;每个划分得到的子模型分区将包含一层或多层网络。但是,在某些情况下,需要进行特殊调整。

本发明申请实施例中,算子融合的具体步骤包括:除了卷积和矩阵乘法之类的计算密集型网络层外,神经网络还使用权重很少或没有权重的小网络层;例如,合并、批正则化和relu激活;上述这些层对内存使用率没有明显的贡献,将它们与它们的邻居卷积或矩阵乘法网络层融合在一起,以减少用于划分的基本单元的数量。这样的层融合是在许多深度学习框架中常用的性能优化方法;例如,tvm,tensorflow。如图2所示,图2中,conv表示卷积层,bn表示批正则化层,relu表示线性整流函数。

本发明申请实施例中,大参数算子处理的步骤具体包括:对于参数量过大的算子,将其拆分成多个并行的算子,以减小单个算子的参数量,它们的输出可以合并,并且等同于原始算子的输出。根据经验优选的,设所有待部署设备中内存最小的设备的内存大小为sm,一般会拆分参数量大小超过0.5sm的算子,直到拆分后的算子大小小于0.5sm。

本发明申请实施例中,分支处理的具体步骤包括:诸如resnet,inception和densenet之类的深度学习模型采用复杂的拓扑结构,这些拓扑结构不是简单的线性序列而是具有分支。本发明实施例中将这些分支单独标记。其中,在计算性能时,这类并行分支单元视为同一级流水,它们的延迟取决于最慢的一个单元。

本发明申请实施例中,为了得出最佳划分方案,需要准确获取算子计算延迟lcompute和通信延迟lcommunicate的估计,进而了解可能在同一台设备中运行的各算子的组合(即子模型)。子模型间有通信的开销,子模型内没有通信开销。通常一台设备上运行的算子会有两个延时:低“缺页中断”下的延时和高“缺页中断”下的延时。

本发明实施例中,对于计算算子延迟,如果一个子模型的总内存使用量超过可用内存大小,则该子模型中的算子将遭受严重的“缺页中断”。因此,本发明实施例使用以下方法搜索最优的算子组合方案,其中包括算子延时统计和子模型延时预估。

本发明实施例中,算子延时统计的步骤包括:算子模型运行在设备上,获取低“缺页中断”下的延时和高“缺页中断”下的延时;在两种情况下,分别编译和测量每个算子的性能:单独使用一个简单的内存膨胀模块,该模块占用了大部分内存空间。在内存膨胀模块运行时,启动算子对应有“缺页中断”的运行时间,对应为高“缺页中断”下的延时;当内存膨胀模块关闭时,则对应没有“缺页中断”的运行时间,对应为低“缺页中断”下的延时。

本发明实施例中,子模型延时预估的步骤具体包括:从起始节点开始,生成子模型。计算搜索空间中子模型的内存使用量。深度学习模型有非常规则的程序语义。内存布局主要由模型权重、中间结果和输入/输出组成,其中模型权重占最大份额。权重占用的内存对一个确定的模型来说也是固定量,中间结果同样可以通过计算算子的输入输出得出内存占用大小。子模型延时预估:对于任何给定的算子的组合,预测它们的内存使用情况,并与设备自身的内存的大小进行比较,以确定是否会产生大量“缺页中断”,再通过累加得到子模型的延时,记录下来。回到步骤二直到遍历搜索空间。将相应的子模型延迟汇总为总延迟,选出符合优化目标的方案。

本发明实施例中,基于得到的各个算子在不同设备上的正常运算开销和发生大量“缺页中断”时的运算开销,从搜索空间选出适合需求的方案;当前深度学习模型的拓扑结构为有向无环图(dag),以下称算子为节点(node),nodei表示第i个算子。为获取它的所有子模型的组合,采用一种回溯法的方式进行搜索,将搜索空间表征为搜索树结构。

请参阅图3,本发明实施例中,假设当前方案优化目标为最小延时,仅需让模型的划分的延时的综合在当前的设备资源下取最小即可,步骤如下:

步骤一,将节点按输入-输出的拓扑结构依次编号,标记为node1,node2,…,noden。每个有分支的节点都有多个出节点,每个汇聚的节点有多个入节点,在拓扑图中表现为有两条以上的边;

步骤二,从node1开始,直到noden。对nodei,查询拓扑图,获取与它连通的分支节点,对它的每个分支节点nodei+1,产生两个分支,表示nodei与nodei+1处于同一子模型和不同子模型;

步骤三,对步骤二生成的搜索树,进行dfs遍历,得到分割的方案;

步骤四,对nodei如果它有多个分支节点,需要找到所有分支节点汇聚的入节点nodej,将除去nodei到nodei间节点以外分割方案相同的方案视为相同方案,进行合并,最终得到x个方案。

步骤五,遍历方案,对第a个方案plana,如果方案需要的设备数量da>d(d为可用设备数目),去掉该方案。

步骤六,开始遍历现存的方案,对方案plana,对方案中的每一个覆盖/子模型ga,计算其对应的算子在每种设备deviceb上的开销costab。对方案plana,我们对它在不同设备的开销costab进行组合,累加得到总的开销total_cost,找到使得total_cost最小的一个组合作为plana的最优组合,记为最终划分分割方案opti_plana.其最小开销记为low_costa

步骤七,对所有的x个opti_plan比较其low_cost值,找出low_cost值最小备选划分方案的opti_plan,输出作为最佳的划分方案。

本发明实施例中优选的,最小延时的相同设备优化方案包括:当应用场景中的设备配置完全相同时,可以采用一种复杂度更低的动态规划算法得到最优的深度学习模型分割方案。用low_costi表示第0个算子到第i个算子的所有子模型组合方式中总延时最低的组合方式。其状态转移方程表示为:

low_costn=min{low_cost0+lcompute(0..n)+lcommunicate(0),low_cost1+lcompute(1..n)+lcommunicate(1),...,low_costn-1+lcompute(n-1..n)+lcommunicate(n-1)}

对于第n个算子来说,它总是前n-1个算子组合中最优的情况递推过来的。定义low_cost0=0,lcommunicate(0)=0,lcommunicate=data_size*coefficient{lcompute(i..j)为第i个算子到第j个算子组合形成的子模型的计算延时,costi为第i个算子的计算延时,lcommuntcate指数据传输的延时,data_size是指待传输的数据的大小,单位为mb,coefficient是根据网络带宽变化的一个常量,1gbps以太网峰值约为8ms/mb)。使用一张low_cost表保存计算得到的low_costi,使用一张position表记录nodej选择low_costi的位置i。

本发明上述实施例中,采用动态规划算法得到最优的深度学习模型分割方案的步骤如下:

步骤一,将节点按输入-输出的拓扑结构依次编号,标记为node1,node2,…,noden。每个有分支的节点都有多个出节点,每个汇聚的节点有多个入节点。

步骤二,从node1开始,对nodei,如果nodei是分支节点的父节点,找到分支节点的汇聚节点nodej.对nodei到nodei间的节点递归调用此算法,优化目标为{min{max{low_costi..j}},最小延时取决于各分支中延时最大的那个分支,找到最优的组合使这个分支的延时最小。

步骤三,对nodej,根据状态转移方程求出最优化方案为low_costj=low_costi+lcompute(i..j)+lcommunicate(i),记录low_costj的子模型组合方式。

步骤四,遍历完node后,low_costn即为预估的最小延时,查询记录即可获得深度学习模型划分部署方案。

请参阅图4,本发明实施例中,假设当前方案优化目标为最高吞吐率,此时延时取决于运算时间最长的设备,需让子模型在各设备上的延时尽可能均衡,步骤如下:

步骤一,将节点按输入-输出的拓扑结构依次编号,标记为node1,node2,...,noden。每个有分支的节点都有多个出节点,每个汇聚的节点有多个入节点,在拓扑图中表现为有两条以上的边;

步骤二,从node1开始,直到noden。对nodei,查询拓扑图,获取与它连通的分支节点,对它的每个分支节点nodei+1,产生两个分支,表示nodei与nodei+1处于同一子模型和不同子模型;

步骤三,对步骤二生成的搜索树,进行dfs遍历,得到分割的方案;

步骤四,对nodei如果它有多个分支节点,需要找到所有分支节点汇聚的入节点nodej,将除去nodei到nodej间节点以外分割方案相同的方案视为相同方案,进行合并,最终得到x个方案。

步骤五,遍历方案,对第a个方案plana,如果方案需要的设备数量da>d(d为可用设备数目),去掉该方案。

步骤六,开始遍历现存的方案,对方案plana,对方案中的每一个覆盖/子模型ga,计算其对应的算子在每种设备deviceb上的开销costab。对方案plana,我们对它在不同设备的开销costab进行组合,用最大的设备的开销costab乘以消耗的设备数量d,得到总的开销total_cost,找到使得total_cost最小的一个组合作为plania的最优组合,记为最终划分分割方案opti_plania.其最小开销记为low_costa

步骤七,对所有的x个opti_plan,比较其low_cost值,找出low_cost最小的最小备选划分方案opti_plan,输出作为最佳的划分方案。

本发明实施例中,最高吞吐率的相同设备优化方案包括:当应用场景中的设备配置完全相同时,我们同样可以采用复杂度更低的动态规划算法得到吞吐率最优的深度学习模型分割方案。核心思想为最小化延时最高的子模型的延时,即负载均衡。

其状态转移方程表示为:

low_costn=min{max{low_cost0,lcompute(0..n)×(d0+1)},max{low_cost1,lcompute(1..n)×(d1+1)},...,max{low_costn-1,lcompute(n-1..n)×(dn-1+1)}}

通常来说lcommumcate《lcompute,所以不考虑lcommunicate的延时。第n个算子与前面的某一些算子组成子模型,延时由最大的子模型延时决定。low_cost总是前n个算子组合中最优的情况递推过来的。定义low_cost0=0,lcommunicate(0)=0,为第i个算子到第j个算子组合形成的子模型的计算延时,costi为第i个算子的计算延时,lcommunicate指数据传输的延时,dn表示第1个算子到第n个算子的最优方案需要占用的设备数量).使用一张low_cost表保存计算得到的low_costi,使用一张position表记录nodej选择low_costi的位置i,使用number表记录对应方案需要的设备数量。

本发明上述实施例中,采用动态规划算法得到吞吐率最优的深度学习模型分割方案的步骤如下:

步骤一,将节点按输入-输出的拓扑结构依次编号,标记为node1,node2,…,noden。用一个n×n的矩阵m表示它们的连通关系。每个有分支的节点都有多个初节点,每个汇聚的节点有多个入节点。

步骤二,从node1开始,对nodei,如果nodei是分支节点的父节点,找到分支节点的汇聚节点nodej.对nodei到nodei间的节点递归调用此算法,优化目标为{min{numberi..j×max{low_costi..j}},最小延时取决于各分支中延时最大的那个分支,找到最优的组合使这个分支的延时最小。

步骤三,对nodej,根据状态转移方程求出最优化方案为low_costj=low_cost×device0..j,记录low_costj对应的子模型组合方式

步骤四,遍历完node后,low_costn即为预估的最小延时,查询记录的组合方式即可获得深度学习模型划分部署方案。

请参阅图5,本发明成功将大参数模型分割成一个个小的子模型,使子模型能完美适配计算设备的内容容量,减少非计算开销,充分发挥现有的计算设备的能力。

本发明优选的,采用onnx模型协议保存深度学习模型,可以被加载到各种深度学习框架,并对接其api,输出到各种硬件后端。各种计算设备间使用tcp协议完成,无需复杂的数据格式转换,有着良好的兼容性和通用性。本发明将模型部署在不同设备上,自然引入了通信开销,但是引入的通信开销远远小于模型本身的计算开销。而对于云计算平台来讲,通信开销更不值一提。相比于将参数从硬盘中分块加载的工作,通信开销也是远远小于加载开销的。

本发明提出了一种更灵活的模型分割算法,可以生成高负载和低负载两种情况下的配置方案,还支持提前预设好设备参数,根据设备调整方案。方案一旦生成后,服务供应商可以根据需求灵活调整方案。本发明针对更常见的各计算设备算力几乎相同的场景,提出了一种复杂度更低的动态规划算法,可以更高效地得出全局最优的设备分割方案。本发明提出了一种延时预估模型,可以预估子模型在不同设备上的运行时间,而不是直接运行子模型进行统计,极大地降低了预处理的开销。

本发明实施例的一种模型部署装置,包括:

算子模型集合获取模块,用于获取待部署深度神经网络模型的算子模型集合;将算子模型集合中满足预设条件的算子模型进行算子融合或算子分割处理,获得处理后的算子模型集合;

运行时间集合获取模块,用于获取所述处理后的算子模型集合中每个算子模型在用于部署模型的设备集合中的每个设备上的运行时间,获得运行时间集合;

子模型集合获取模块,用于根据所述运行时间集合,采用预设搜索方法对所述处理后的算子模型集合中的算子模型进行组合,获得子模型集合;

部署模块,用于根据所述子模型集合,将待部署深度神经网络模型部署于所述设备集合上,完成模型部署。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员依然可以对本发明的具体实施方式进行修改或者等同替换,这些未脱离本发明精神和范围的任何修改或者等同替换,均在申请待批的本发明的权利要求保护范围之内。

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