「直播回顾」Mars:加速数据科学的新方式

本文分为4个部分:

  • Mars的背景和现状
  • Mars解决了什么问题
  • Mars背后的哲学
  • 总结与展望

一、Mars的背景和现状

说到加速数据科学的新方式,就不得不说什么是数据科学,以下是维基的定义:

「直播回顾」Mars:加速数据科学的新方式

数据科学通过运用各种相关的数据来帮助非专业人士来理解问题。第一,它的目标是从数据中提取输入价值的部分,第二,它要生产数据产品,第三它结合了非常多重要的技术,包括数学、统计、机器学习、可视化,最后,它需要真正解决问题。

它包含三个方面,计算机科学、数学和统计、领域和商业知识。它们结合起来分别是机器学习、软件开发和传统研究,中间是数据科学。

「直播回顾」Mars:加速数据科学的新方式

数据科学技术栈包含语言、数据分析、数据工程、机器学习、Web开发、运维和商业智能。每个技术栈都包含不同的工具,提供不同的数据服务。

「直播回顾」Mars:加速数据科学的新方式

传统Python数据科学栈的三大底座是NumPy、Pandas和SciPy。NumPy是最核心的部分,它用来做数值计算,几乎其他所有Python的数据科学技术栈都建立在NumPy上,因为它有最基础的数据结构,也就是多维数组;另外,Pandas也用NumPy实现,它上面有很多API来进行分析操作;而SciPy主要负责科学计算。在此基础上,是机器学习和可视化,同时还有丰富的Python函数。

「直播回顾」Mars:加速数据科学的新方式

上面是Python数据科学技术栈整体的状况,他们有几大好处,比如广泛使用,是事实标准;上手成本低,容易为初学者和学生入门;和语言结合紧密,能用Python来组织函数调用。但是它们都是单机的库,不能处理很大的数据量,所以需要用到大数据的数据工程技术栈,比如Hadoop、Hive、Spark等。它们虽然支持多语言,没有强绑定,但是学习门槛比较陡峭,也需要对系统本身有足够的了解。做数据科学需要把精力放在数据本身,而不是工具,但是这几个库让工作围绕着库展开,而非数据。因此,我们是否能把这两个工作连接起来,利用传统的技术价值而不是关注大数据系统本身,来解决很多问题。

「直播回顾」Mars:加速数据科学的新方式

现在大家说摩尔定律已经失效,我们可以回顾一下它的历史。早期它通过复杂指令集和精简指令集的方式让速度提升,但是随着缩放比例定律和阿姆达尔定律的终结,未来是不是要20年才能达到2倍效率的提升呢?

「直播回顾」Mars:加速数据科学的新方式

另外随着深度学习、机器学习和AI的火热,机器学习模型也会越来越大,它的训练已经呈指数级增长,但是摩尔定律并没有追上机器学习模型训练发展的速度。

「直播回顾」Mars:加速数据科学的新方式

另外一个现状就是技术栈的问题,NumPy、Pandas等它们更多只能在单核上来应用计算,但是阿姆达尔定律下的核数是会越来越多,所以并没有很好地进行利用。同时,不管是计算量还是数据规模的增长速度,都超过了摩尔定律的速度,所以也不能用单机解决问题。

「直播回顾」Mars:加速数据科学的新方式

基于以上,加速数据科学主要有两种方式。第一是Scale up,利用多核和更好的硬件,比如GPU、FPGA和TPU等,以及现有的库,包括Modin、CuPy、Rapids等来提升效率。第二是 Scale out,利用分布式的方式来加速,因为单核的性能总归是有限的,可以利用Ray、Dask和Modin等。而结合Scale up和Scale out,就可以构建一个大规模的更好的硬件集成,比如今天介绍的加速数据科学的新方式Mars。

「直播回顾」Mars:加速数据科学的新方式

二、Mars解决了什么问题

Mars就是我们试图构建的“桥”,能来兼顾小规模和大规模数据处理。大规模数据处理能构建集群,有三种主要方式,第一是在物理机上,第二是kubernetes,第三是Hadoop Yarn的调度器上,拉起Mars的集群。

Mars的核心基础部分对应着传统Python数据技术栈,比如Mars Tensor对应NumPy,DataFrame对应Pandas等。而构建在这个基础之上的,是Mars Learn模块,它可以兼容Scikit-learn API,能简单地进行更大数据规模的分布式处理。此外,Mars还支持深度学习和机器学习的框架,比如能轻松运行TensorFlow、PyTorch等,而且可视化也可以在Mars上宣布。除此之外,Mars还支持了丰富的数据源。

「直播回顾」Mars:加速数据科学的新方式

从传统Python技术栈到Mars也非常简单,比如在NumPy和Pandas里要变成Mars,只需要替换import,然后后面变为延迟执行即可。

「直播回顾」Mars:加速数据科学的新方式

普通的Python函数,在调用的时候变成mr.spawn来延迟这个过程,最后通过execute来并发执行,不用担心Mars是运行在单机上还是分布式运行。

「直播回顾」Mars:加速数据科学的新方式

而Mars上的TensorFlow大部分也一样,区别在于main函数部分的变化。

「直播回顾」Mars:加速数据科学的新方式

三、Mars背后的设计哲学

第一是分而治之,不重复造*。比如创建一个Mars的Tensor,对里面所有元素进行求和操作,在触发execute之后,Mars会生成小任务的计算图,它可以将小任务调度到分布式的集群中来运行。此外还做了很多优化,通过算子融合来提升性能。

「直播回顾」Mars:加速数据科学的新方式

第二,在Mars的世界,一切皆可并行。在Mars里实现了并行正则排序算法,比如创建一个cluster,有5个Worker,每个Worker是8核32G,那么相比单机的NumPy函数,它提升了4倍。

「直播回顾」Mars:加速数据科学的新方式

下面看下Mars整体数据的处理流程。我们通过客户端的代码触发执行,生成一个粗粒度的计算图,然后通过Web服务器提交任务,并将任务转发给Scheduler,然后在这里切分成小任务。随后,Scheduler根据Worker工作负载的情况来把它分发到各个机器上运行,这里会用到调度的策略等等。这个过程中,Mars会自动触发数据传输工作,保证在节点执行的时候它所有输入的数据都在这台机器上。此外Mars还会自动进行Spill操作,当我们内存不够的时候,它会把不常用的数据Spill到磁盘上,让Mars可以处理远超过这个内存能放下的数据规模。

「直播回顾」Mars:加速数据科学的新方式

四、总结与展望

首先Mars是完全开源的项目,完全遵循开源的规范,而且项目的progress都能在GitHub上看到;其次Mars有兼容性,它的API高度兼容NumPy、Pandas和Scikit-learn;同时,它的单机、多核与分布式的处理性能也更高;最后是交互性,Mars Remote可以把以前的代码变成分布式代码,并且内部也可以与第三方库做集成。

Github地址:https://github.com/mars-project/mars

「直播回顾」Mars:加速数据科学的新方式

下面是关于Mars未来的展望,大家可以访问专栏。未来我们的开发计划重心放在提升Mars learn的接口覆盖率和Mars DataFrame接口覆盖率上,统一单机和分布式执行层等等。

「直播回顾」Mars:加速数据科学的新方式

以上就是今天的课程,欢迎大家继续关注Mars。
戳我观看直播回放

上一篇:Mars 开源月报(2020.3)


下一篇:由支付宝瘫痪引发的灾备能力争议