用Rust语言编写的Weld可以让Spark和TensorFlow在速度上提升几个数量级!

Posted 云头条

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Rust语言编写的Weld可以让Spark和TensorFlow在速度上提升几个数量级!相关的知识,希望对你有一定的参考价值。

MIT和斯坦福大学的联合项目利用LLVM,破解大数据瓶颈!


你能使用的处理器核心数量越多,效果就越好,对大数据而言更是如此。但是大数据框架使用起来越容易,因而生成的管道(比如TensorFlow以及Apache Spark)作为一个整体单元来并行运行就越困难。


麻省理工学院(MIT)计算机科学与人工智能实验室(CSAIL)的研究人员和斯坦福大学信息实验室(InfoLab)合作,已开发出了一种可行的解决方案。


Weld(https://weld-project.github.io/)用Rust语言编写,可以使用LLVM编译器框架,为整个数据分析工作流生成高效地并行运行的代码。CSAIL曾开发出了几个将速度推向极限的大数据加速项目,比如Milk和Tapir。


这个小组声称Weld“是一种面向数据分析的通用运行时环境”,它拿来现代数据处理堆栈几个分离的部分后,可以步调一致地优化它们。每一个部分快速运行,但是“跨不同功能的数据移动可能占了执行时间的大部分。”


换句话说,管道花在将数据在各部分之间来回移动上的时间超过了花在实际处理数据上的时间。Weld创建了一种每个库都可以接入的运行时环境,提供了一种通用方法,可以跨管道运行需要并行化和优化的关键数据。


诸多框架本身并不为运行时环境生成代码。相反,它们通过API来调用Weld,该API描述了处理哪种类型的工作。然后,Weld使用LLVM生成可自动包括优化机制(比如多线程处理)或面向高速向量运算的英特尔AV2处理器扩展的代码。


信息实验室进行了初步的基准测试,将Weld加速的对应版本与Spark SQL、NumPy、TensorFlow和Python数学及统计框架Pandas的原生版本作了一番比较。提速效果最明显的出现在NumPy以及Pandas基准测试;结果发现,跨12个核心并行处理时,工作效率最多可以提高“2个数量级”。


那些熟悉Pandas、想要体验一下Weld的人可以试用Grizzly,这是自定义实现的Weld及Pandas。


它不是管道,而是组件


Weld采用的方法源自于开发人员认为大数据处理框架存在的一个根本性问题。各部分并不慢,但是瓶颈主要源自于首先需要把这些部分联系起来。


构建一条从里到外整合起来的新管道也不是解决之道。人们想要使用现有的库,比如Spark和TensorFlow。丢弃现有库意味着摈弃了围绕那些产品已经打造起来的软件文化。


相反,Weld提议对那些库的内部结构进行改动,那样它们能够与Weld运行时环境兼容。比如说,使用Spark的应用程序代码根本就没必要改动。因而,工作负担就会落到最适合进行那些改动的人:库和框架的维护者的身上,而不是落在利用那些部分构建应用程序的人的身上。


Weld还表明,对按照需要为特定的应用程序生成代码的系统而言,LLVM是一种可靠的技术,而不会迫使开发人员手动部署自定义优化机制。MIT的前一个项目Tapir使用了经过改动的LLVM,可自动生成可以跨多个核心并行运行的代码。


Weld的另一个很先进的方面是:它是用Rust编写的,Mozilla的这种语言面向快速开发安全的软件。尽管历史较短,但Rust拥有一个活跃的、不断壮大的社区,这些专业开发人员不想为了安全而牺牲速度,或者为了速度而牺牲安全。


之前坊间谈论用Rust改写现有的应用程序,但是克服惯性很难。像Weld这些崭新项目没有现有的依赖关系,随着不断成熟起来,可能会成为这种语言的旗手。


以上是关于用Rust语言编写的Weld可以让Spark和TensorFlow在速度上提升几个数量级!的主要内容,如果未能解决你的问题,请参考以下文章

为了让 Android 更安全,谷歌推荐开发者使用 Rust 编写系统代码

#yyds干货盘点#为什么要学习Rust?

Spark支持通过GO语言编写程序吗

纯Rust编写的机器学习框架Neuronika,速度堪比PyTorch

牛人用 Rust 重写了 Apache Spark,并把它开源了

用欧拉计划学Rust语言(第17~21题)