一种可靠的基于深度强化学习的云容器集群资源调度方法及装置

文档序号:30413454发布日期:2022-06-15 10:23阅读:203来源:国知局
一种可靠的基于深度强化学习的云容器集群资源调度方法及装置

1.本发明属于资源调度技术领域,尤其涉及一种可靠的基于深度强化学习的云容器集群资源调度方法及装置。


背景技术:

2.随着云服务的不断普及,很多公司开始使用云服务来减少在服务器上使用和维护的支出费用。现有的云服务付费模式主要为两种:包年包月模式与按量付费模式。对于公司来说,需要一直稳定运行不间断的服务,使用包年包月模式较为划算,而对于突发需求则采用按量付费模式较为划算。如何充分合理使用现有云服务器资源,则可以尽可能地减少在云服务上的庞大支出。
3.现有的云集群资源调度一般使用启发式算法或者根据集群负载情况和特征采取一些自定义规则。例如开源的kubernetes系统,它的调度大致分为两个阶段:预选与优选。在预选阶段可以直接通过调度目标硬性调度条件直接将节点过滤掉(例如:该目标的某个端口是否被占用)。然后到了优选阶段,在这个阶段它将会把通过预选的所有节点使用内置的启发式算法(例如:该节点的资源使用平衡度)进行计算,得到每个节点对应的分数,然后选择最高分的节点,将调度目标调度到该节点上,结束该调度目标的调度。
4.但是采取以启发式算法和人工为主的调度方法的主要问题在于:容易陷入局部最优解,导致资源碎片过多,无法充分利用系统资源。同时无法穷尽集群可能会出现的状况,针对于不同需求,需要消耗大量的时间与支出。
5.于是,出现了利用强化学习为集群调度的方式,这种方式对于使用人员来说只需要定义好自己所期望的集群状态的状态-动作表、就可以了,对于每次调度,强化学习将会给这次调度基于该规则进行打分,然后不断调整自身参数,最终达到使用人员想要的目标。
6.但是集群的条件是很复杂的,不同的集群指标都有很多处理方式,而对于强化学习来说,使用人员需要完整地定义状态-动作表是不现实的,所以出现了深度强化学习。该深度强化学习使用神经网络代替了状态-动作表,极大的简化了状态-动作表的设置。
7.但是相比启发式算法来说,深度强化学习不够稳定:首先是数据的收集过程不可控,它在学习的过程中很可能绝大部分时间都在收集一些无用而且重复的数据。其次是很难基于当前的深度强化学习模型在状态到达类似状态时来重复测试该模型在此状态下的鲁棒性。最后,对于深度强化学习来说,它的探索过程还是十分原始的,探索过程本质上还是纯随机,即它在开始时会采取各种各样的动作,只有在多次尝试错误时才会避免该错误。不够稳定的结果将会直接有可能集群的宕机,给公司带来重大损失。


技术实现要素:

