设计与构建下一代的计算机系统:学习增强系统

编者按:我们生活中依赖的搜索、购物、聊天和新闻推荐等各种服务都离不开大型软件系统的支持 , 然而 , 随着用户的需求和场景增多 , 这些系统的复杂性和规模也在不断增加 。 如何利用机器学习和大数据来驱动复杂的系统设计和运维决策 , 成为了学术界和工业界共同思考的问题 。 针对这个问题提出的解决方案 , 被称为学习增强系统(Learning-augmented Systems) 。 最近几年 , 微软亚洲研究院通过名为 AutoSys 的研究项目 , 在探索系统化建构学习增强系统上取得了进展 。
“The world runs on software” ——我们生活中依赖的各种服务都离不开大型软件系统 。 比如搜索、购物、聊天和新闻推荐服务等背后都是由超大规模的软件系统来提供服务的 。 随着用户的需求和场景增多 , 这些系统的复杂性和规模也在不断增加 。 大型软件系统的复杂度不仅仅体现在其巨大的代码量 , 更体现在背后成百上千的工程师不断地设计、开发及维护的工作量 。
设计与构建下一代的计算机系统:学习增强系统文章插图
如何准确理解、设计以及演化复杂软件系统已成为现代计算机系统设计的一个核心问题 。 然而 , 在系统复杂度呈几何量级上升的今天 , 系统设计和运维问题无法依赖少数人的直觉和经验去解决 。 这就促使了学术界和工业界开始思考如何利用机器学习和大数据来驱动复杂的系统设计和运维决策 , 而这类系统被称为学习增强系统(Learning-augmented Systems) 。 最近几年 , 微软亚洲研究院通过名为 AutoSys 的研究项目 , 在探索系统化建构学习增强系统上取得了进展 。
学习增强系统的崛起软件系统的设计和运维过去一直以来都依靠工程师的经验和试错 。 在系统的规模和复杂度较小时 , 工程师还可以经由大量的实验来评估系统的性能以及理解系统的行为 。 这些经验和实验不仅能帮助工程师优化系统 , 也能帮助他们设计未来的系统 。
然而现代系统复杂性和规模快速提升带来的挑战 , 让学习增强系统在工业界迅速崛起 。 首先 , 人力的增长赶不上系统规模上升的速度 。 随着用户的需求和场景增加 , 现代系统的架构强调模块隔离来支持横纵向扩展(例如 docker 容器、Kubernetes、microservices 的相关技术) 。 这样大量的模块和大规模的部署需要更多的人来管理和优化系统 。 其次 , 人的理解力越发难以匹配系统复杂度的提升 。 这是因为 , 在模块化的系统设计理念下 , 现代系统里有大量模块 , 以及大量的运行选项和环境参数 。 这些映射出一个巨大的非线性搜索空间 。 对人工来说 , 理解复杂系统中各个模块的内部细节和模块之间的交互 , 并考虑是否已达到全局最优 , 是非常困难的 。 最后 , 现代系统普遍有完善的行为监测机制和精细的日志 , 加上近期机器学习的进步(例如深度学习和强化学习) , 大大提升了数据驱动的可行性 , 进而可以从大量系统数据里挖掘更深的系统优化潜力 。
以上这些新的变化 , 让业界各个公司开始认真探索如何利用机器学习和大数据来设计、优化以及运维 。 微软亚洲研究院也通过与微软 Azure , 必应搜索(Bing) , 必应广告(Bing Ads)和 Office 等产品组的合作 , 积极开展相关的研究和实践 。
学习增强系统的难点【设计与构建下一代的计算机系统:学习增强系统】从过去几年与微软产品组的合作中 , 微软亚洲研究院的研究员们体会到建构学习增强系统不单单是整合机器学习的算法 。 其面临的关键研究挑战来自现代系统和机器学习的协同设计 , 其问题的本质在于现代系统和机器学习如何共同进化来解决根本上的问题 。
第一 , 现代系统普遍在正确性上有很高的要求 , 但是机器学习本身带有不可避免的不确定性 。 这些不确定性意味着系统工程师无法很好地评估一个机器学习驱动的决策是否会对系统性能造成影响 。 比如在系统调参的场景里 , 上线一组不适当的参数可能会造成系统的性能大幅度地下降 , 甚至系统崩溃 。 另外 , 由于机器学习模型架构有别于代码 , 传统的软件测试方法很难适用于学习增强系统 。
第二 , 现代系统普遍有高动态和高复杂的行为特征 , 但是机器学习在持续学习复杂任务上仍有着不小的资源开销 。 有几个原因可造成系统动态性 , 比如系统所需处理的用户请求会随着时间而不同 , 另外现代系统的架构支持多种扩容机制等 。 在这些情况下 , 机器学习模型对于任务的一些假设会随着时间而不成立 。 有趣的是 , 这些模型的假设不仅仅在数据分布 , 也反应在模型的架构 , 比如系统扩容改变集群里节点的数量 , 进而影响了模型的输入维度和模型的选取 。