关于jquery:直播回顾Mars应用与最佳实践

25次阅读

共计 3614 个字符,预计需要花费 10 分钟才能阅读完成。

简介: 本文首先对 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 取代循环。

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

正文完
 0