在利用Python与R的数据科学堆栈工作了几个礼拜之后,我开始问自己:有没有可能存在一种通用的中间表示形式(类似于CUDA),能够在多种语言之间同时起效?现在我必须得在不同语言中重新实现并优化已经存在的方法,难道就不能更高效一点?除此之外,我希望通过通用的运行对程序进行整体优化,而不是像现在这样只能针对函数进行优化。经过几天的研究和测试,我发现了 Weld。令我意外的是,Weld的缔造者之一正是Matei Zaharia,也就是Spark的发明者。
正因为如此,我联系并采访了Weld项目的主要贡献者Shoumik Palkar。Shoumik目前是斯坦福大学计算机科学系的博士生,在Matei Zaharia的推荐下加入了Weld项目。
Weld还远没有达到生产就绪级别,但其发展愿景却是一片光明。如果大家对数据科学的未来以及Rust抱有兴趣,相信这次访谈会给你带来不少启示。
开发Weld项目的动机是什么,它又能够解决哪些问题?
项目的开发动机,在于为依赖现有高级API(例如NumPy与Pandas)的应用程序提供裸机级别的性能表现。其解决的主要问题,是实现跨函数与跨库层面的优化,而这正是目前其他库所无法实现的。具体来讲,当下有不少常用库以各个函数为基础提供算法的最新实现(例如以C语言在Pandas中实现的快速连接算法,或者以NumPy语言实现的快速矩阵乘法),但市面上却还不存在能够跨越这些函数实现优化的可用工具(例如在执行矩阵乘法后进行聚合时,防止不必要的内存扫描)。Weld希望提供一个可通用的运行时,使各个库能够在通用IR当中进行计算表达;接下来,开发人员还可以利用编译器优化程序对IR进行优化,而后通过循环融合、矢量化等优化手段将JIT与并行本机代码加以对接。Weld的IR具备本机并行特性,因此开发人员可以随时对其中表示的程序进行常规并行化处理。
我们还建立了一个名为拆分注释(split annotations)的新项目,该项目将与Weld相集成,旨在降低对现有库进行优化的实施门槛。