斯坦福开源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 (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |