论文部分内容阅读
学习增强系统设计是指在传统的云系统架构中引入机器学习(machinelearn-ing/ML)或深度学习(deep learning/DL)框架形成的新的系统框架,旨在传统方法的基础上进一步的提升云系统的性能和自适应性。具体而言,伴随着互联网服务的快速发展,用户服务质量要求的不断提升,云服务商服务的业务、承载的数据流也更加多样。复杂多变的系统环境为性能优化如动态参数调整、路由调度优化、增强负载平衡等问题提出了新的挑战,即便在相同的框架下,针对不同的业务和数据流,其系统状态和优化方案也不尽相同。传统的优化解决方案通常需要对具体的业务场景有非常专业的知识,导致在迁移性、扩展性和自适应性上仍然有一定的局限性。近年来,随着人工智能研究的快速迭代,机器学习和深度学习技术展现出了优异的抽象建模能力,为系统状态建模和系统性能优化方案提供了新的思路。通过观察收集系统行为和数据流信息,对系统行为、系统数据流进行抽象拟合,从而更好的实现系统性能优化。然而,由于ML/DL模型具有天然的不确定性,而系统有着极高的可用性要求,直接简单的收集历史数据,将模型套用在系统场景中并不能有效的解决性能优化问题,且难以部署在真实的生产环境中。本文旨在设计实现适用于系统性能优化目的学习增强系统工具链。为了使系统优化任务场景和人工智能的数据收集、模型推理、训练组合与测试更好的协同,我们开展了一系列的研究。我们首先从真实系统需求出发,探究数据采集策略,设计具体的优化方案;之后,我们提出了通用性更强的模型自动组合建模策略;最后,为了帮助开发者理解模型行为并对目标模型进行测试,我们设计了基于误差分布的黑盒模型测试工具。本文主要研究包含了下述四个部分:(1)面向系统参数优化的学习增强设计。端到端的参数优化是经典的系统性能优化任务之一,通过对框架中的开放参数进行配置调整,从而实现对关键系统性能指标的优化。然而,参数调整需要等待系统启动并稳定后才能收集到有效数据,而且性能指标(例如吞吐、延时等)容易受到外因影响而产生噪音导致度量不准确。为了解决采样耗时长、采样性能评估有噪音的问题,我们提出了 Metis——一个基于贝叶斯优化的鲁棒性强的参数优化服务。我们设计了噪音点检测和组合型采样方法,从而在有噪音环境下能够主动采集到有效信息。我们在真实的BingAds的IDHash缓存的尾端延迟优化任务中对本文所述方法进行验证,结果证明,在相同采样数量下,我们的方法相比于其他采样法给出了尾端延迟更低的参数组合方案。(2)面向优先级调度的学习增强设计。端到端的实时调度任务是我们在传统系统任务中的另一项探索。实时调度任务的性能评估包含了调度算法开销和后端任务执行开销。因此,在具体调度时需要考虑二者的协同以获取最优效果。为此,我们实现了基于深度学习的序列调度工具LearnedRanker,利用输出权重作为调度优先级并设计模型结构的自动调整以最优化端到端的延迟。另外,为了最大化调度模型性能,我们实现了基于梯度的主动数据生成和剪枝压缩技术。我们在基于正则表达式的规则检验任务中进行序列优化,以提升规则检验速度。在两个真实的规则检验集合(CRS和Snort)和三个常见的规则检验框架(PCRE,RE2和HyperScan)中将我们的序列优化算法作为插件验证LearnedRanker性能,结果表明我们的方法相比于静态算法和传统调度方法,能够大幅缩减整体时延。(3)学习增强系统设计与运维。尽管机器学习和深度学习为优化系统设计和性能提升提供了新的可能性,传统系统优化领域的探索告诉我们仅仅依赖现有的ML/DL算法并不能真正的实现学习增强的范式转变。为此,我们报告了在微软的研究和解决生产环境下部署学习增强系统所积累的经验,并提出了 AutoSys框架,AutoSys框架将学习增强系统的开发过程进行统一。它解决了一些常见的设计问题,包括ad-hoc或非确定性作业、由于模型不确定性导致的系统故障以及可扩展问题等。此外,我们通过一个真实的生产系统WebSearch来展示应用AutoSys的优势。最后,我们分享了这几年来在设计和使用学习增强系统过程中所产生的难以预料的影响以及我们获取的经验教训。(4)基于误差分布的性能预测模型测试工具。在新的系统、框架、版本上线前都需要经过反复的测试以确保系统的稳定和安全。而学习增强系统中的学习参数构成的模型几乎是一个黑盒子,复杂、难以理解且具有天然的不确定性。潜在的错误决策会造成性能下降、阻塞甚至系统崩溃。这一问题阻碍了学习增强系统在真实生产环境的部署。传统的模型测试通过对抗生成或随机扰动的方式生成使模型决策错误的样本。而孤立的样本点集合不能反映出模型在整个数据空间的整体水平,容易产生测试结果覆盖不足的问题。因此,我们提出了 Tapio,一个基于误差分布拟合的测试工具,通过最小化最大不确定性区域面积的方法来快速拟合全局误差分布。由此将已训练模型的全局表现水平展现给开发者,帮助开发者对模型进行微调或学习框架进行约束,以实现学习增强系统可靠性提升,推动其在真实场景下的部署。我们在RocksDB和Azure VM两个不同的场景下,对其性能预测模型进行测试。我们验证了 Tapio可以有效的帮助RocksDB的写吞吐性能提升,Azure VM的预测准确率提升。