8.本发明目的在于针对现有技术的不足,提出一种可靠的基于深度强化学习的云容器集群资源调度方法及装置,同时还对工程化过程中产生的一些问题进行优化。
9.本发明的目的是通过以下技术方案来实现的:本发明提供了一种可靠的基于深度强化学习的云容器集群资源调度方法,该方法包括以下步骤:
10.(1)确定云容器集群的稳定性目标;
11.(2)待调度目标声明需要的最少资源需求和最大资源需求,并被放置待调度任务队列中;
12.(3)待调度目标在执行调度时,首先将调度目标从队列中取出,并过滤掉不符合该调度目标最少资源需求的集群节点;
13.(4)实时采集集群数据并查询有无用户绑定的用户画像,针对待调度目标,使用深度强化学习方法进行决策选择集群中的调度的目标节点;
14.(5)检测步骤(4)得到的目标节点是否可用,若可用,则直接调度至对应的节点上;若不可用,则采取保护性启发式算法做出新决策,调度至对应的节点上。
15.进一步地,步骤(1)中,通过云容器整个集群节点的平均利用率、节点之间平均利用率的差距、节点内部之间不同类型资源利用率的差距、超过目标利用率的差距来确定集群的稳定程度,平均利用率低于目标利用率时集群稳定,高于目标利用率时集群不稳定,集群稳定时,通过节点之间平均利用率的差距和节点内部之间不同类型资源利用率的差距判断,差距绝对值越小越稳定,不稳定的程度基于超过目标利用率的差距值呈指数相关增长。
16.进一步地,步骤(4)中,若集群数据无法实时采集,则调用利用历史集群数据训练的时间序列模型预测获得集群数据。
17.进一步地,步骤(4)中,所述用户绑定的用户画像为调度目标具有相关的用户过去使用记录。
18.进一步地,步骤(5)中,所述保护性启发式算法能够预先设置节点的目标利用率,然后当前节点的利用率低于该目标利用率时,越靠近该目标利用率,该节点的优先程度越高;当超过该目标利用率时,越远离目标利用率,节点优先程度越低。
19.进一步地,步骤(5)中,在调度目标调度成功时,根据调度目标声明的最大资源需求,扣除在对应节点上的剩余资源声明。
20.进一步地,步骤(5)中,在调度目标进行调度时,通过漏桶算法进行流量控制并通过集群负载状况对集群进行保护。
21.进一步地,对集群进行保护是基于在一段时间范围限制调度次数和该段时间内的集群波动大小程度上进行的保护。
22.另一方面,本发明还提供了一种实现所述的可靠的基于深度强化学习的云容器集群资源调度方法的调度装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,用于实现上述一种可靠的基于深度强化学习的云容器集群资源调度方法。
23.与现有技术相比,本发明的优势在于,本发明使用简单且有效的方法定义计算机集群稳定目标,提供声明式定义资源需求,采用时间序列等模型预测非采集时间段数据,并且支持节点的添加/减少,同时还对决策的有效性进行检验;本发明能在深度神经网络未受充足训练甚至未训练时直接投入使用而不会产生恶劣后果。也意味着本发明可以在正常过程中,添加和删除节点而不需要中途停止并改动模型的参数。最重要的是为云服务器集群提供了兜底的保护措施,能够让深度强化学习达到全局最优解。
附图说明
24.图1为本发明一种可靠的基于深度强化学习的云容器集群资源调度方法的流程图;
25.图2为采用深度强化学习调度过程图。
26.图3是本发明一种可靠的基于深度强化学习的云容器集群资源调度装置的结构图。
具体实施方式
27.以下结合附图对本发明具体实施方式作进一步详细说明。
28.如图1所示,本发明提供了一种可靠的基于深度强化学习的云容器集群资源调度方法,具体流程如下:
29.(1)需要先确定云容器集群的稳定性目标,作为强化学习中的奖励函数,总体的目标是让集群中的节点的平均利用率优先到达目标利用率,保证节点上的资源分配相对均衡,同时保证不同节点之间的资源平均利用率相对均衡。这样可以保证集群拥有一定余量,在遇到突发情况下,不会导致节点因为超出负载而失效。同时这些目标被用在后面的奖惩之中,并设置节点中高负载分界线、节点中低负载分界线,同时增加了对超过目标利用率的情况进行惩罚。得到单次奖惩为:
[0030][0031]
其中,p为云容器集群的目标利用率,u为集群平均利用率,dr为同一节点不同资源之间的差值,dn为不同节点资源平均值的差值,op为超过目标利用率阈值的差值,fp为基于低负载节点低于节点中低负载分界线的差值;α,β,θ,γ,κ均为参数,和为1,且均大于0,小于1。
[0032]
根据需求的侧重方面,可以对应提高相应参数的权重;同时也可以添加任何需要的指标和参数,只需要维持参数和为1即可;最后在对分数进行正则化。
[0033]
(2)对于一个调度目标来说,它需要首先声明自己所需要的资源需求(包括cpu、内存、硬盘、网络带宽、gpu等等),以确保云容器集群能够为其安排足够的资源,而不会到在该调度目标运行过程中发现资源不满足而从影响自身和其他任务的运行。但是对于每次调度过程来说其实是个串行过程,每个调度目标独享对当前剩余资源的申请过程,所以这里需要一个调度队列。但是这个队列还需要处理暂时不能调度的调度目标,这些调度目标可能因为没有通过预先检查调度目标的资源需求或者因为限流或者集群不安全等理由暂时无法调度,同时保持这些调度目标的优先级,防止这些调度目标发生饥饿。所以该调度队列是一个拥有多种优先级的优先队列。
[0034]
(3)从队列中得到一个新的调度目标,预先检查调度目标的资源需求,匹配集群中满足这个调度目标运行的目标节点,防止在运行时申请资源,发现资源不足发生异常导致异常退出的问题。调度目标只需要粗略的描述自己所需要的资源最低需求和最高资源需求即可,因为对于一个尚未运行的任务来说,非常难以准确的评估该调度目标需要的资源需求,即便能够准确算出来,也是相当低效的。所以只需要采取一个较为粗略的范围即可。当然实际运行的资源消耗在这个范围中,其中实际资源消耗到最高资源需求的差距可以作为
云容器集群稳定的资源申请空间的缓冲。如果调度目标没有找到合适的目标节点,将会继续回到调度队列中。
[0035]
(4)这一步主要需要获得状态信息,用来进行深度强化学习。一共分为三类状态:调度目标资源需求、集群机器状态、用户画像信息。集群机器状态数据是通过数据采集工具定期从集群内的每个节点获得节点数据,并将这些数据维护在一个窗口队列中,对外提供总的数据统计信息,保持其高可用的属性。但这里会遇到一个问题,也就是这个数据是定期从每个节点中获取,那就意味着每次有调度请求时,并不能每时每刻获得有效的集群数据信息,很有可能这个节点获得集群数据是上个周期的集群数据信息。这会导致对后面的模型预测时的不准确,因为在这个分布式集群中,可能会出各种各样的异常,较为常见的就是网络异常,比如网络拥塞等等。根据短板效应,数据采集工具完成一次数据采集取决于最后一个节点返回的时长,如果这个周期过于短,很有可能会造成数据采集不能在一个周期内完成。同时数据采集本身就是一个十分消耗性能的一件事情,太短周期的数据采集会严重影响集群内部其他任务的运行。所以数据采集工具只能以一段合理的周期进行数据采集。实际上,并不能为每次调度提供足够的集群资源数据,但是可以采取使用时间序列预测的方法,可以利用集群采集的历史数据,为每次数据采集做增量预测。在这里时间序列模型主要用来处理连续的数据,主要使用的是lstm模型,通过历史数据训练之后,输入为t时的集群资源数据,输出是t+1时集群资源数据。该模型在预测时,它的预测会有滞后性,也就是说当模型预测至t时,它实际表示的是t-1时的预测值,它实际上是由于时间序列本身存在自相关性,可以采用差分运算,也就是将当前时刻与上一时刻的差值作为回归目标,使预测结果尽量准确;
[0036]
对于低维离散的数据可以采用传统机器学习方法,例如决策树。所述用户画像数据是为了通过每个用户不同的使用情况,更加精准的控制调度目标调度的偏好性,更好的利用集群资源,但是这部分数据需要提前做离线训练。
[0037]
可选地,当集群的平均利用率持续高于或等于目标利用率一段时间且集群节点不变化的时候,可以采取增加云服务进行扩容。
[0038]
(5)对于深度强化学习过程,其中的深度神经网络部分主要分为三层:输入层、隐藏层和输出层。输入层主要包含节点个数n*资源类型个数s,再连接上调度目标的资源需求1*资源类型个数s,形成一个(n+1)*s的矩阵,之后将这个矩阵flatten成一维矩阵传入输入层之中。所有的调度目标资源类型需要在一开始确定好,深度强化学习模型开始训练之后,输入参数和输出就不能够更改了,否则只能重新训练。隐藏层,可以针对需求计算精度进行添加或者减少,在本实例中仅设置了两层隐藏层,当模型拟合能力较弱时,可以采取添加隐藏层的方法,但是太多的隐藏层可能会造成过拟合的问题。输出层是一个的1*(n+1)全连接层,其中n代表n个节点,其中1代表不调度的决策。
[0039]
深度强化学习过程中,集群节点变化并不会特别频繁,在某段时间内的预测范围时固定的,而强化学习本身是一个随即探索的过程,当模型训练到满足需求是即可停止训练,模型本身占据主导。在本实施例中使用epsilon-greedy算法,epsilon是该强化学习的随机程度,在这个算法下它会随着训练次数而不断趋于0,这将会使模型不断输出最优策略,而减少随机动作行为。当模型开始训练之后,它的输入和输出维度是不能够更改的,集群中难免会存在节点的添加/减少,如果更改了则需要重新训练,这就意味着当前模型并不
能适应集群内部节点的增加/减少。
[0040]
如图2所示,其中在深度神经网络中的输出层的带有剖面线节点表示为为该节点无效,虚线表示的节点为新增节点。针对集群内部节点的增加时,可以考虑预先设置节点个数n稍大于实际在集群中的节点个数n,因此反映到模型上,对应的输入层和输出层的维度就会增大,可以认为这些空位置的节点是暂时关机的,可以将它的资源全部设置为不可用。但是这个n不能过大,会导致模型的效率降低。维持一个比率a使得,n/n=a》c,c为常数,取值为0.6~0.9。当有新节点加入时(即暂时关机的某个节点打开,变为可用节点),需要重新设置模型的epsilon,提高模型的探索欲望,减少模型预测,让模型能够探索到该节点,把这个节点纳入预测范围,因此输入节点个数可以允许某种程度的增加。
[0041]
所有的能正常的由模型产生的决策信息都将会利用步骤(1)的奖惩算法计算得到这次调度决策的奖惩分数并反馈给模型,模型将会通过奖惩分数调整模型参数。如果仅仅这样深度神经网络收敛很慢,需要非常多的数据,如果只通过每一次调度的数据,效率很低。因此本实施例的深度强化学习过程引入了一个固定大小的记忆缓存,它会把之前的调度经验存下来,在训练时重复利用。使用这个方法可以打消采样数据相关性,同时让数据分布变得更稳定。同时深度强化学习模型采用目标网络(target-network)算法,原本使用深度神经网络产生的值容易发生震荡,呈现出不稳定的学习行为,采用这个方法会使学习更加稳定。这个模型在训练时,周期的保存模型参数,防止服务崩溃。
[0042]
调度目标在调度成功之后,运行到正常运行时也需要一段时间,也就意味着当调度成功之后深度强化学习模型并不能立刻收到反馈,所以对于这种情况,可以采取延迟反馈奖励机制,规定好延迟最长时间间隔,即调度目标从调度成功开始到调度目标正常运行时的最长时间。在这段延迟之后再进行奖惩反馈,但是这样会存在一个问题:当一个深度强化学习模型在等待奖励反馈的时候,它不能一直等待而不接受其他的调度请求,这就意味着当强化学习模型在等待上一次动作奖励反馈的时候,接受其他调度请求,导致得到上一次动作的奖惩反馈时,这个反馈将会是不同调度动作在调度完成时不同阶段中状态叠加的结果,也就是说得到的动作奖惩反馈并不是对应某一个动作,而是对应许多动作。对于不同动作a1,a2,a3,a4

