斯坦福开源Weld:高效实现数据说明的端到端优化
副问题[/!--empirenews.page--]
技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战
导读:Weld 是斯坦福大学 DAWN 尝试室的一个开源项目,在 CIDR 2017 论文中描写了它的初始原型。Weld 用于对团结了数据科学库和函数的现有事变负载举办优化,而无需用户修改代码。我们在 VLDB 2018 论文中提出了 Weld 的自顺应优化器,并得出了一些可喜的功效:通过在 Weld IR 上自动应用转换可以实现事变负载数目级的加快。溶解研究表白,轮回融合等优化具有很是大的影响。本文首要先容怎样行使 Weld 的自顺应优化器举办数据说明的端到端优化。 说明应用措施凡是会行使多种软件库和函数,好比行使 Pandas 操纵表,行使 NumPy 处理赏罚数字,行使 TensorFlow 举办呆板进修。开拓职员通过行使这些库未来自各个规模的先辈算法组合成强盛的处理赏罚管道。 然而,纵然每个库中的函数都颠末全心优化,我们如故发明它们穷乏端到端的优化,在组合行使这些库时会严峻影响整体机能。譬喻,多次挪用颠末优化的 BLAS 函数(行使了 NumPy)要比行使 C 说话实现单次跨函数优化(如管道化)慢 23 倍。 鉴于这种机能差距,我们最近提出了 Weld,一种用于说明事变负载的通用并行运行时。Weld 旨在实现跨多个库和函数的端到端优化,而无需改变库的 API。对付库开拓职员来说,Weld 既可以实现库函数的自动并行化,也可以实现强盛的跨函数优化,譬喻轮回融合(loop fusion)。对付用户而言,Weld 可以在不修改现有管道代码的环境下带来数目级的速率晋升,也就是说数据说明师可以继承行使 Pandas 和 NumPy 等风行库的 API。 Weld 为开拓职员提供了三个首要组件,用于与其他库集成:
![]() 在大大都环境下,用户可以通过 import 语句切换到启用了 Weld 的库。 我们在 CIDR 2017 论文中描写了最初的 Weld 原型。通过在 IR 上应用手动优化,Weld 在合成事变负载上示意出了数目级的速率晋升,这些事变负载包括了来自单个库和多个库的函数。 VLDB 2018:Weld 的自动优化 这个原型有一个很明显的限定,IR 的优化是手动举办的,必要预先知道数据的相干属性,譬喻聚合基数。简朴地说就是体系穷乏自动优化器。为此,我们在 VLDB 2018 上颁发的最新论文先容了优化器的计划和实现,这个优化器可自动优化 Weld 措施。 由于 Weld 试图优化来自差异独立库的函数,以是我们发明,与实现传统的数据库优化器对比,在计划新的优化器时存在一些奇异的挑衅:
为了应对这些挑衅,我们的优化器回收了双管齐下的计划,团结了静态的基于法则的优化(旨在消除冗余,以天生高效的 Weld IR)和自顺应优化(在运行时确定是启用照旧禁用某些优化)。 ![]() 行使新优化器的评估功效是很喜人的:在 10 个真实的事变负载上行使常用库(如 NumPy 和 Pandas),Weld 可在单个线程上实现高达 20 倍的加快,并通过自动并行化实现进一步的加快。在评估 Weld 时,我们还说明白哪些优化对事变负载样本发生的影响最大,我们但愿这对该规模的进一步研究有所辅佐。 基于法则的优化:从轮回融合到向量化 Weld 的自动优化器起首会应用一组静态的基于法则的优化。基于法则的优化从 Weld IR 输入中查找特定模式,并用更有用的模式替代这些模式。Weld 基于法则的优化器在其闭合的 IR 上运行,这意味着每个优化的输入和输出都是沟通的 IR。这种计划可以应承组合差异的法则并以差异的方法从头运行。 优化器包括了许多用于天生高效代码的法则,从折叠常量到归并并行轮回。其他一些最具影响力的基于法则的优化:
Weld 应用了其他特另外优化,在这篇论文中有描写 http://www.vldb.org/pvldb/vol11/p1002-palkar.pdf。 自顺应优化:从猜测到自顺应哈希表 在行使基于法则的优化器转换 IR 之后,Weld 举办了一系列自顺应优化。自顺应优化器不是直接替代 IR 中的模式,而是将 Weld 措施酿成在运行时动态选择是否应该应用优化。 个中的一个示例是抉择是否要猜测一个分支。猜测会将分支表达式(即 if 语句)转换为无前提计较 true 和 false 表达式的代码,然后按照前提选择正确的选项。尽量猜测代码会做更多的事变(由于同时计较了两个表达式),但它也可以行使 SIMD 运算符举办向量化,这与分支代码差异。请看下面的示例: ![]() (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |