关于python:基于MaxCompute分布式Python能力的大规模数据科学分析

5次阅读

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

简介:如何利用云上分布式 Python 减速数据迷信。如果你相熟 numpy、pandas 或者 sklearn 这样的数据科学技术栈,同时又受限于平台的计算性能无奈解决,本文介绍的 MaxCompute 能够让您利用并行和分布式技术来减速数据迷信。也就是说只有会用 numpy、pandas 和 scikit-learn 之一,就会用 MaxCompute 分布式 Python 的能力。

本文作者 孟硕 阿里云智能 产品专家

一、Python 生态的重要性

Why Python

Python has grown to become the dominant language both in data analytics, and general programming。

依据技术问答网站 stack overflow 统计,Python、C#、Javascript、java、php、C++、SQL、R、statistics 这些编程语言从 2009 年至 2021 年的趋势图如下图所示。能够看出 Python 的趋势是出现上涨趋势,特地是在数据分析和数据迷信畛域,简直是 top one 的编程语言。这是 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、Power BI,或者是数据迷信畛域常常用到的软件 SaaS。

这就是整个数据科学技术栈比拟残缺的一个视图。咱们从编程语言切入,发现如果要实现大规模数据的数据迷信是须要方方面面的考量。

二、MaxCompute 分布式 Python 能力介绍

MaxCompute 分布式 Python 技术 – PyODPS

MaxCompute 是一款 SaaS 模式的云数据仓库,基于 MaxCompute 是有兼容 Python 的能力。

PyODPS 是 MaxCompute 的 Python 版本的 SDK,它提供了对 MaxCompute 对象的基本操作;并提供了 DataFrame 框架(二维表构造,能够进行增删改查操作),能在 MaxCompute 上进行数据分析。

PyODPS 提交的 SQL 以及 DataFrame 作业都会转换成 MaxCompute SQL 分布式运行;如果第三方库,能以 UDF+SQL 的模式运行,也能够分布式运行。

如果须要 Python 把作业拆成子工作分布式来运行,比方大规模的向量计算原生 Python 没有分布式能力,这时候举荐用 MaxCompute Mars。是能够把 Python 工作拆分成子工作进行运行的框架。

Dome 实际

自定义函数中应用三方包

如果不是单纯运行 Python,须要借助一些 Python 第三方包,这个 MaxCompute 也是反对的。

流程如下:

Step1

确定应用到的第三方包

sklearn,scipy

Step2

找到对应报的所有依赖

sklearn,scipy,pytz,pandas,six,python-dateutil

Step3

