KDD22收录论文 | 蚂蚁AI弹性容量:基于强化学习的预测伸缩算法简介

2022/06/22 17:12
阅读数 1.5K

导言

数据中心的应用资源合理化利用是业界非常难的技术命题,蚂蚁集团应用数量多,资源规模大,但在线均值利用率长期低于10%,容量弹性能力的建设提升资源利用率将会有非常可观的成本收益;随着公司业务规模越来越庞大,业务种类繁多,容量的故障也在增加,容量类的运维操作在变更中占比增大,稳定性诉求以及效率诉求激增,因此我们期望建设一套智能、极速、完全托管的容量技术。定时容量弹性伸缩及基于流量准实时预测容量弹性伸缩的解决方案由此提出。


过去两年时间里,充分结合大数据、ML、K8S、ServiceMesh和稳定性技术,蚂蚁技术风险部容量团队、数据团队、风险智能团队和认知计算团队,在智能化容量运维领域突破创新,建设了适合蚂蚁的全局在线利用率无风险精准管理和全局容量异常自适应体系。其中,基于流量准实时预测的容量弹性伸缩,在流量发生变化之前自动计算容量,流量预测&决策算法的部分工作总结成一篇论文 A Meta Reinforcement Learning Framework for Predictive Autoscaling in the Cloud,已被ACM SIGKDD(国际数据挖掘与知识发现大会,KDD)2022 收录。相比于现行的SOTA方法,该方法将流量预测以及伸缩决策算法融为一体,以全程可微的方式使用强化学习统筹规划资源进行容量弹性伸缩,取得了良好的效果。

本文作者:薛思乔、师晓明、廖聪、朱诗逸、胡韵


简介


蚂蚁集团于4月21日加入了低碳专利承诺并开放了7件“绿色计算”相关的专利。“绿色计算”的关键在于不影响用户体验的情况下尽量节省资源减少能耗。具体的来说,云原生系统在容器中部署微服务应用或者数据库租户实例等。为了支持大量的用户请求,通常一个微服务/数据库租户要部署多个的容器实例。云原生容量管理的核心问题就是根据需求确定需要部署容器实例的数目。在用户请求超量的时候,要多部署一些实例以应对可能的风险;在用户请求相对较少的时候,可以缩减一些部署实例以节省容量成本。


因此,蚂蚁智能容量管家平台利用机器学习技术在流量发生变化之前自动扩展计算容量,从而提高资源利用率,节省资源开销。为此,我们提出了一种将流量预测以及伸缩决策算法融为一体,以强化学习统筹规划资源进行容量弹性伸缩的方法,该方法总结成一篇论文,被 SIGKDD 2022 接收。


SIGKDD 会议始于 1989 年,是数据挖掘领域历史最悠久、规模最大的国际顶级学术会议,也是首个引入大数据、数据科学、预测分析、众包等概念的会议。整体统计来看,KDD 2022 的总体接收率为 18.3%(2448 篇投稿,449 篇接收),与往年水平保持一致。


该篇论文的详细信息如下:


流量预测决策算法的挑战


在项目初期,我们将流量预测和伸缩决策分成上下游两个任务分别解决,均取得了预期的成果。但是这样的做法存在两个可优化点,第一是流量预测和伸缩决策的的模型在一定假设下独立训练,有不同的损失函数,但是整体未必是最佳模型, 第二是从流量预测到伸缩决策整体链路过长,模型调试和工程部署都缺乏稳定性。因此,我们提出了基于强化学习的流量预测与伸缩决策的算法解决方案,实现弹性容量智能化升级:


▪️全流程由流量预测、CPU利用率预估和伸缩决策三个基于深度学习的子模块串联而成,构建一套端到端全程可微的智能弹性伸缩算法方案,保证了模型训练的一致收敛性和工程部署的稳定性。


▪️决策模块基于强化学习原理实现,各个子模块设计简练、针对性强,预训练后以线上服务的方式部署,模型更加稳定。


解决方案


整体的算法方案由上图所示,输出在线应用的历史流量数据,经过流量预测、CPU利用率预估和伸缩决策三个基于深度学习的子模块串联,最终输出弹性伸缩的机器数。


流量预测模块(Workload Forecaster)


流量预测模块使用的是基于 Attentional encoder-decoder 的轻量级模型,该模型的输入是历史流量,输出是未来若干步的预测流量。该模型在隐空间中对时序的周期性进行分解、编码再利用 attention 机制进行解码,最终输出预测值。其优势在于显式地进行周期性分解与提取、attention结构的使用提升多步预测性能等。基于该模型的多个版本在蚂蚁的各项业务中广泛使用,另外其卷积版本在阿里时序联赛中也取得了优异的成绩。


CPU利用率预估模块(CPU Utilization Meta Predictor)


CPU利用率预估的目的是建立从应用流量到CPU利用率的映射。经过数据分析,如下图所示,我们发现,每个应用的流量(多维度)到CPU利用率的映射关系是有较大差别的。考虑到要覆盖的应用数量众多(超过3000个),每个在线应用建立一个模型成本过高,因此我们探寻是否可以使用meta-learning 的方案,即使用一个统一的模型进行建模。



