基于深度学习的虚拟资源调度系统与方法
文献发布时间:2023-06-19 12:24:27
技术领域
本发明属于深度学习与资源调度领域,尤其涉及一种基于深度学习的虚拟资源调度系统、方法与计算机可读介质。
背景技术
资源调度是指在特定的资源环境下,根据一定的资源使用规则,在不同的资源使用者之间进行资源调整的过程。这些资源使用者对应着不同的计算任务(例如一个虚拟解决方案),每个计算任务存操作系统中对应于一个或者多个进程。通常有两种途径可以实现计算任务的资源调度:在计算任务所在的机器上调整分配给它的资源使用量,或者将计算任务转移到其他机器上。
容器(可称为docker/contaier/pod等)拉取/启动快速,隔离资源效果好,因此成为最常见的虚拟资源形式。抽象来看,可以将容器的image作为job的一部分分发调度执行。基于Docker容器的资源管理方案,将资源管理整合成一个资源管理与调度平台,而作业控制则放到应用程序框架中从而解决扩展性差的问题。各个服务组件中的各个模块则采用虚拟化容器Docker进行资源隔离,提高了资源利用率,同时也保证了安全性。在基于容器的分布式资源管理平台之上,可以构建类似于视频流服务、深度学习计算框架等服务,形成媒体智能处理层,但是容器化后会引入gpu,网络等性能的代价。
国际申请PCT/CN2018/085714公开一种资源分配方法及装置、计算机存储介质,所述方法包括:第一设备获取第一资源配置信息,所述第一资源配置信息用于确定第一链路的可用资源,其中,所述第一链路是所述第一设备和第二设备之间的链路;
中国专利申请文件CN201310752071.2提出一种资源动态分配的管理方法和装置,该资源动态分配的管理方法包括:对将要执行的业务操作进行分析,确定该业务操作在不同时间段所需的资源量;根据确定出的业务操作在不同时间段所需的资源量,生成资源伸缩配置信息;根据资源伸缩配置信息,为不同时间段执行业务操作分配对应的资源。该发明通过预先对将要执行的业务操作进行分析,确定该业务操作在不同时间段所需的资源量,然后,根据该资源量,生成资源伸缩配置信息,并根据该资源伸缩配置信息,为不同时间执行业务操作分配对应的资源,从而实现了在不同的时间段,采用不同的伸缩策略进行资源的动态分配,进而有效的提高了资源池的使用效率,使得资源池更具有弹性。
然而,现有技术的虚拟资源调度尤其是容器资源调度,调度程序只能确保对于每种资源类型,所调度的容器的资源请求的总和小于节点的容量。如果节点上的实际内存或CPU资源使用量非常低,如果容量检查失败,调度程序仍会拒绝在该节点上放置Pod,无法根据实际情况进行动态的调整。这种限于总量满足的控制方式,导致虚拟资源的调度准确性不高。
发明内容
为解决上述技术问题,本发明提出一种基于深度学习的虚拟资源调度系统、方法与计算机可读介质。
所述调度系统包括第一宿主机和第二宿主机,第一宿主机配置有第一深度学习神经网络处理器,第二宿主机上配置有第二深度学习神经网络处理器;第一深度学习神经网络处理器包含多个处理器分支;当处理器分支的第一节点包含输入数据并且第三节点包含输出数据时该处理器分支为激活分支;在第一宿主机上运行第一数量的容器,在第二宿主机上运行第二数量的容器,基于第一深度学习神经网络处理器的第一输入层的第一激活分支量,确定所述第一数量的值,基于第二深度学习神经网络处理器的第二输出层的第二激活分支量,确定所述第二数量的值。
具体来说,本发明所述的一种基于深度学习的虚拟资源调度系统中,所述第一深度学习神经网络处理器包括第一输入层、第一隐含层和第一输出层;所述第二深度学习神经网络处理器包括第二输入层和第二输出层;
在所述第一宿主机上运行第一数量的容器,在所述第二宿主机上运行第二数量的容器,所述第一深度学习神经网络处理器的所述第一输入层、第一隐含层和第一输出层运行于所述第一宿主机上的同一个容器中;所述第二深度学习神经网络处理器的所述第二输入层和第二输出层运行于所述第二宿主机上的同一个容器中;并且,基于所述第一深度学习神经网络处理器的所述第一输入层的第一激活分支量,确定所述第一数量的值,基于所述第二深度学习神经网络处理器的所述第二输出层的第二激活分支量,确定所述第二数量的值。
首先需要说明的是,在本发明的技术方案中,神经网络处理器是用于实现神经网络模型的硬件设备,神经网络本身可以视为某种软件模型。在本发明的部分描述中,有时候神经网络处理器和神经网络(模型)可相互调用。
一般而言,一个神经网络模型包括输入层、中间层(隐含层)和输出层。输入层、中间层(隐含层)和输出层一般各自包含多个单元(节点),变现在硬件实现上,也可以描述为神经网络处理器包含输入层处理器组、中间层(隐含层)处理器组和输出层处理组,对应的各层的多个单元(节点)可以描述为处理器单元(节点)。
在简化的神经网络模型中,也可以省略中间层(隐含层)。
基于此,作为一般性的描述,在本发明的技术方案中,所述第一深度学习神经网络处理器包括第一输入层、第一隐含层和第一输出层;
所述第一输入层包含N个节点,所述隐含层包含M个节点,所述第一输出层包含P个节点;
所述第一深度学习神经网络处理器包含多个处理器分支,每个所述处理器分支由第一节点、第二节点和第三节点构成;
所述第一节点为所述N个节点之一,所述第二节点为所述M个节点之一,所述第三节点为所述P个节点之一;所述M、N、P为大于1的正整数。
当所述处理器分支的所述第一节点包含输入数据并且所述第三节点包含输出数据时,所述处理器分支为激活分支。
相对应的,在本发明中,所述第二深度学习神经网络处理器包括第二输入层和第二输出层;所述第二输入层包含x个第三节点,所述第二输出层包含y个第四节点;所述x/y为大于1的正整数。
所述第二深度学习神经网络处理器包含多个处理器分支,每个所述处理器分支包含至少一个第四节点;
当所述处理器分支中的所述第四节点包含数据输出时,所述处理器分支为激活分支;
将所述激活分支包含的第四节点对应的处理器进程、以及与所述第四节点连接的第三节点对应的处理器进程运行于所述第二宿主机上的同一个容器中。
基于上述系统,本发明还可以实现为一种基于深度学习的虚拟资源调度方法,所述方法应用于包含第一宿主机和第二宿主机的服务器集群系统,在所述第一宿主机上运行有第一深度学习神经网络处理器,在所述第二宿主机上运行有第二深度学习神经网络处理器,
基于此,所述方法包括如下步骤:
S600:在所述第一宿主机上创建第一数量的第一容器,在所述第二宿主机上创建第二数量的第二容器;
S610:基于所述第一深度学习神经网络处理器在运行过程中的第一激活分支数,调节所述第一容器的数量,基于所述第二深度学习神经网络处理器在运行过程中的第二激活分支数,调节所述第二容器的数量;
其中,所述第一数量大于所述第一深度学习神经网络处理器的输入层的节点数量,所述第二数量小于所述第二深度学习神经网络处理器的输出层的节点数量。
所述第二深度学习神经网络处理器包含输入层和输出层,所述输入层包含x个节点,所述输出层包含y个节点,每个节点对应一个处理器进程。
在所述步骤S600之后,在所述步骤S610之前,所述方法还包括如下步骤:
S601:获取所述第一深度学习神经网络处理器的输入层中存在数据输入的第一节点数目,并获取所述第一深度学习神经网络处理器的输出层中存在数据输出的第三节点数目,基于所述第一节点数目和所述第三节点数目,确定所述第一激活分支数;
S602:获取所述第二深度学习神经网络处理器的输出层存在数据输出的第四节点数目,基于所述第四节点数目,确定所述第二激活分支数。
本发明的上述方法可以通过包含处理器和存储器的终端设备,尤其是图像处理终端设备或者语音处理终端设备,包括移动终端、桌面终端、服务器以及服务器集群等,通过程序指令自动化的执行,因此,在本发明的第三个方面,还提供一种计算机可读存储介质,其上存储有计算机程序指令;通过包含处理器和存储器的图像终端处理设备或者语音处理终端设备,执行所述程序指令,用于实现第二个方面所述方法的全部或者部分步骤。
本发明的技术方案,能够基于在宿主机上运行的神经网络的实际激活支路数量,建立对应数量的容器,从而动态的调节容器数量,实现虚拟资源的动态调度;
基于本申请的方案,同一条激活支路上完全独立运行于同一个容器中,使得资源利用率最大的同时,避免了不同支路的干扰以及资源冗余。
本发明的进一步优点将结合说明书附图在具体实施例部分进一步详细体现。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的一种基于深度学习的虚拟资源调度系统的整体架构图
图2是图1所述系统中的第一深度学习神经网络处理器的结构示意图
图3是图1所述系统中的第二深度学习神经网络处理器的结构示意图
图4是图1所述系统中不同宿主机的每一个独立容器空间的示意图
图5是基于图1所述系统执行的虚拟资源调度方法的主体流程图
图6是图5所述方法的进一步优选实施例
具体实施方式
下面,结合附图以及具体实施方式,对发明做出进一步的描述。
参照图1,是本发明一个实施例的一种基于深度学习的虚拟资源调度系统的整体架构图。
在图1中,所述调度系统包括第一宿主机和第二宿主机,所述第一宿主机配置有第一深度学习神经网络处理器,在所述第二宿主机上配置有第二深度学习神经网络处理器。
指出的是,在图1中的实施例中,所述第一宿主机和所述第二宿主机通过数据管道(data pipeline)连接通信。
数据管道(data-pipeline)技术原本是用于不同数据库(数据源)之间的数据转移的技术,例如数据备份、数据还原等,采用数据管道技术,可以避免进程阻塞或者使用第三方代理进行数据传输。数据管道即是将不同进程连接起来用于数据传输。
单向数据管道管道则是意味着从一个进程到另一个进程之间的单向数据传输。
在本实施例中,进一步采用单向数据管道,更具体的,所述单向数据管道从所述第一宿主机指向所述第二宿主机,使得第一宿主机的容器数据,单向传输给所述第二宿主机的容器,从而使得所述第一深度学习神经网络处理器的激活支路与所述第一深度学习神经网络处理器的激活支路建立单向的直接的数据通道,提高数据处理效率的同时,进一步节省虚拟资源(避免资源冗余)。
在图1基础上,结合图2-图3,进一步介绍所述第一深度学习神经网络处理器和所述第二深度学习神经网络处理器的具体结构和原理。
在此之前,做一些相关原理的补充性介绍。
在机器学习和认知科学领域,人工神经网络(artificial neural network,缩写ANN),简称神经网络(neural network,缩写NN)或类神经网络,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统,可实现深度自学习。
现代神经网络是一种非线性统计性数据建模工具。典型的神经网络具有以下三个部分:
结构(Architecture)结构指定了网络中的变量和它们的拓扑关系。例如,神经网络中的变量可以是神经元连接的权重(weights)和神经元的激励值(activities of theneurons)。
激励函数(Activity Rule)大部分神经网络模型具有一个短时间尺度的动力学规则,来定义神经元如何根据其他神经元的活动来改变自己的激励值。一般激励函数依赖于网络中的权重(即该网络的参数)。
学习规则(Learning Rule)学习规则指定了网络中的权重如何随着时间推进而调整。这一般被看做是一种长时间尺度的动力学规则。一般情况下,学习规则依赖于神经元的激励值。它也可能依赖于监督者提供的目标值和当前权重的值。
以三层的神经网络为例,输入层有d个节点,隐层有q个节点,输出层有l个节点。除了输入层,每一层的节点都包含一个非线性变换,可以对应一个处理器节点(单元)。
在后续的图2-图3中,设计一个神经网络时,输入层与输出层的节点数往往是固定的,中间层则可以自由指定;
图2-图3中,神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别;
结构图里的关键不是圆圈(代表“神经元”、处理器节点),而是连接线(代表“神经元”之间的连接)。每个连接线对应一个不同的权重(其值称为权值),这是需要训练得到的。
以图2为例,所述第一深度学习神经网络处理器的第一输入层包括I1、I2、I3三个处理器节点,第一隐含层包括M1、M2、M3三个处理器节点,第一输出层包括P1、P2、P3三个处理器节点;
以图3为例,所述第二深度学习神经网络处理器的第二输入层包括i1、i2、两个处理器节点,第二输出层包括p1、p2、p3、p4四个处理器节点。
在初始状态下,在所述第一宿主机上运行第一数量的容器,在所述第二宿主机上运行第二数量的容器,
所述第一深度学习神经网络处理器的所述第一输入层、第一隐含层和第一输出层运行于所述第一宿主机上的同一个容器中;
所述第二深度学习神经网络处理器的所述第二输入层和第二输出层运行于所述第二宿主机上的同一个容器中。
其中,所述第一数量大于所述第一深度学习神经网络处理器的输入层的节点数量,所述第二数量小于所述第二深度学习神经网络处理器的输出层的节点数量。
接下来,随着数据处理的进行,判断激活分支的数量,从而调节所述第一数量和所述第二数量。
具体的,以所述第一输入层包含N个节点,所述隐含层包含M个节点,所述第一输出层包含P个节点为例;
所述第一深度学习神经网络处理器包含多个处理器分支,每个所述处理器分支由第一节点、第二节点和第三节点构成;
所述第一节点为所述N个节点之一,所述第二节点为所述M个节点之一,所述第三节点为所述P个节点之一;
当所述处理器分支的所述第一节点包含输入数据并且所述第三节点包含输出数据时,所述处理器分支为激活分支。
以图2为例,其中,I3包含输入数据,P3包含输出数据,因此,至少I3-M1-P3所在的处理器分支构成激活分支;
同样的,所述第二深度学习神经网络处理器包含多个处理器分支,
假设所述第二深度学习神经网络处理器,所述第二输入层包含x个第三节点,所述第二输出层包含y个第四节点;
每个所述处理器分支包含至少一个第四节点;
当所述处理器分支中的所述第四节点包含数据输出时,所述处理器分支为激活分支。
以图3为例,p4包含数据输出,因此,至少i2-p4构成激活分支。
基于所述第一深度学习神经网络处理器的所述第一输入层的第一激活分支量,确定所述第一数量的值,基于所述第二深度学习神经网络处理器的所述第二输出层的第二激活分支量,确定所述第二数量的值。
并且,参见图4,将构成所述激活分支的多个节点对应的处理器进程(I3-M1-P3)运行于所述第一宿主机上的同一个容器中;将所述激活分支包含的第四节点对应的处理器进程、以及与所述第四节点连接的第三节点对应的处理器进程(i2-p4)运行于所述第二宿主机上的同一个容器中。
前面已经指出,所述第一宿主机和所述第二宿主机通过数据管道(datapipeline)连接通信。
因此,在本发明的实施例中,将构成所述激活分支的多个节点对应的处理器进程(I3-M1-P3),通过单向数据管道连接至所述第四节点对应的处理器进程、以及与所述第四节点连接的第三节点对应的处理器进程(i2-p4)构成的激活分支,进一步降低资源消耗。
接下来参见图5-图6。
图5中,示出一种基于深度学习的虚拟资源调度方法,所述方法应用于包含第一宿主机和第二宿主机的服务器集群系统,在所述第一宿主机上运行有第一深度学习神经网络处理器,在所述第二宿主机上运行有第二深度学习神经网络处理器,
所述方法包括如下步骤:
S600:在所述第一宿主机上创建第一数量的第一容器,在所述第二宿主机上创建第二数量的第二容器;
S610:基于所述第一深度学习神经网络处理器在运行过程中的第一激活分支数,调节所述第一容器的数量,基于所述第二深度学习神经网络处理器在运行过程中的第二激活分支数,调节所述第二容器的数量;
其中,所述第一数量大于所述第一深度学习神经网络处理器的输入层的节点数量,所述第二数量小于所述第二深度学习神经网络处理器的输出层的节点数量。
在图5基础上,进一步参见图6。
在所述步骤S600之后,在所述步骤S610之前,所述方法还包括如下步骤:
S601:获取所述第一深度学习神经网络处理器的输入层中存在数据输入的第一节点数目,并获取所述第一深度学习神经网络处理器的输出层中存在数据输出的第三节点数目,基于所述第一节点数目和所述第三节点数目,确定所述第一激活分支数;
S602:获取所述第二深度学习神经网络处理器的输出层存在数据输出的第四节点数目,基于所述第四节点数目,确定所述第二激活分支数。
作为进一步的优选,所述步骤S610进一步包括:
若所述第一数量大于所述第一激活分支数,则释放部分在所述第一宿主机上创建的第一容器;
若所述第二数量小于所述第二激活分支数,则增加在所述第二宿主机上创建的第二容器的数量。
所述第一深度学习神经网络处理器的每个所述激活分支中包含的节点对应的处理器进程运行于所述第一宿主机上的同一个容器中;
所述第二深度学习神经网络处理器的每个所述激活分支中包含的节点对应的处理器进程运行于所述第二宿主机上的同一个容器中。
本发明的技术方案,能够基于在宿主机上运行的神经网络的实际激活支路数量,建立对应数量的容器,从而动态的调节容器数量,实现虚拟资源的动态调度;并且,同一条激活支路上完全独立运行于同一个容器中,而不同激活支路之间采用数据管道连接,使得资源利用率最大的同时,避免了不同支路的干扰。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
- 基于深度学习的虚拟资源调度系统与方法
- 一种虚拟化资源调度的方法及虚拟化资源调度系统