简介: 本文首先对Mars的概念、功能、优势进行了介绍,随后,对Mars几个典型的应用场景进行介绍,并通过两个Demo展示了在使用Mars后数据科学性能的提升,最后总结了Mars的最佳实践,让使用Mars更高效便捷。

本文主要从以下几个方面展开:

  • Mars简介
  • 典型场景
  • Demo
  • 最佳实践

一、Mars简介

Mars是统一的数据科学平台,它用来加速传统的Python数据科学技术栈,在单机中也可以用多核加速,或用分布式来加速。Mars可以部署在单机的分布式集群,或者Kubernetes和Hadoop Yarn上。

Mars整个框架构建在单机的并行和分布式的这两个调度的基础之上,它的数据科学基础包括三个核心部分,Tensor、DataFrame和Remote。而构建在这个基础之上的,是Mars Learn模块,它可以兼容Scikit-learn API,能简单地进行更大数据规模的分布式处理。此外,Mars还支持深度学习和机器学习的框架,比如能轻松运行TensorFlow、PyTorch等,而且可视化也可以在Mars上完成。除此之外,Mars还支持了丰富的数据源。

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

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

而Mars上的TensorFlow大部分也一样,区别在于main函数部分的变化。最后,我们需要通过run_tensorflow_script的方式把脚本运行到Mars中。

二、典型场景

场景1. CPU和GPU混合计算

在安全和金融领域可以用Mars做CPU和GPU的混合计算,加速现有的工作流。

在这个领域,因为传统大数据平台挖掘周期长,资源紧张,需要很久来执行任务,不能达到客户需求。所以能用Mars DataFrame来加速数据处理,它可以做大规模数据排序,并帮助用户做高阶统计和聚合分析。

另外在安全领域有很多无监督学习的算法,Mars learn能加速无监督学习,同时拉起分布式深度学习计算加速现有的深度学习训练。之后,对于某些计算任务也可以利用GPU来加速。

场景2. 可解释性计算

在广告领域,在广告归因和洞察特征的解释算法中,因为本身计算量大,所以耗时很长。这种情况下,单机加速是比较困难的,基于传统大数据平台的分布式也不太灵活,但是通过Mars remote,可以很轻松地把计算分布到几十台机器上来加速,达到百倍的性能提升。

场景3. 大规模K-最邻近算法

Mars非常广泛地应用在K-最邻近算法中,因为Embedding越来越流行,它让向量表述实体非常常见。另外,Mars的NearestNeighbors算法兼容scikit-learn,它里面有暴力算法,而用户也需要暴力算法来进行大规模计算,可以通过多个worker来完成,从而让性能提升百倍。最后,Mars支持分布式的方式加速Faiss和Proxima,达到千万级别和上亿级别的规模。

三、Demo

Demo1. 分析豆瓣电影数据

我们从这个Demo看一下Mars如何加速pandas数据处理及其可视化。

开始演示之前我们需要安装Mars。这里已经创建了Jupyter,然后 pip install pymars。

安装之后,我们可以到IPython进行验证,可以看到下面的结果没有问题,接下来我们就可以进入到Jupyter notebook里。

我们开始demo。这个数据可以在GitHub地址下载,然后我们用pandas来分析电影的数据,使用ipython memory usage来查看内存使用。

我们的数据主要用到4个CSV文件,分别是movies、ratings、users和comments。

接下来根据上映日期统计有多少电影发布。这里先处理一下数据,让发行日期只取到年份,去掉日期,并对年份做聚合。

数据出来后,可以用pandas bokeh把图绘制出来,并通过交互式的方式查看。

接下来看电影评分的统计。首先把有评分的电影筛选出来,然后把豆瓣评分的数值数量从大到小进行排序。可以看到,最多的评分是6.8分。

同样,通过pandas bokeh把它画成柱状图,评分差不多呈现正态分布。

接下来做一个标签词云,看电影哪个标签词最多,这里从movies取出tags,用斜杠分割,然后max words是50。

接下来我们再对电影的Top K进行分析。首先按电影ID进行聚合,求出评价的平均值和个数。然后我们对评价个数进行过滤,从高到低,算出top20的电影。

然后做评论数据分析。因为评论是中文的,所以需要做一个分词,然后对每一句话做切分,在统计的时候进行排序。这里可以加一个进度条,在处理数据的时候方便看到进程。这个过程大概花了20分钟,所以在单机上跑大任务的时候对机器的压力还是比较大。