为了验证可行性我们选取200个应用,将其流量特征重要性归一化后,使用tsne将特征空间压缩至二维的空间。其分布如下。可以看出在隐空间有明显的cluster, 故我们认为可以考虑meta-learning的方法统一建模。



最终我们选取 Deepmind 的 Attentive Neural Process 模型,其标准实现可以参考Github。输入由两部分组成:context 配对输入(xC,yC) 和 目标输入 xT。其中xC为历史窗口的流量特征,yC为对应的CPU利用率,xT则为预测窗口的流量特征,来自于流量预测模块的输出。通过优化ELBO,最终该模块输出未来一段时间内的预估的CPU利用率yT,另外通过encoder 我们可以的到一个task embedding z。这个 z 某种意义上也是对应着我们上图中的cluster。尽管有几千个在线应用,但是他们的流量特征可以被压缩到低维的 hidden embedding中。表面上看起来不相关的应用, 由于其性质相似,其在隐空间中其距离也是相近的。这个task embedding z 在下游模块也会输入给 agent,这相当于告诉agent这个应用属于哪一类任务。


伸缩决策模块 (Scaling Decider)


此处我们使用 Meta model-based RL 技术建立的决策模型。


▪️为什么使用 RL:线上应用容量伸缩的场景复杂,变化非常多,强化学习摆脱了人的限制,可以在仿真环境中,像人一样试错,在错误中学习和成长。随着底层技术升级,物理机环境复杂,在线业务随着业务活动玩法越来越多,我们已经无法区分采集到的指标是受什么因素干扰影响的,同时,仿真环境、性能实验室的搭建,也驱动了我们使用强化学习,“利用环境给予的reward修正决策模型”。


▪️为什么使用 Model-based RL:model-free RL的方式需要大量数据完成训练,学习效率较低。由于我们能够对线上情况进行精确建模,我们可以使用前置模型的先验信息进一步加速模型的收敛,在有限数据的条件下达到更高的性能。在构建整个系统的过程中,我们保证系统全程可微(fully differentiable),使用系统导数信息加速后续决策模型收敛,使得整个策略的训练过程更加具有效率和稳定性。


▪️Meta 体现在哪里:在上一步中我们使用meta learning对CPU利用率统一建模。随后我们可以将这个meta model 嵌入到Bellman方程中。Agent只和学习到的 dynamic model 交互,通过stochastic value gradient学习一个统一的策略为所有应用分配机器。



在这样的背景下,我们把弹性伸缩问题定义为一个Markov Decision Process(MDP):


▪️State s:流量预测模块输出的预测流量,CPU利用率预估模块输出的 z 以及CPU使用率。


▪️Reward r (s):定义为当前cpu使用率和目标使用率之间的差值,加上一个惩罚项,避免在一定周期内机器数调整太频繁。


▪️Action:机器缩放比例。


▪️Transition P(s′∣s,a)。Transition的功能是,当我们做出action后(缩放机器),系统指标和CPU利用率会从 s 变化到 s′ 。其中各系统指标和cpu使用率之间的关系得到 cpu_util = f(各指标)。由于缺乏模拟环境,我们通过历史数据和meta learning 学习出一个模拟环境Transition,用于和强化学习中的agent交互。


关于MDP的详细解释以及相关推导可以见论文中的Section 4.3.1


整个方案的算法流程如下:


离线实验以及线上成果



在线上的实验中,机器数决策的效果符合预期,如下图所示,某个应用的CPU利用率在算法调控下在工作时间保持在25%左右。(波谷对应凌晨时分,原本利用率就很低,由于调整机器数存在上限,故调整后利用率还是很低)。



在一系列线上案例中,基于该套方案思想的分钟级资源弹性算法能带来明显的资源利用率提升。长远上我们会不断的追求,真正意义上的让经典在线应用拥有Serverless的体验。我们期望建设的是急速,完全托管,智能的Serverless架构。应用实现原生化,提供高抽象编程界面,打通研发运维一体化的发布运维体验,轻松面对流量激增,完善的研发运维配套体验。



参考文献
[1] ATTENTIVE NEURAL PROCESSES. Kim et al. ICLR 2019
[2]Playing Atari with Deep Reinforcement Learning. Minh et al. Nips deep learning workshop 2013.
[3] Continuous control with deep reinforcement learning. Lillicrap et al. ICLR 2016
[4] Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor Haarnoja et al. ICML 2018
[5]https://en.wikipedia.org/wiki/Bellman_equation
[6] Learning Continuous Control Policies by Stochastic Value Gradients. Heess et al. NIPS 2015
[7] Model Embedding Model-Based Reinforcement Learning. Tan et al.https://arxiv.org/abs/2006.09234
[8] Dream to Control: Learning Behaviors by Latent Imagination. Hafner et al. ICLR2020


本文分享自微信公众号 - 支付宝技术(Ant-Techfin)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部