基于MaxCompute分布式Python能力的大规模数据科学分析简介:如何在云端使用分布式Python加速数据科学。如果你熟悉numpy、pandas、sklearn等数据科学技术栈,但受限于平台的计算性能,本文介绍的MaxCompute可以让你使用并行和分布式技术加速数据科学。也就是说,只要你会用numpy、pandas、scikit-learn其中之一,你就会用到MaxCompute分发Python的能力。本文作者孟硕阿里云智能产品专家1.Python生态的重要性为什么PythonPython已经成长为数据分析和通用编程领域的主导语言。根据技术问答网站stackoverflow的统计,2009-2021年Python、C#、Javascript、java、php、C++、SQL、R等编程语言的趋势图统计如下下图。可以看出Python的趋势是呈上升趋势的,尤其是在数据分析和数据科学领域,几乎是顶级的编程语言。这就是Python生态的发展趋势。当然,在数据分析、数据科学和机器学习领域,编程语言并不是唯一的因素。统计数据来自https://insights.stackoverflo...数据科学技术栈只是数据科学领域编程语言的一个方面。语言不仅包括Python,还有数据分析师使用的SQL,或者传统的分析语言R,或者函数式编程语言Scala。第二个方面需要数据分析对应的库,比如NumPy、pandas等,或者基于可视化的库都会包含。运行在Python中的集群也会有一些运维技术栈在里面,比如运行在docker或者kubernetes上。如果要做数据分析和数据科学,前期需要清洗数据,有一些ETL过程。有些清洗不是一两步就能完成的,而是需要使用工作流来完成整个ETL过程。涉及最流行的Spark等组件,整个工作流调度Airflow,最终结果需要存储。一般使用PostgreSQL数据库或者内存数据库redis,外接一个BI工具显示最终结果。还有一些组件或者平台比如机器学习,TensorFlow,PyTorch等,如果是设计用于web开发,快速搭建一个前端平台,比如Flask等都会用到。最后,它包括一个商业智能软件,例如BI工具tableau、PowerBI,或者数据科学领域经常使用的软件SaaS。这是整个数据科学技术堆栈的一个相对完整的视图。我们从编程语言入手,发现要想实现大规模数据的数据科学,需要考虑方方面面。2.MaxCompute的分布式Python能力介绍MaxCompute的分布式Python技术——PyODPSMaxCompute是基于MaxCompute兼容Python的SaaS模式云数据仓库。PyODPS是MaxCompute的SDK的Python版本,提供了对MaxCompute对象的基本操作;还提供DataFrame框架(二维表结构,可增删改查),可用于MaxCompute上的数据分析。PyODPS提交的SQL和DataFrame作业会转换成MaxComputeSQL进行分布式运行;如果第三方库可以UDF+SQL的形式运行,也可以分布式运行。如果Python需要将作业拆分成子任务分布式执行,比如大规模向量计算,原生Python不具备分布式能力,那么推荐MaxComputeMars。它是一个可以将Python任务拆分成子任务来运行的框架。Dome在自定义函数中使用了第三方包。如果不简单地运行Python,则需要依赖一些第三方Python包。MaxCompute也支持这一点。流程如下:Step1确定sklearn使用的第三方包,scipyStep2找到sklearn的所有依赖,scipy,pytz,pandas,六,python-dateutilStep3下载对应的第三方包(pypi)python-dateutil-2.6.0.zip,pytz-2017.2.zip,six-1.11.0.tar.gz,pandas-0.20.2-cp27-cp27m-manylinux1_x86_64.zip,scipy-0.19.0-cp27-cp27m-manylinux1_x86_64.zip,scikit_learn-0.18.1-cp27-cp27m-manylinux1_x86_64.zipStep4上传的资源成为MaxCompute的Resource对象。这样我们就可以通过创建函数然后引用自定义函数的方式来使用第三方包了。自定义函数代码deftest(x):fromsklearnimportdatasets,svmfromscipyimportmiscimportnumpyasnpiris=datasets.load_iris()clf=svm.LinearSVC()clf.fit(iris.data,iris.target)pred=clf.predict([[5.0,3.6,1.3,0.25]])assertpred[0]==0assertmisc.face().shapeisnotNonereturnxMaxCompute分布式Python技术-火星项目名称Mars原为MatrixandArray;登陆火星为什么要做火星为大规模科学计算而设计:大数据引擎的编程接口对科学计算不是很友好,框架设计也没有为科学计算模型考虑。传统科学计算基于单机,大规模科学计算需要借助超算小技巧科学计算:计算机梳理数据:Excel->数据库(MySQL)->Hadoop、Spark、MaxCompute数据量变了一个很多,但是计算模型没变,二维表,投影,切片,聚合,过滤,排序,基于关系代数和集合论;科学计算的基本结构不是二维表:比如一张图片有两个维度,每个像素点都不是一个数字(RGB+α透明通道)。传统的SQL模型处理能力不足:线性代数、行列式相关R和Numpy单机都是基于单机的;Python生态Dask是大数据到科学计算的桥梁案例客户MaxCompute有现有的数据,需要对这百亿TB级别的数据进行倍增;现有的MapReduceMode性能低下;用火星可以高效解决;它是目前唯一的大规模科学计算引擎。一种加速数据科学的新方法加速数据科学的方法如下图所示。基于DASK或者MaxCompute的Mars其实是一种兼容的scaleup和scalingout的方式。下图的左下角代表了一种使用在单台机器上运行的Python库进行数据科学的方法。大规模超算的思路是Scaleup,即在线垂直扩散,增加硬件能力,比如使用多核。目前,每台计算机或服务器的核心都不止一个,包括GPU、TPU、NPU等深度学习硬件。Python可以移植到这些硬件上做一些加速。这里的技术包括,比如,Modin在做多核加速pandas。右下方还有一些框架在做分布式Python。比如RAY就是Ant的一个框架服务。本质上,Mars可以运行在RAY上,相当于Python生态的一个调度,一个kubernetes。DASK也在做分布式Python,包括Mars。当然最好的模式是Scaleup和Scaleout的结合。这样做的好处是可以分布式,也可以在单个节点上利用硬件能力。Mars目前只支持大规模集群,单机配置在GPU集群上。分发Python设计逻辑Mars本质上是为分发数据科学库而设计的。比如Python可以拆分Dataframe,包括Numpy和Scikit-Learn。将大型作业拆分为小型作业以进行分布式计算。该框架本身用于拆分作业。首先,客户提交一份工作。Mars框架将job拆分,做DAG图,最后收集并收集计算结果。火星场景1CPU和GPU混合计算1.安全和金融领域,传统大数据平台挖矿周期长,资源紧张,等待周期长。2、MarsDataFrame加速数据处理:大规模排序;统计数据;聚合分析。3.Marslearn加速无监督学习;火星拉起分布式深度学习计算。4.使用GPU加速特定计算。MarsScenario2可解释性计算1.广告归因&洞察特征的解释算法计算量大,耗时长。2.使用MarsRemote与数十台服务器一起加速计算,性能提升一百倍。MarsScenario3Large-Scalek-NearestNeighborAlgorithm1.Embedding的流行使得用向量表达实体变得非常普遍。2.Mars的NearestNeighbors算法兼容scikit-learn。在300万向量和300万向量计算top10相似度计算(9万亿向量比较)中,蛮力算法需要20个工人2小时完成计算,大数据平台无法基于SQL+UDF完成计算。小规模火星的性能是大数据平台的100倍。3、Mars支持分布式方法加速Faiss和Proxima(阿里达摩院矢量检索库),达到千万级、亿级规模。3.最佳实践Mars本身会集成一些Python第三方包,包括基本的主流机器学习和深度学习库。下面的demo讲的是用Mars做智能推荐,用lightgbm做分类算法。例如,一些折扣被判断为推送给某些用户。Mars自带的第三方包:https://pyodps.readthedocs.io...第一张图主要步骤是通过AK、项目名称、Endpoint信息连接MaxCompute。接下来创建4节点8核32G集群,应用扩展扩展包,生成100万用户64维描述信息的训练数据。使用Lightgbm2分类算法训练模型:在Createresource方法中将模型作为资源对象传给MaxCompute,准备测试集数据,使用test测试集数据验证模型,得到分类:原文链接正文本文为阿里云原创内容,未经许可不得转载。
