一、Mars简介
Mars是阿里开源的、基于Python的大规模计算框架。简单理解,Mars是numpy、pandas、scikit-learn、statsmodels、XGBoost等数据处理、机器学习中常用Python库(只能单机使用)的分布式版本合集。同时,Mars也是基于张量的,与TensorFlow、PyTorch也有很好的交互性。下图是官网中展示的Mars架构概览图。
二、安装部署
Mars既支持在单机中安装,也支持在集群中安装。在单机上安装,Mars支持在Windows、MacOS或Linux系统上安装,只需要在联网环境下执行如下命令即可。
pip install pymars
下图是笔者在Windows10系统通过Anaconda3安装的3.8版本Python环境中安装Mars的截图,可以看到成功安装了0.9.0版本的Mars。
但是在Jupyter Notebook中导入mars.tensor包时发生报错,报错信息为“ImportError: DLL load failed while importing \_arpack: 找不到指定的程序。”如下两图所示,
在百度中搜索此报错信息,发现大部分帖子都说是与Anaconda自带的scipy包有关,再次回看上述报错发生的位置,发现也是与scipy包有关,如下图所示,
按照一篇帖子中提到的方法,先卸载Anaconda自带的scipy包,再从豆瓣镜像中安装scipy包,即可解决此问题。
如下图所示,Anaconda自带的scipy版本为1.6.2。
依次执行如下命令,先卸载Anaconda自带的scipy包,再从豆瓣镜像中安装scipy包,
pip uninstall scipy
pip install scipy -i https://pypi.douban.com/simple
卸载及安装过程如下图所示,
成功安装1.9.1版本scipy包之后,重启此Jupyter Notebook的内核,再次导入mars.tensor包,即可正常执行Mars。
在集群中安装,Mars既支持在集群中安装部署Mars集群,也支持在现有的Ray、Kubernetes、YARN集群中安装部署,使Mars可以快速灵活的在集群中完成安装部署,并与其它已部署集群框架联合,快速集成进现有业务场景中使用。Mars在各类集群中的安装部署步骤,官方文档中已经作了详细的介绍,这里先不展开,之后在不同类型集群中具体使用时再作介绍,先贴出官方文档中有关安装部分的地址,以供大家参考。
https://docs.pymars.org/zh_CN/latest/installation/index.html
三、在单机上的使用
Mars在使用上充分尊重了Python用户对Numpy、Pandas等包的现有使用习惯,无需更改Numpy、Pandas中的语法,只需更改包的别名,即把Numpy的np改成Mars的mt,把Pandas的pd改成Mars的md,就可以使用原有的代码逻辑,借助Mars框架,对海量数据进行大规模计算了,极大的降低了Mars的学习成本,真正实现了开箱即用的效果。
下图是在使用2亿条二维随机数组计算圆周率的示例中,使用Numpy和Mars的代码对比,可以看到除了更换一下包的别名,其余代码均未更改;而且即便是在单机的环境下运行,在处理相同数据量的情况下,Mars的代码执行时间也远小于Numpy的执行时间,性能上也得到了较大的提升。
不过这个需要注意一点,Mars是通过执行session来执行大规模数据计算操作的,所以在执行计算代码之前,最好先使用mars.new_session()语句提前创建一个session,因为创建一个新的session也是会花费一些时间的,如下图所示。
在使用Pandas做数据处理中,最方便的就是使用DataFrame格式,Mars中也同样保留了Pandas中DataFrame语法,只需要把Pandas的pd改成Mars的md即可,而且Mars还开发了将Pandas的DataFrame快速转换为Mars的DataFrame的方法,实现了Pandas向Mars完美扩展,代码如下图所示。
四、后续
使用Mars在国产中标麒麟操作系统搭建的集群中对海量数据进行分布式计算、机器学习模型和深度学习模型,对接国产达梦数据库的数据计算业务等学习笔记,在整理好之后会陆续更新,敬请期待。