这是最终的词云图。

接下来我们用Mars做同样的分析任务。首先是对Mars环境进行部署,然后这里有5个worker,每个worker是8个CPU和32G内存。还是一样,我们打开内存的监控,做一些import,这里把import Pandas替换成import mars.dataframe,然后Numpy是import mars.tensor。

随后我们在SDK里来创建to mars dataframe,这一步几乎没有用到内存,最终得到的结果也和之前一样。

我们用同样的方式来分析上映日期的电影个数和电影评分。得益于Mars跟Pandas的高度兼容,我们也能用Pandas bokeh来呈现结果。

电影评论的分析也一样,但是在显示的时候,Mars只会拉取头几条和最后几条,所以客户端几乎没有内存使用。而且整个running过程只用了45秒,与之前的20分钟相比提升了几十倍性能。

接下来我们用Mars做一个地区的统计,让它有一个动态的效果。首先我们看一下刚刚计算过的已经released的电影dataframe,然后取1980-2019这几年的电影,而regions部分可能有多个,所以用斜杠分割开,最后执行排出top10地域电影。

然后我们通过bar chart race来生成动态效果。

Demo2. 豆瓣电影推荐

第二个demo我们会基于刚才豆瓣电影的数据来做一个推荐。我们首先会用TensorFlow Mars来进行训练,接着用Mars分布式KNN算法来加速召回计算。

我们先使用单机的技术栈,这个数据已经分成了训练和测试集,所以我们先to pandas把它下载到本地,接着来对用户和电影做一个label encode,把它变成一个数字,而不是字符串的值。随后我们对数据进行处理,先按照时间排序,然后按照用户进行分组,生成分组聚合的结果。

接下来开始训练,我们需要用TensorFlow训练出代表user的embedding。之前说过embedding,可以对任一实体用向量描述,所以得到embedding之后,我们在给用户推荐电影时就可以查找在这个向量空间里面跟这个用户比较接近的电影embedding。

训练后我们可以保存向量,这里的搜索规模是60万乘7万,单机花费了22分钟,但如果达到千万乘千万级别,搜索耗时要超过800小时,这是不可接受的。

接下来我们看如何用Mars来实现这一过程。首先创建一个Mars集群,这里有8个worker。然后和上面一样,对数据进行预处理,做label encode,按时间排序,按user分组生成分组聚合。

这里唯一的区别是Mars会自动推断DataFrame的结果,如果推断失败就需要用户自己提供dtypes和output type。

然后是执行和训练。这里TensorFlow可以写Python文件,不用写到notebook里。

接着我们用Mars的run tensorflow script来跑这个脚本,然后指定worker是8。可以看到,执行的时间缩小到了23分钟。同时,我们也拿到了最终的embedding,用Mars做embedding只需1分25秒,比刚刚的时间提升个十倍左右。1400万乘1400万也可以稳定在1小时左右,与单机800个小时相比提升是非常巨大的。

四、最佳实践

首先尽量不要使用to pandas和to numpy,因为这会把Mars的分布式数据变成单机的数据,失去了Mars本身的优势,除非这个操作不能用Mars实现;其次,Mars tensor、DataFrame和learn由于本身受限于API的原因需要自己写一些函数,所以可以考虑用Mars remote来加速,把操作抽象成函数;第三,Pandas的加速技巧在Mars DataFrame依然适用,比如可以使用更高效的数据类型,可以优先使用内建操作,使用apply取代循环。

原文链接
本文为阿里云原创内容,未经允许不得转载。

