基于maxcompute分布式python能力的大规模数据科学分析(代码片段)

阿里云云栖号 阿里云云栖号     2023-01-06     313

关键词:

简介: 如何利用云上分布式 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生态的发展趋势。当然,在数据分析数据科学机器学习这个领域,不只是有编程语言这一个因素。

统计来自 Stack Overflow Trends

数据科学技术栈

在数据科学领域编程语言只是一个方面,语言不止包含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 包括的第三方包:

Mars 三方库集成 — PyODPS 0.10.7 文档

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

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

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

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

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

基于maxcompute的实时数据处理实践

简介: MaxCompute通过流式数据高性能写入和秒级别查询能力(查询加速),提供EB级云原生数仓近实时分析能力;高效的实现对变化中的数据进行快速分析及决策辅助。当前Demo基于近实时交互式BI分析/决策辅助场景,... 查看详情

maxcompute-odps重装上阵 第六弹-userdefinedtype(代码片段)

MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台,尤其在集团内部得到广泛应用,支撑了多个BU的核心业务。MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力,提高广大ODP... 查看详情

阿里云云原生一体化数仓—湖仓一体新能力解读

一、基于MaxCompute的湖仓一体架构更新基于MaxCompute云数据仓库的湖仓一体架构近期进行架构升级。了解MaxCompute的同学可能比较清楚,MaxCompute有两层结构,需要先创建Project,在Project里面创建表、资源等。传统数据库&#x... 查看详情

maxcompute理解数据运算和用户的大脑:基于代价的优化器

...术峰会上,阿里云大数据计算平台架构师林伟做了题为《MaxCompute的大脑:基于代价的优化器》的分享,为大家分享阿里巴巴大数据计算服务的大脑——基于代价的优化器的设计和架构。更多精彩内容参见云栖社区大数据频道htt 查看详情

阿里云云原生一体化数仓-数据安全能力解读

MaxCompute产品简介MaxCompute是一款多功能、低成本、高性能、高可靠、易于使用的数据仓库和支持全部数据湖能力的大数据平台,支持超大规模、serverless和完善的多租户能力,内建企业级安全能力和管理功能,支持数据... 查看详情

dataworks调度配置最佳实战

摘要:DataWorks基于MaxCompute作为核心的计算、存储引擎,提供了海量数据的离线加工分析、数据挖掘的能力。通过DataWorks,可对数据进行数据传输、数据转换等相关操作,从不同的数据存储引入数据,对数据进行转化处理,最后... 查看详情

学术顶会再突破!计算平台maxcompute论文入选国际顶会vldb2021

简介: VLDB2021上,阿里云计算平台MaxCompute参与的论文入选,核心分布式调度执行引擎Fangorn、基于TVRCost模型的通用增量计算优化器框架Tempura等分别被IndustryTrack、ResearchTrack录取。一、顶会概览VLDB2021上,阿里云计... 查看详情

maxcompute执行引擎核心技术dag揭秘

简介: 作为业界少有的EB级数据分布式平台,MaxCompute每天支撑上千万个分布式作业的运行。这些作业特点各异,既有包含数十万计算节点的超大型作业,也有中小规模的分布式作业。不同用户对于不同规模/特点... 查看详情

maxcompute执行引擎核心技术dag揭秘

简介:作为业界少有的EB级数据分布式平台,MaxCompute每天支撑上千万个分布式作业的运行。这些作业特点各异,既有包含数十万计算节点的超大型作业,也有中小规模的分布式作业。不同用户对于不同规模/特点的... 查看详情

青云指南

Spark指南Spark是继Hadoop之后新一代的大数据分布式处理平台。它是一个基于内存、容错型的分布式计算引擎,与HadoopMapReduce相比,计算速度要快100倍。Spark卓越的用户体验以及统一的技术堆栈基本上解决了大数据领域所有的核心问... 查看详情

maxcompute中的codegeneration技术简介

...规模OLAP系统,特别是大规模分布式OLAP系统中的重要性。MaxCompute采用了CodeGeneration技术来提高计算效率。在MaxCompute前言在《数据库系统中的CodeGeneration技术介绍》中,我们简单介绍了一下CodeGeneration技术及 查看详情

基于maxcompute+pai的用户增长方案实践

简介: 如何通过PAI+MaxCompute完成用户增长模型AARRR全链路,包含拉新、促活、留存、创收、分享。本文作者李博阿里云智能高级产品专家在过去一年阿里云PAI机器学习团队做了很多偏业务的实践,其中有一条就是... 查看详情

使用airflow调度maxcompute

简介: airflow是Airbnb开源的一个用python编写的调度工具,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行,通过python代码定义子任务,并支持各种Operate操作器,灵活性大࿰... 查看详情

图解大数据|基于sparkrdd的大数据处理分析(代码片段)

RDD(弹性分布式数据集合)是Spark的基本数据结构,Spark中的所有数据都是通过RDD的形式进行组织。本文讲解RDD的属性、创建方式、广播与累加器等重要知识点,并图解RDD高频算子。作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech... 查看详情

hadoop以及相关组件介绍以及个人理解

...也有近一年半时间了,不过我平时的开发平台是阿里云的Maxcompute,通过这么长时间的开发,对数据仓库也有了一定的理解,ETL这些经验还算比较丰富。但是由于Maxcompute是一个更简单的大数据开发平台,导致个人在分布式计算的... 查看详情

supermap基于spark的大数据分析基础环境安装及空间大数据分析实验(代码片段)

本文主要记录SuperMap基于Spark的分布式空间分析功能,在分析功能之前,会先安装Spark分布式环境。Hadoop环境是Spark安装的前置环境,所以会先安装Hadoop,再安装Spark。持续更新中…1.Hadoop1.1.安装前环境准备在安装had... 查看详情

基于maxcompute的智能推荐解决方案

简介:在互联网行业红利已过、在获客成本越来越高、在用户在线时长全网基本无增长以及信息大爆炸的情况下,如何更好的转化新用户和提升老用户粘性就变得至关重要,智能化的个性化推荐无疑是经过验证的重要... 查看详情

基于maxcompute+hologres的人群圈选和数据服务实践(代码片段)

简介: 本文主要介绍如何通过MaxCompute进行海量人群的标签加工,通过Hologres进行分析建模,从而支持大规模人群复杂圈选场景下的交互式体验,以及基于API的数据服务最佳实践。本文作者刘一鸣阿里云智能高级... 查看详情