构建能够自动适应工作负载与数据的系统
今年夏天加入某机构,正在组建新的“学习型系统研究组”的Tim Kraska,阐述了“实例优化”的强大之处。
作为麻省理工学院电气工程与计算机科学系的副教授,Tim Kraska 的研究方向是实例优化数据库系统,即能够以最少的人工干预自动适应新工作负载的系统。
今年早些时候,某机构聘请了Kraska及其团队来进一步开发这项技术。目前,Kraska正从麻省理工学院休假,担任某机构云服务部门的应用科学总监,帮助建立新的“学习型系统研究组”。该小组将专注于将机器学习集成到系统设计中。小组的第一个项目是将实例优化技术引入某机构的数据仓库服务中。Kraska接受了采访,谈论了实例优化的价值以及在工业界进行研究的吸引力。
问:什么是实例优化?
答:如果你为一个特定的应用场景从头开发一个系统,由于可以针对该场景定制每一个系统组件,你能够获得数量级更好的性能。然而,在大多数情况下,你不会想这么做,因为那需要巨大的投入。以数据库为例,俗话说,通常需要至少七年时间才能让一个系统变得可用和稳定。 实例优化的理念是,我们不是为每个应用场景构建一个单独的系统,而是构建一个能够自我调整——即对自身进行实例优化——以适应特定场景的系统,使其尽可能地接近手动调优的方案。
问:它是如何做到这一点的?
答:实现自我调整有不同的方法。任何系统都有一系列的配置参数和设计选择。以某数据仓库服务为例,你可以调整缓冲区大小;可以创建物化视图;可以创建不同类型的排序顺序。数据库管理员可以根据他们的工作负载调整这些参数并做出设计选择,以获得更好的性能。 第一种自我调整的形式是自动做出这些决策。比如说,你有一个机器学习模型,它观察工作负载,并找出如何调整这些旋钮以及创建哪些物化视图和排序键。某数据仓库服务已经通过一项名为“自动物化视图”的功能做到了这一点,该功能可以加速查询性能。 下一步是,在某些情况下,可以通过新技术替换组件,这些技术允许以前不可能实现的、更高程度的定制或调优。举个例子,在数据布局方面,当前的系统主要支持按一个属性(可能是一个复合键)进行分区。原因是这些系统的开发者过去总是认为最终必须有人手动做出这些设计选择。因此,过去的趋势是尽可能减少调优参数的数量。 当然,一旦你拥有了使用机器学习的自动调优技术,能够更有效地探索参数空间,这种情况就会改变。现在,也许相反的观点才是正确的:提供更多的自由度、更多的可调参数是件好事,因为它们提供了更多的定制潜力,从而带来更好的性能。 第三种自我调整方法是,将机器学习模型深度嵌入到系统的某个组件中,以获得比当前可能实现的好得多的性能。 例如,每个数据库都有一个查询优化器,它接收SQL查询并将其优化为一个执行计划,该计划描述了如何实际运行该查询。这个查询优化器是一个复杂的软件,需要非常精心调整的启发式规则和成本模型来找出完成这种转换的最佳方式。目前的最新技术是将其视为一个深度学习问题。所以在这个阶段,我们谈论的是学习型组件。 最终目标是构建一个由学习型组件组成的系统,并以一种整体的方式对所有组件进行调优。有一个模型监控着工作负载、观察着系统,并做出正确的调整——这种方式可能是人类无法做到的。
问:听说您改进了一种排序算法,这是真的吗?我以为排序基本上已经是一个解决了的问题。
答:没错。这仍然令人惊讶。它的工作方式是,你学习一个关于数据分布的模型——即累积分布函数,它能告诉你一个项落在概率质量中的哪个位置。假设在一个电子商务数据库中,你有一个订单表,每个订单都有一个日期,你想按日期对表进行排序。现在你可以构建关于日期属性的累积分布函数,然后你可以问诸如“在2021年1月1日之前有多少订单?”这样的问题,它会输出一个概率。 这样做的好处在于,本质上,累积分布函数允许你问:“给定一个订单日期,它在排序后的顺序中应该放在哪里?”假设模型是完美的,它突然间就允许你在O(n) 时间内完成排序。[即,排序时间与待排序项的数量 n 成正比,而不是与 n² 或 nlogn 等成正比。] 基数排序也是O(n)的,但它可能非常消耗内存,因为其效率取决于值域的大小——即可能存在的唯一值的数量。如果你的值域是1到一百万,在内存中可能仍然很容易做到。如果是1到十亿,就已经有点困难了。如果值域大到无法想象,那么最终就不可能通过一次遍历完成。 基于模型的方法试图以一种巧妙的方式克服这个问题。你大致知道每个数据项应该落在哪里,所以你可以把它们放到近似的位置,然后使用插入排序来纠正模型的误差。这是我们曾用于索引的技巧,但事实证明,同样的方法也可以用于排序。
问:对您来说,在工业界进行研究有什么吸引力?
答:我们之所以被吸引到某机构工作,原因之一是可以接触到真实世界工作负载的信息。实例优化的核心就是根据工作负载和数据自我调整。而这在学术界是极其难以测试的。有一些基准数据集,但在内部,它们通常使用随机数生成器来创建数据,并决定何时以及向系统发出何种类型的查询。 由于这种随机性,首先,没有了有趣的使用模式——比如说,什么时候运行仪表板查询,什么时候运行加载数据的批处理作业。这些都消失了。更糟糕的是,数据本身不包含任何有趣的模式,这要么让任务变得太难,因为一切都是随机的;要么变得太简单,也因为一切都是随机的。 例如,当我们在一个非常常见的数据仓库基准测试上测试我们的学习型查询优化器时,我们发现几乎没有得到任何改进,而对于真实世界的工作负载,我们看到了巨大的改进。 我们深入研究了一下,结果发现,对于像TPC-H这样的常见基准测试,每个数据库供应商都确保其查询计划接近完美。他们手动地让系统过度拟合这个基准测试。而这在任何情况下都无法转化到任何真实世界的客户身上。没有客户真的完全像基准测试那样运行查询。没有人会这样做。 与某数据仓库服务出色的开发团队合作,并能够接触到真实世界的信息,在这方面提供了巨大的优势。它不仅让我们能够评估我们之前的技术是否在实践中真正有效,而且还帮助我们专注于开发新技术,这些技术通过提供更好的性能或改进的易用性,真正为用户带来重大影响。
问:那么,与该数据仓库服务团队的合作进展顺利吗?
答:合作非常愉快,并且在很多方面超出了我们的预期。当我们加入时,我们当然有些担忧,比如我们将如何与该数据仓库服务团队合作,我们还能发表多少论文等等。例如,我认识工业界实验室的许多研究人员,他们很难接触到数据,或者很难对产品产生实际影响。 事实证明,这些都不是真正的问题。我们不仅定义了自己的研究议程,而且已经深入参与了许多令人兴奋的项目,并且有一整列我们想要发表的激动人心的内容。
问:您还和麻省理工学院合作吗?
答:是的,并且这是非常受鼓励的。某机构最近在麻省理工学院建立了一个科学中心,作为该中心的一部分,某机构云服务部门也正在资助一个名为DSAIL的实验室,该实验室专注于机器学习系统的研究。这使我们能够与麻省理工学院的研究人员非常紧密地合作。
问:您讨论的一些技术,比如排序,有非常广泛的用途。学习型系统研究组会与该数据仓库服务以外的其他团队合作吗?
答:我们决定首先专注于该数据仓库服务,因为我们在分析系统的实例优化方面已经有很多经验,但我们已经开始与其他团队讨论,并最终计划将这些想法更广泛地应用。 我相信我们必须从根本上重新思考如何构建系统和系统组件。例如,每当开发人员需要在两种技术之间做出权衡,或者定义一个常数时,开发人员应该思考这个常数或权衡是否不应该被自动调优。在许多情况下,如果开发人员知道该组件预计会根据工作负载和数据自我调整,她可能会以完全不同的方式来设计该组件。 这不仅适用于数据管理系统,而且适用于整个软件栈。例如,已经有关于使用学习型索引改进网络数据包分类、使用强化学习优化Spark调度算法,以及使用深度学习技术在带宽有限时提供更好体验的视频压缩等方面的工作。所有这些技术最终都将以性能提升、成本降低或易用性改善的形式影响客户体验。 我们有充分的理由看到,在某机构内部,已经有大量应用机器学习来改进系统的工作。例如,某数据仓库服务提供了多项基于机器学习的功能——如自动物化视图或自动工作负载管理。通过学习型系统研究组,我们希望加速这一趋势,实现完全实例优化的系统,这些系统能够以传统系统无法实现的方式,根据工作负载和数据自我调整。这将为某机构云服务客户提供更好的性能、成本和易用性。FINISHED