「直播回顾」Mars应用与最佳实践的更多相关文章

  1. CODING DevOps 线下沙龙回顾二:SDK 测试最佳实践

    讲师:潘志刚 声网质量效能部门负责人,超过 14 年服务器.移动终端.音视频编解码以及汽车电子等跨行业从业经历,负责建立测试基础架构和自动化测试方案,主持搭建持续集成测试生态体系.现任声网质量效能部门 ...

  2. 「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践

    Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs对HBase数据进行增删改查,构建二级索引.当然,开源产品嘛,自然需要注意“避坑”啦,阿丸会把使用方式和最佳实践都告 ...

  3. 「从零单排HBase 06」你必须知道的HBase最佳实践

    前面,我们已经打下了很多关于HBase的理论基础,今天,我们主要聊聊在实际开发使用HBase中,需要关注的一些最佳实践经验. 1.Schema设计七大原则 1)每个region的大小应该控制在10G到 ...

  4. 硬吃一个P0故障,「在线业务」应该如何调优HBase参数?

    1.背景 由于种种原因,最近将核心业务生产使用的HBase迁移到了云上的弹性MapReduce(EMR)集群上,并使用了EMR的HBase组件默认参数配置. 结果在流量高峰期出现了宿主机故障,挂掉了两 ...

  5. fir.im Weekly - 如何打造 Github 「爆款」开源项目

    最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多 ...

  6. NLP领域的ImageNet时代到来:词嵌入「已死」,语言模型当立

    http://3g.163.com/all/article/DM995J240511AQHO.html 选自the Gradient 作者:Sebastian Ruder 机器之心编译 计算机视觉领域 ...

  7. 新时代运维重器 Tencent Hub 最佳实践——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲者:邹辉 腾讯云 PaaS 产品总监 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来" ...

  8. Azure 进阶攻略 | 上云后的系统,「门禁」制度又该如何实现?

    各位办公室白领们,不妨回想一下自己每天去公司上班时的一些细节. 为避免「闲杂人等」进入工作场所,我们需要证明自己是这家公司的员工才能进入,对吧!所有员工,无论所属部门或职位,都必须先证明自己身份,例如 ...

  9. ERNIE:知识图谱结合BERT才是「有文化」的语言模型

    自然语言表征模型最近受到非常多的关注,很多研究者将其视为 NLP 最重要的研究方向之一.例如在大规模语料库上预训练的 BERT,它可以从纯文本中很好地捕捉丰富的语义模式,经过微调后可以持续改善不同 N ...

  10. SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

随机推荐

  1. Android 桌面小组件使用

    原文: Android 桌面小组件使用-Stars-One的杂货小窝 借助公司上的几个项目,算是学习了Android桌面小组件的用法,记下踩坑记录 基本步骤 1.创建小组件布局 这里需要注意的事,小组 ...

  2. 精通 Grails: 测试 Grails 应用程序

    排除 bug,构建可执行文档 Grails 可以轻松确保您的应用程序从始至终都远离 bug.这还有另一个好处,您可以利用测试代码生成一组通常是最新的可执行文档.本月 Grails 专家 Scott D ...

  3. JSF+EJB+JPA之整体思想

    序言: JSF+EJB+JPA 其实没有想象中的难,不过要做好应用以及在合适的地方建立应用,才是真正的难点. 好的技术在不合适的地方做了应用,那也只能是垃圾. 所以这个东西并不适合于太小规模的企业应用 ...

  4. 从零开始写 Docker(七)---实现 mydocker commit 打包容器成镜像

    本文为从零开始写 Docker 系列第七篇,实现类似 docker commit 的功能,把运行状态的容器存储成镜像保存下来. 完整代码见:https://github.com/lixd/mydock ...

  5. windows 10 wsl 环境 docker 无法正常启动 -The system cannot find the file specified

    错误信息: error during connect: in the default daemon configuration on Windows, the docker client must b ...

  6. Java 8 内存管理原理解析及内存故障排查实践

    作者:vivo 互联网服务器团队-  Zeng Zhibin 介绍Java8虚拟机的内存区域划分.内存垃圾回收工作原理解析.虚拟机内存分配配置,介绍各垃圾收集器优缺点及场景应用.实践内存故障场景排查诊 ...

  7. ADAS-AEB系统详解

    ADAS-AEB系统详解 AEB即自动紧急制动(Automatic Emergency Braking),其通过雷达.摄像头共同监测前方车辆以及行人情况,若探测到潜在碰撞风险,系统将采取相应预警及制动 ...

  8. 【已解决】java.text.ParseException: Unparseable date

    今天在工作的时候遇到一个问题,我的一个字段queryDate保存不了,总是null值: java.text.ParseException: Unparseable date 报错的原因是日期格式转换错 ...

  9. Bochs调试指令

    Bochs   Bochs就像一台真机一样,处理器在加电之后,要开始取指令并执行指令. jmpf f000:e05b ;转移目标位置ROM-BIOS   如图在左侧显示了该指令所在的物理内存地址 0x ...

  10. Windows和Linux系统下的Conda环境迁移

    Motivation ​ 大家在学习Python的过程中,可能经常会遇到下面两种情况: 同一份代码,别人配置conda环境可以跑通,但你配置了N天,还不知道哪一步出现了差错,仍然跑不通代码,conda ...