加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

斯坦福开源Weld:高效实现数据说明的端到端优化

发布时间:2018-08-19 04:44:27 所属栏目:教程 来源:无明译
导读:技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战 导读:Weld 是斯坦福大学 DAWN 尝试室的一个开源项目,在 CIDR 2017 论文中描写了它的初始原型。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 为开拓职员提供了三个首要组件,用于与其他库集成:

  • 库开拓职员行使 Weld 的函数中间暗示(Intermediate Representation,IR)来表达他们函数(譬喻映射操纵或聚合)中的计较数据并行布局。
  • 然后,行使 Weld 的库行使耽误评估运行时 API 将 Weld IR 片断提交给体系。Weld 将行使 IR 片断来自动跟踪和调治对其他函数的挪用。
  • 当用户想要计较功效(譬喻将它写入磁盘或表现它)时,Weld 将行使优化编译器对组合措施的 IR 举办优化和 JIT 编译,这样可以天生更快的并行呆板代码,然后基于应用措施内存中的数据执行这些代码。
斯坦福开源Weld:高效实现数据说明的端到端优化

在大大都环境下,用户可以通过 import 语句切换到启用了 Weld 的库。

我们在 CIDR 2017 论文中描写了最初的 Weld 原型。通过在 IR 上应用手动优化,Weld 在合成事变负载上示意出了数目级的速率晋升,这些事变负载包括了来自单个库和多个库的函数。

VLDB 2018:Weld 的自动优化

这个原型有一个很明显的限定,IR 的优化是手动举办的,必要预先知道数据的相干属性,譬喻聚合基数。简朴地说就是体系穷乏自动优化器。为此,我们在 VLDB 2018 上颁发的最新论文先容了优化器的计划和实现,这个优化器可自动优化 Weld 措施。

由于 Weld 试图优化来自差异独立库的函数,以是我们发明,与实现传统的数据库优化器对比,在计划新的优化器时存在一些奇异的挑衅:

  • 计较高度冗余。与人工编写的 SQL 查询或措施差异,Weld 措施凡是由差异的库和函数天生。因此,消除由库组合发生的冗余是至关重要的。譬喻,可以对中间功效举办管道化或缓存昂贵的民众子表达计较功效,停止多次计较。
  • Weld 在举办数据依靠决定时不能依靠预先计较的统计数据。因此,Weld 必要在不依靠目次或其他帮助信息的环境下优化 ad-hoc 说明。另外,我们发明,在没有任何统计数据的环境下举办的优化也许会导致速率减慢 3 倍,这声名做出自顺应的决定是何等重要。

为了应对这些挑衅,我们的优化器回收了双管齐下的计划,团结了静态的基于法则的优化(旨在消除冗余,以天生高效的 Weld IR)和自顺应优化(在运行时确定是启用照旧禁用某些优化)。

斯坦福开源Weld:高效实现数据说明的端到端优化

行使新优化器的评估功效是很喜人的:在 10 个真实的事变负载上行使常用库(如 NumPy 和 Pandas),Weld 可在单个线程上实现高达 20 倍的加快,并通过自动并行化实现进一步的加快。在评估 Weld 时,我们还说明白哪些优化对事变负载样本发生的影响最大,我们但愿这对该规模的进一步研究有所辅佐。

基于法则的优化:从轮回融合到向量化

Weld 的自动优化器起首会应用一组静态的基于法则的优化。基于法则的优化从 Weld IR 输入中查找特定模式,并用更有用的模式替代这些模式。Weld 基于法则的优化器在其闭合的 IR 上运行,这意味着每个优化的输入和输出都是沟通的 IR。这种计划可以应承组合差异的法则并以差异的方法从头运行。

优化器包括了许多用于天生高效代码的法则,从折叠常量到归并并行轮回。其他一些最具影响力的基于法则的优化:

  • 轮回融合,通过归并两个轮回来实现值的管道化,个中第二个轮回直接斲丧第一个轮回的输入。管道化改造了 CPU 缓存中的数据位置,由于归并轮回每次只从输入中加载一个元素。
  • 向量化,它通过修改 IR 来天生显式的 SIMD 向量化代码。CPU 中的 SIMD 指令应承 CPU 在单个周期内完成更多事变,从而进步吞吐量。
  • 尺寸揣度,它通过说明 IR 来预先分派内存而不是动态增添缓冲区。这个优化停止了昂贵的库挪用,如 malloc。

Weld 应用了其他特另外优化,在这篇论文中有描写 http://www.vldb.org/pvldb/vol11/p1002-palkar.pdf。

自顺应优化:从猜测到自顺应哈希表

在行使基于法则的优化器转换 IR 之后,Weld 举办了一系列自顺应优化。自顺应优化器不是直接替代 IR 中的模式,而是将 Weld 措施酿成在运行时动态选择是否应该应用优化。

个中的一个示例是抉择是否要猜测一个分支。猜测会将分支表达式(即 if 语句)转换为无前提计较 true 和 false 表达式的代码,然后按照前提选择正确的选项。尽量猜测代码会做更多的事变(由于同时计较了两个表达式),但它也可以行使 SIMD 运算符举办向量化,这与分支代码差异。请看下面的示例:

斯坦福开源Weld:高效实现数据说明的端到端优化

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读