斯坦福开源Weld:高效实现数据说明的端到端优化
行使猜测优化是否值得取决于两个身分:运行 foo 的机能本钱(譬喻 CPU 周期)和前提 x 的选择性。假如 foo 计较很昂贵而且 x 很少是 true,那么无前提地计较 foo(纵然行使了向量指令)也许导致比行使默认分支代码更差的机能。在其他环境下,行使 SIMD 并行化可以大幅晋升速率。这里的数据相干因子就是 x 的选择性:这个参数在编译时是未知的。 Weld 的自顺应优化器为猜测天生代码,用于对 x 举办采样,以便在运行时得到选择性的近似。然后,按照得到的丈量值,将在运行时行使配置了阈值的本钱模子来选择是否举办猜测。下面的代码展示了自顺应猜测转换: ![]() Weld 的自顺应优化器还提供了一些其他的转换:譬喻,在构建哈希表时,它可以选择是否行使线程当地或原子全局数据布局,详细取决于键的漫衍和预期的内存占用。在我们的论文中有更多相干内容。 Weld 在数据科学事变负载方面的示意 我们基于 10 个真实的数据科学事变负载对优化器举办评估,包罗行使 NumPy 计较用于股票订价的 Black Scholes 方程、行使 Pandas 说明婴儿名称、行使 NumPy 和 TensorFlow 来增白图像并基于它们实习模子、行使 Pandas 和 NumPy 按照犯法环境对都市举办评分,等等。功效如下:Weld 可以不变地晋升单个线程的机能,并自动并行化本机单线程库。从下图可以看出,Weld 的自动优化器可以有用地最小化因组合单个函数挪用带来的服从丧失和天生快速的呆板代码。 ![]() 每种优化毕竟有多重要? 为了研究每个优化对事变负载有多大的影响,我们还举办了一项溶解研究,我们逐个封锁每种优化,并丈量对机能的影响。下面的图表总结了我们别离在一个和八个线程上测试获得的功效。每个框中的数字暗示禁用优化后的减速,因此数字越大意味着优化会发生更大的影响。实线下方的数字表现了带有合成参数(譬喻高选择性与低选择性)的事变负载,用以声名自顺应优化的影响。最后,“CLO”列表现了跨库优化或跨库函数优化的影响。 ![]() 总的 来说,我们发明很多优化至少对一个事变负载具有中等以上的影响。另外,跨库优化具有相等大的影响,纵然在 Weld 对库应用了优化之后,如故可以将机能进步 3 倍之多。我们的研究还表白,一些优化很是重要:好比,轮回融合和向量化对许多事变负载具有很大的影响。 总结Weld 是一种新的要领,用于对团结了数据科学库和函数的现有事变负载举办优化,而无需用户修改代码。我们的自动优化器得出了一些可喜的功效:我们可以通过在 Weld IR 上自动应用转换来实现事变负载数目级的加快。我们的溶解研究表白,轮回融合等优化具有很是大的影响。 Weld 是开源的,由 Stanford DAWN 认真开拓,我们在评估中行使的代码(weld-numpy 和 Grizzly,是 Pandas-on-Weld 的一部门)也是开源的,可在 PyPi 上得到。这些包可以行使 pip 安装: ![]() 重要链接:
【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |