设计与构建下一代的计算机系统:学习增强系统
编者按:我们生活中依赖的搜索、购物、聊天和新闻推荐等各种服务都离不开大型软件系统的支持,然而,随着用户的需求和场景增多,这些系统的复杂性和规模也在不断增加。如何利用机器学习和大数据来驱动复杂的系统设计和运维决策,成为了学术界和工业界共同思考的问题。针对这个问题提出的解决方案,被称为学习增强系统(Learning-augmented Systems)。最近几年,微软亚洲研究院通过名为 AutoSys 的研究项目,在探索系统化建构学习增强系统上取得了进展。
“The world runs on software” ——我们生活中依赖的各种服务都离不开大型软件系统。比如搜索、购物、聊天和新闻推荐服务等背后都是由超大规模的软件系统来提供服务的。随着用户的需求和场景增多,这些系统的复杂性和规模也在不断增加。大型软件系统的复杂度不仅仅体现在其巨大的代码量,更体现在背后成百上千的工程师不断地设计、开发及维护的工作量。
如何准确理解、设计以及演化复杂软件系统已成为现代计算机系统设计的一个核心问题。然而,在系统复杂度呈几何量级上升的今天,系统设计和运维问题无法依赖少数人的直觉和经验去解决。这就促使了学术界和工业界开始思考如何利用机器学习和大数据来驱动复杂的系统设计和运维决策,而这类系统被称为学习增强系统(Learning-augmented Systems)。最近几年,微软亚洲研究院通过名为 AutoSys 的研究项目,在探索系统化建构学习增强系统上取得了进展。
软件系统的设计和运维过去一直以来都依靠工程师的经验和试错。在系统的规模和复杂度较小时,工程师还可以经由大量的实验来评估系统的性能以及理解系统的行为。这些经验和实验不仅能帮助工程师优化系统,也能帮助他们设计未来的系统。
然而现代系统复杂性和规模快速提升带来的挑战,让学习增强系统在工业界迅速崛起。首先,人力的增长赶不上系统规模上升的速度。随着用户的需求和场景增加,现代系统的架构强调模块隔离来支持横纵向扩展(例如 docker 容器、Kubernetes、microservices 的相关技术)。这样大量的模块和大规模的部署需要更多的人来管理和优化系统。其次,人的理解力越发难以匹配系统复杂度的提升。这是因为,在模块化的系统设计理念下,现代系统里有大量模块,以及大量的运行选项和环境参数。这些映射出一个巨大的非线性搜索空间。对人工来说,理解复杂系统中各个模块的内部细节和模块之间的交互,并考虑是否已达到全局最优,是非常困难的。最后,现代系统普遍有完善的行为监测机制和精细的日志,加上近期机器学习的进步(例如深度学习和强化学习),大大提升了数据驱动的可行性,进而可以从大量系统数据里挖掘更深的系统优化潜力。
以上这些新的变化,让业界各个公司开始认真探索如何利用机器学习和大数据来设计、优化以及运维。微软亚洲研究院也通过与微软 Azure,必应搜索(Bing),必应广告(Bing Ads)和 Office 等产品组的合作,积极开展相关的研究和实践。
从过去几年与微软产品组的合作中,微软亚洲研究院的研究员们体会到建构学习增强系统不单单是整合机器学习的算法。其面临的关键研究挑战来自现代系统和机器学习的协同设计,其问题的本质在于现代系统和机器学习如何共同进化来解决根本上的问题。
第一,现代系统普遍在正确性上有很高的要求,但是机器学习本身带有不可避免的不确定性。这些不确定性意味着系统工程师无法很好地评估一个机器学习驱动的决策是否会对系统性能造成影响。比如在系统调参的场景里,上线一组不适当的参数可能会造成系统的性能大幅度地下降,甚至系统崩溃。另外,由于机器学习模型架构有别于代码,传统的软件测试方法很难适用于学习增强系统。
第二,现代系统普遍有高动态和高复杂的行为特征,但是机器学习在持续学习复杂任务上仍有着不小的资源开销。有几个原因可造成系统动态性,比如系统所需处理的用户请求会随着时间而不同,另外现代系统的架构支持多种扩容机制等。在这些情况下,机器学习模型对于任务的一些假设会随着时间而不成立。有趣的是,这些模型的假设不仅仅在数据分布,也反应在模型的架构,比如系统扩容改变集群里节点的数量,进而影响了模型的输入维度和模型的选取。
第三,现代系统的接口设计主要是面向开发者的,而非驱动机器学习。从过去的经验里,研究员们发现虽然系统有完善的行为监测机制来产生大量的数据,但很多数据并不能很方便地训练机器学习模型。首先,有很多数据是人类可读的无结构数据,比如 crash dump。另外,训练集是由关联系统指令和反馈而组成的,但在很多情况下却很难做到正确的关联。一个例子就是系统里的缓冲存储器需要适当地预热,太早采集反馈会得到错误的结果,但太晚采集则会浪费大量的等候时间。
基于以上的难点,微软亚洲研究院的 AutoSys 项目积极探索如何系统化的建构学习增强系统 [1]。例如在今年 ATC 会议发表的论文 AutoSys: The Design and Operation of Learning-Augmented Systems 中 [2],AutoSys 介绍的框架和方法论就能大大降低系统工程师建构学习增强系统的门槛。下图是当前的框架。基于现有的机器学习工具之上,研究员们提供了建构学习增强系统的三个要素:面向现代系统的行为探索方法,适应于现代系统动态性的知识抽象,以及提升机器学习驱动的系统决策可信度的工具。
在 AutoSys 项目里,除了基础研究之外,微软亚洲研究院的研究员们也与多个微软产品组合作建构学习增强系统,利用机器学习来自动优化现代系统里的决策。用系统中一个重要的决策——系统参数调优来举个例子,在和必应广告(Bing Ads)部门的合作里 [3],与资深工程师相比,研究员们设计的自动化调优工具把 key-value store 集群的尾延迟降低了 20%。基于系统化的空间采样策略,调优的时间从几周减少到了两天。另外,在和必应搜索(Bing)部门的合作里 [2],与资深工程师相比,自动化调优工具把搜索引擎检索模块的尾延迟降低了 33.5%,并把排序模块的相关性提升了 3.4%。另外,调优的时间也大幅度减少。
未来,微软亚洲研究院将持续投入在 AutoSys 上的研究和落地,并希望有更多人一起加入到这个方向中来。
参考文献
[1] The Case for Learning-and-System Co-design. Chieh-Jan Mike Liang, Hui Xue, Mao Yang, Lidong Zhou. ACM SIGOPS Operating Systems Review ’19.
https://www.microsoft.com/en-us/research/publication/the-case-for-learning-and-system-co-design/
[2] AutoSys: The Design and Operation of Learning-Augmented Systems. Chieh-Jan Mike Liang, Hui Xue, Mao Yang, Lidong Zhou, Lifei Zhu, Zhao Lucis Li, Zibo Wang, Qi Chen, Quanlu Zhang, Chuanjie Liu, Wenjun Dai. USENIX ATC ’20.
https://www.microsoft.com/en-us/research/publication/autosys-the-design-and-operation-of-learning-augmented-systems/
[3] Metis: Robustly Optimizing Tail Latencies of Cloud Systems. Zhao Lucis Li, Chieh-Jan Mike Liang, Wenjia He, Lianjie Zhu, Wenjun Dai, Jin Jiang, Guangzhong Sun. USENIX ATC ‘18.
https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/
[4] Accelerating Rule-matching Systems with Learned Rankers. Zhao Lucis Li, Chieh-Jan Mike Liang, Wei Bai, Qiming Zheng, Yongqiang Xiong, Guangzhong Sun. USENIX ATC ’19.
https://www.microsoft.com/en-us/research/publication/accelerating-rule-matching-systems-with-learned-rankers/
你也许还想看: