机器学习近年来已被用于调整机器学习本身的性能,那么为什么不用机器学习来提高网络服务器的性能呢?
Facebook的研究人员就是这样做的,他们周一发表了有关用机器学习调整运行在社交网络服务器基础设施上的服务器设置的文章。
Benjamin Letham、Brian Karrer、Guilherme Ottoni和Eytan Bakshy的文章发表在_Bayesian Analysis_期刊上,作者还在Facebook的人工智能研究博客上发了博文。
Facebook与所有互联网服务一样也运行所谓的A/ B测试,目的是评估服务器在各个变量发生变化时的运行情况。有些人调整过不同版本的网页,例如改变按钮的外观或文本的布局,他们就知道,调整(例如在一个商业网站上的调整)可以优化诸如点击率或购物车使用之类的东西。
Facebook的科学家在这项研究中研究了实时生产系统(JIT:Just- in-time)编译器选项的改变对性能的影响,编译器将Python转换为Facebook用于提供HTTP请求的开源Web服务器内的本机x86服务器代码,即“HipHop虚拟机”。
例如,可以将JIT设置为执行给定代码块的内嵌之类的操作。这样的调整会令代码更大些,因此需要进行A / B测试,原因是更大的代码会消耗更多的服务器内存,因而有必要确定是否值得这样做。
文章的作者用了名为“贝叶斯分析”的方法,贝叶斯分析是一种机器学习算法,基本思想是强调使用过去或先前的信息来确定最佳解决方案。贝叶斯分析在过去十年里被广泛用来优化“超参数”机器学习,例如用来确定批量的大小或学习速度参数的大小。由于贝叶斯优化可以代替人手做超参数设计的苦差事,有人将用了贝叶斯优化的机器学习称为“自动化”机器学习。
文章的作者在使用JIT编译器的设置运行A / B测试时在各种不同的地方用了贝叶斯。这样做最大的好处是速度。由于必须在生产环境中进行测试以观察不同设置的影响,因此希望能够快速完成测试,以便将更改进一步用于网络服务器。
作者在文章里表示,典型的A / B测试是在每一次只测试一个配置的改变,而贝叶斯优化则“允许我们用更少的测试共同调整更多的参数并找到更好的值。”
这里的关键是“共同”这个词:贝叶斯机制可以从给定的A / B测试推断出其他参数,以缩小“可行的“配置,因而无需进行相应的实际A / B测试就能排除某些配置选择。作者用了广泛搜索能力的字眼,称“连续空间里参数值的测试不仅为我们提供了关于这些参数结果的信息,而且还提供了关于附近点的信息。” 贝叶斯模型可以从前期测试结果中获得了新的经验数据,这些经验数据又可以用于进一步缩小搜索潜在最优配置的范围,因此整个A / B测试逐步地就越来越高效了。
Facebook这项贝叶斯优化研究的新贡献是处理噪声。作者指出,在A / B实验中测试服务器设置与优化机器学习网络不同,这时的测试结果和测量均存在很多噪音,在现实世界中,设置的变化对服务器性能的影响可以是各种各样的,而且还存在“噪声”约束,例如服务器内存的使用需要在合理的范围之内。文章的作者提出了在贝叶斯算法中解决这种噪声的方法,他们得出的结论是,用新方法比用其他类型的贝叶斯方法更容易得到最优解。
用了此方法的A / B测试方法存在一个有趣的小问题,有些配置从不会被用到:因为贝叶斯优化分析的预测完全排除了那些配置,相应的变量已在测试中被移除。文章的作者则认为这是个好处,可以减少用户进行大量不同实验的烦恼。