下载对应的三方包(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.zip

Step4

上传资源变成 MaxCompute 的一个 Resource 对象。

这样咱们去创立函数,再援用自定义函数,就可能应用到第三方包。

自定义函数代码

def test(x):
    from sklearn import datasets, svm
    from scipy import misc
    import numpy as np
    
    iris = datasets.load_iris()
    clf = svm.LinearSVC()
    clf.fit(iris.data, iris.target)
    pred = clf.predict([[5.0, 3.6, 1.3, 0.25]])
    assert pred[0] == 0
    assert misc.face().shape is not None
    return x

MaxCompute 分布式 Python 技术 – Mars

我的项目名字 Mars

最早是 MatrixandArray;登陆火星

为什么要做 Mars

为大规模科学计算设计的:大数据引擎编程接口对科学计算不太敌对,框架设计不是为科学计算模型思考的

传统科学计算基于单机,大规模科学计算须要用到超算

Tips 科学计算:计算机梳理数据:Excel-> 数据库 (MySQL)-> Hadoop, Spark, MaxCompute 数据量有 了很大变动,计算模型没有变动,二维表,投影、切片、聚合、筛选和排序,基于关系代数,集合论;科学计算根底构造不是二维表:例如图片 2 维度,每个像素点不是一个数字(RGB+α 通明通道)

传统 SQL 模型解决能力有余:线性代数,行列式的相乘,现有数据库效率低
现状 R,Numpy 单机基于单机;Python 生态的 Dask 大数据到科学计算的桥梁

案例

客户 A MaxCompute 现有数据,须要针对这些 百亿数据 TB 级别的数据相乘;现有 MapReduce 模式性能低;用 Mars 就能够高效的解决;目前是惟一一个大规模科学计算引擎

减速数据迷信的新形式

减速数据迷信的形式如下图所示。

基于 DASK 或者是 MaxCompute Mars 其实是 Scale up 和 Scale out 兼容的形式。在下图左下代表单机运行 Python 的库做数据迷信的一个形式。大规模超算的思路是 Scale up,也就是线上垂直扩散,减少硬件能力,比方能够利用多核,以后每台电脑或服务器上不止一核,包含 GPU、TPU、NPU 等做深度学习的硬件。能够把 Python 移植到这些硬件上做一些减速。这里的技术蕴含比方 Modin 是做多核减速 pandas。在右下,也有一些框架在做分布式 Python,比方 RAY 是蚂蚁的一款框架服务,实质上 Mars 是能够运行在 RAY 上,相当于 Python 生态的一个调度,一个 kubernetes。DASK 也是在做分布式 Python,包含 Mars。当然,最佳的模式是 Scale up 和 Scale out 两种做一个组合。这样的益处是,能够做分布式,在单节点上也能够利用硬件能力。Mars 以后只能在大规模集群上,单机配置在 GPU 集群。

散布 Python 的设计逻辑

Mars 实质上设计思路是把数据迷信库分布式化掉,比方 Python,能够把 Dataframe 做一个拆分,包含 Numpy,Scikit-Learn。

把大规模作业拆分成小作业来做分布式计算。自身框架就是拆成作业用的,首先客户端提交一个作业,Mars 框架把作业拆分,做一个 DAG 图,最初汇总收集计算结果。

Mars 场景 1 CPU 和 GPU 混合计算

1、平安和金融畛域,传统大数据平台开掘周期长,资源缓和,期待周期长。

2、Mars DataFrame 减速数据处理:大规模排序;统计;聚合剖析。

3、Mars learn 减速无监督学习;Mars 拉起分布式深度学习计算。

4、应用 GPU 减速特定计算。

Mars 场景 2 可解释性计算

1、广告归因 & 洞察特色的解释算法,自身计算量微小,耗时长。

2、应用 Mars Remote 将计算用数十台服务器进行减速,晋升百倍性能。

Mars 场景 3 大规模 k - 最邻近算法

1、Embedding 的风行使得用向量表述实体十分常见。

2、Mars 的 NearestNeighbors 算法兼容 scikit-learn。暴力算法在 300 万向量和 300 万向量计算 top10 类似计算(9 万亿次向量比对)中,用 20 个 worker 两个小时计算实现,大数据平台基于 SQL+UDF 的形式无奈实现计算。更小规模 Mars 相比大数据平台性能晋升百倍。

3、Mars 反对分布式的形式减速 Faiss、Proxima(阿里达摩院向量检索库),达到千万和亿级别规模。

三、最佳实际

Mars 自身会集成一些 Python 第三方包,根本支流机器学习和深度学习的库都蕴含在外面。下方 Demo 讲一个应用 Mars 做智能举荐,用 lightgbm 做一个分类算法,比方有一些优惠判断是不是给某些用户做推送。

Mars 包含的第三方包:

https://pyodps.readthedocs.io…

第一张图上次要步骤是通过 AK、project 名字、Endpoint 信息连贯到 MaxCompute。接下来创立一个 4 节点,每个节点 8 core,32G 的集群,利用 extended 扩大包,并生成 100w 用户 64 维度形容信息的训练数据。

利用 Lightgbm 2 分类算法的模型训练:

将模型以 Create resource 形式传到 MaxCompute 作为 resource 对象,筹备测试集数据

应用测试测试集数据验证模型,得出分类:

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

正文完
 0