共计 2743 个字符,预计需要花费 7 分钟才能阅读完成。
简介: 本文从数据迷信概念、背景和现状切入,引出减速数据迷信的新形式 Mars,并介绍了 Mars 具体能解决的一些问题和背地的逻辑、哲学,同时对 Mars 整体数据处理流程进行了介绍。
本文分为 4 个局部:
- Mars 的背景和现状
- Mars 解决了什么问题
- Mars 背地的哲学
- 总结与瞻望
一、Mars 的背景和现状
说到减速数据迷信的新形式,就不得不说什么是数据迷信,以下是维基的定义:
数据迷信通过使用各种相干的数据来帮忙非专业人士来了解问题。第一,它的指标是从数据中提取输出价值的局部,第二,它要生产数据产品,第三它联合了十分多重要的技术,包含数学、统计、机器学习、可视化,最初,它须要真正解决问题。
它蕴含三个方面,计算机科学、数学和统计、畛域和商业常识。它们联合起来别离是机器学习、软件开发和传统钻研,两头是数据迷信。
数据科学技术栈蕴含语言、数据分析、数据工程、机器学习、Web 开发、运维和商业智能。每个技术栈都蕴含不同的工具,提供不同的数据服务。
传统 Python 数据迷信栈的三大底座是 NumPy、Pandas 和 SciPy。NumPy 是最外围的局部,它用来做数值计算,简直其余所有 Python 的数据科学技术栈都建设在 NumPy 上,因为它有最根底的数据结构,也就是多维数组;另外,Pandas 也用 NumPy 实现,它下面有很多 API 来进行剖析操作;而 SciPy 次要负责科学计算。在此基础上,是机器学习和可视化,同时还有丰盛的 Python 函数。
下面是 Python 数据科学技术栈整体的情况,他们有几大益处,比方宽泛应用,是事实标准;上手成本低,容易为初学者和学生入门;和语言联合严密,能用 Python 来组织函数调用。然而它们都是单机的库,不能解决很大的数据量,所以须要用到大数据的数据工程技术栈,比方 Hadoop、Hive、Spark 等。它们尽管反对多语言,没有强绑定,然而学习门槛比拟平缓,也须要对系统自身有足够的理解。做数据迷信须要把精力放在数据自身,而不是工具,然而这几个库让工作围绕着库开展,而非数据。因而,咱们是否能把这两个工作连接起来,利用传统的技术价值而不是关注大数据系统自身,来解决很多问题。
当初大家说摩尔定律曾经生效,咱们能够回顾一下它的历史。晚期它通过简单指令集和精简指令集的形式让速度晋升,然而随着缩放比例定律和阿姆达尔定律的终结,将来是不是要 20 年能力达到 2 倍效率的晋升呢?
另外随着深度学习、机器学习和 AI 的炽热,机器学习模型也会越来越大,它的训练曾经呈指数级增长,然而摩尔定律并没有追上机器学习模型训练倒退的速度。
另外一个现状就是技术栈的问题,NumPy、Pandas 等它们更多只能在单核上来利用计算,然而阿姆达尔定律下的核数是会越来越多,所以并没有很好地进行利用。同时,不论是计算量还是数据规模的增长速度,都超过了摩尔定律的速度,所以也不能用单机解决问题。
基于以上,减速数据迷信次要有两种形式。第一是 Scale up,利用多核和更好的硬件,比方 GPU、FPGA 和 TPU 等,以及现有的库,包含 Modin、CuPy、Rapids 等来晋升效率。第二是 Scale out,利用分布式的形式来减速,因为单核的性能总归是无限的,能够利用 Ray、Dask 和 Modin 等。而联合 Scale up 和 Scale out,就能够构建一个大规模的更好的硬件集成,比方明天介绍的减速数据迷信的新形式 Mars。
二、Mars 解决了什么问题
Mars 就是咱们试图构建的“桥”,能来兼顾小规模和大规模数据处理。大规模数据处理能构建集群,有三种次要形式,第一是在物理机上,第二是 kubernetes,第三是 Hadoop Yarn 的调度器上,拉起 Mars 的集群。
Mars 的外围根底局部对应着传统 Python 数据技术栈,比方 Mars Tensor 对应 NumPy,DataFrame 对应 Pandas 等。而构建在这个根底之上的,是 Mars Learn 模块,它能够兼容 Scikit-learn API,能简略地进行更大数据规模的分布式解决。此外,Mars 还反对深度学习和机器学习的框架,比方能轻松运行 TensorFlow、PyTorch 等,而且可视化也能够在 Mars 上发表。除此之外,Mars 还反对了丰盛的数据源。
从传统 Python 技术栈到 Mars 也非常简单,比方在 NumPy 和 Pandas 里要变成 Mars,只须要替换 import,而后前面变为提早执行即可。
一般的 Python 函数,在调用的时候变成 mr.spawn 来提早这个过程,最初通过 execute 来并发执行,不必放心 Mars 是运行在单机上还是分布式运行。
而 Mars 上的 TensorFlow 大部分也一样,区别在于 main 函数局部的变动。
三、Mars 背地的设计哲学
第一是分而治之,不反复造轮子。比方创立一个 Mars 的 Tensor,对外面所有元素进行求和操作,在触发 execute 之后,Mars 会生成小工作的计算图,它能够将小任务调度到分布式的集群中来运行。此外还做了很多优化,通过算子交融来晋升性能。
第二,在 Mars 的世界,所有皆可并行。在 Mars 里实现了并行正则排序算法,比方创立一个 cluster,有 5 个 Worker,每个 Worker 是 8 核 32G,那么相比单机的 NumPy 函数,它晋升了 4 倍。
上面看下 Mars 整体数据的解决流程。咱们通过客户端的代码触发执行,生成一个粗粒度的计算图,而后通过 Web 服务器提交工作,并将工作转发给 Scheduler,而后在这里切分成小工作。随后,Scheduler 依据 Worker 工作负载的状况来把它散发到各个机器上运行,这里会用到调度的策略等等。这个过程中,Mars 会主动触发数据传输工作,保障在节点执行的时候它所有输出的数据都在这台机器上。此外 Mars 还会主动进行 Spill 操作,当咱们内存不够的时候,它会把不罕用的数据 Spill 到磁盘上,让 Mars 能够解决远超过这个内存能放下的数据规模。
四、总结与瞻望
首先 Mars 是齐全开源的我的项目,齐全遵循开源的标准,而且我的项目的 progress 都能在 GitHub 上看到;其次 Mars 有兼容性,它的 API 高度兼容 NumPy、Pandas 和 Scikit-learn;同时,它的单机、多核与分布式的解决性能也更高;最初是交互性,Mars Remote 能够把以前的代码变成分布式代码,并且外部也能够与第三方库做集成。
Github 地址:https://github.com/mars-project/mars
上面是对于 Mars 将来的瞻望,大家能够拜访专栏。将来咱们的开发计划重心放在晋升 Mars learn 的接口覆盖率和 Mars DataFrame 接口覆盖率上,对立单机和分布式执行层等等。
原文链接
本文为阿里云原创内容,未经容许不得转载。