an的奖惩记为r1,r2,r3,r4

rn。对于这个问题,可以知道r1,r2,r3

与a1,a2,a3

具有某种多对多关系。这部分过程可以在深度强化学习过程中得到拟合,是本发明方法的优势所在
[0043]
(6)在通过深度强化学习之后,将会得到一个目标节点,但是该目标节点是否有效还需要进一步检验(存在有一些节点失效,或者节点不稳定不适合调度),所以该节点需要做二次确认。该步骤需要建立一个节点信息表格,每次得到一个目标节点后,均把对应节点信息添加进表格中,定期更新节点信息,所以当新的调度决策执行的时候,可以快速的查找该表格进行节点选择,如果该节点有效,可以直接进行调度。
[0044]
若通过深度强化学习得到的目标节点无效,则有两种情况,一是该节点宕机或者发生了某些异常;二是该节点为预置空位,是为了应对新增节点而留的空位。首先会给神经网络反馈一个固定的奖惩分数,然后因为该节点不可用,所以需要选择一个新的合适的节点,这时候将会采用一种保护性的启发式算法,这种算法在满足调度目标声明好的最大资源需求范围内,通过一开始的集群稳定性控制指标来计算。它的总体思想是,通过定义目标集群中的每个节点利用率为x%,从而达到整体利用率达到x%,它会给所有的节点进行打
分,取出最高分做为调度目标。当节点的利用率低于目标利用率时,越靠近目标利用率时,该节点的分数越高;当节点的利用率高于目标利用率是,越远离目标利用率时,该节点的分数越低。
[0045]
对节点做二次确认时,可以通过直接访问该节点心跳接口或其他方式确认该节点的存活状况。若该节点失效,可以使用保护性的启发式算法,剔除该节点并继续这个流程直至成功。
[0046]
算法具体描述如下:
[0047]
1.得到当前节点的利用率,记为a,目标利用率记为x%;
[0048]
2.计算当前待调度目标的需求,记为b;
[0049]
3.计算如果该调度目标调度到该节点的利用率,记为u=a+b;
[0050]
4.如果u《=x%,返回u*(100-x)/x+x作为分数;
[0051]
5.如果x%《u《=100%,返回50*(100-u)/(100-x)作为分数
[0052]
6.如果u》100%,返回0作为分数。
[0053]
(7)该步骤主要做调度限流与云容器集群的稳定,调度限流,不仅是为了集群安全,也是为了模型安全,调度限流能够保护模型,步骤(5)中的奖惩可能会对应多个动作,同时模型不应该在等待上一个动作的奖惩反馈时而不接受其他的调度请求。这就在运行过程中可能突发一次出现大量调度请求,造成奖惩对应大量动作,非常不利于模型训练。该步骤中流量控制算法使用的是漏桶算法,保证了整体的调度速率。
[0054]
对于集群稳定来说,它起到为整个集群进行保护的思想:如果只基于目标利用率的平衡负载有时会有风险,因为没有考虑突发变化。所以考虑将节点的目标利用率(m)和标准差(v)一起计算,带入公式m+ita x v《=100%。ita表示不超过节点容量的使用置信度,假设实际使用遵循高斯分布并遵循68-96-99.5规则,一般取1、2、3。它可以保证当节点平均利用率在很低水平时,支持突发的节点调度请求;而当节点的平均利用处于很高的水平时,减少甚至不接受突发的节点调度请求。如果该节点不支持调度,则该调度目标进行重新调度。
[0055]
(8)将调度传给集群内的调度接口,由执行器进行调度。对于整个集群来说,模型参数和模型均会保存在集群中的分布式存储中,以保证集群的高可用性。
[0056]
与前述一种可靠的基于深度强化学习的云容器集群资源调度方法的实施例相对应,本发明还提供了一种可靠的基于深度强化学习的云容器集群资源调度装置的实施例。
[0057]
参见图3,本发明实施例提供的一种可靠的基于深度强化学习的云容器集群资源调度装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,用于实现上述实施例中的一种可靠的基于深度强化学习的云容器集群资源调度方法。
[0058]
本发明一种可靠的基于深度强化学习的云容器集群资源调度装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本发明一种可靠的基于深度强化学习的云容器集群资源调度
装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
[0059]
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0060]
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0061]
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的一种可靠的基于深度强化学习的云容器集群资源调度方法。
[0062]
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(smart media card,smc)、sd卡、闪存卡(flash card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
[0063]
上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1