基于MaxCompute分布式Python能力的大规模数据科学分析
簡介:?如何利用云上分布式 Python 加速數(shù)據(jù)科學(xué)。 如果你熟悉 numpy、pandas 或者 sklearn 這樣的數(shù)據(jù)科學(xué)技術(shù)棧,同時(shí)又受限于平臺(tái)的計(jì)算性能無法處理,本文介紹的 MaxCompute 可以讓您利用并行和分布式技術(shù)來加速數(shù)據(jù)科學(xué)。也就是說只要會(huì)用 numpy、pandas 和 scikit-learn 之一,就會(huì)用 MaxCompute 分布式 Python 的能力。
本文作者 孟碩 阿里云智能 產(chǎn)品專家
一、Python 生態(tài)的重要性
Why Python
Python has grown to become the dominant language both in data analytics, and general programming。
根據(jù)技術(shù)問答網(wǎng)站stack overflow統(tǒng)計(jì),Python、C#、Javascript、java、php、C++、SQL、R、statistics這些編程語言從2009年至2021年的趨勢圖如下圖所示。可以看出Python的趨勢是呈現(xiàn)上漲趨勢,特別是在數(shù)據(jù)分析和數(shù)據(jù)科學(xué)領(lǐng)域,幾乎是top one的編程語言。這是Python生態(tài)的發(fā)展趨勢。當(dāng)然,在數(shù)據(jù)分析數(shù)據(jù)科學(xué)機(jī)器學(xué)習(xí)這個(gè)領(lǐng)域,不只是有編程語言這一個(gè)因素。
統(tǒng)計(jì)來自 Stack Overflow Trends
數(shù)據(jù)科學(xué)技術(shù)棧
在數(shù)據(jù)科學(xué)領(lǐng)域編程語言只是一個(gè)方面,語言不止包含Python,也有數(shù)據(jù)分析人員用SQL,或者傳統(tǒng)分析語言R,或者是函數(shù)式編程語言Scala。第二個(gè)方面需要有數(shù)據(jù)分析對(duì)應(yīng)的庫,比如NumPy、pandas等,或者是基于可視化的庫會(huì)在里面。Python運(yùn)行的集群還會(huì)有一些運(yùn)維的技術(shù)棧在里面,比如可以運(yùn)行在docker或者是kubernetes上。如果要做數(shù)據(jù)分析數(shù)據(jù)科學(xué),前期需要對(duì)數(shù)據(jù)進(jìn)行清洗,有一些ETL的過程。有一些清洗不只是一兩步能完成的,需要用工作流去完成整體的ETL的過程。里面涉及到最流行的組件比如Spark,整個(gè)工作流調(diào)度Airflow,最終結(jié)果做一個(gè)呈現(xiàn),就需要存儲(chǔ),一般用PostgreSQL數(shù)據(jù)庫或者內(nèi)存數(shù)據(jù)庫redis,對(duì)外再連接一個(gè)BI工具,做最終結(jié)果的展示。還有比如機(jī)器學(xué)習(xí)的一些組件或者平臺(tái),TensorFlow、PyTorch等。如果是設(shè)計(jì)到Web開發(fā),快速搭建起一個(gè)前端平臺(tái),還會(huì)用的比如Flask等。最后包括一個(gè)商業(yè)智能的軟件,比如有BI工具tableau、Power BI,或者是數(shù)據(jù)科學(xué)領(lǐng)域經(jīng)常用到的軟件SaaS。
這就是整個(gè)數(shù)據(jù)科學(xué)技術(shù)棧比較完整的一個(gè)視圖。我們從編程語言切入,發(fā)現(xiàn)如果要實(shí)現(xiàn)大規(guī)模數(shù)據(jù)的數(shù)據(jù)科學(xué)是需要方方面面的考量。
二、MaxCompute 分布式 Python 能力介紹
MaxCompute 分布式 Python 技術(shù) - PyODPS
MaxCompute是一款SaaS模式的云數(shù)據(jù)倉庫,基于MaxCompute是有兼容Python的能力。
PyODPS 是 MaxCompute 的 Python 版本的 SDK, 它提供了對(duì) MaxCompute 對(duì)象的基本操作;并提供了 DataFrame 框架(二維表結(jié)構(gòu),可以進(jìn)行增刪改查操作),能在 MaxCompute 上進(jìn)行數(shù)據(jù)分析。
PyODPS 提交的 SQL 以及 DataFrame作業(yè)都會(huì)轉(zhuǎn)換成 MaxCompute SQL 分布式運(yùn)行;如果第三方庫,能以 UDF+SQL 的形式運(yùn)行,也可以分布式運(yùn)行。
如果需要 Python 把作業(yè)拆成子任務(wù)分布式來運(yùn)行,比如大規(guī)模的向量計(jì)算原生 Python 沒有分布式能力,這時(shí)候推薦用 MaxCompute Mars。是可以把Python任務(wù)拆分成子任務(wù)進(jìn)行運(yùn)行的框架。
Dome實(shí)踐
請(qǐng)點(diǎn)擊視頻查看
自定義函數(shù)中使用三方包
假如不是單純運(yùn)行Python,需要借助一些Python第三方包,這個(gè)MaxCompute也是支持的。
流程如下:
Step1
確定使用到的第三方包
sklearn,scipy
Step2
找到對(duì)應(yīng)報(bào)的所有依賴
sklearn,scipy,pytz,pandas,six,python-dateutil
Step3
下載對(duì)應(yīng)的三方包(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的一個(gè)Resource對(duì)象。
這樣我們?nèi)?chuàng)建函數(shù),再引用自定義函數(shù),就能夠使用到第三方包。
自定義函數(shù)代碼
def test(x):from sklearn import datasets, svmfrom scipy import miscimport numpy as npiris = 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] == 0assert misc.face().shape is not Nonereturn xMaxCompute 分布式 Python 技術(shù) - Mars
項(xiàng)目名字 Mars
最早是 MatrixandArray;登陸火星
為什么要做 Mars
- 為大規(guī)模科學(xué)計(jì)算設(shè)計(jì)的:大數(shù)據(jù)引擎編程接口對(duì)科學(xué)計(jì)算不太友好,框架設(shè)計(jì)不是為科學(xué)計(jì)算模型考慮的
- 傳統(tǒng)科學(xué)計(jì)算基于單機(jī),大規(guī)模科學(xué)計(jì)算需要用到超算
Tips科學(xué)計(jì)算:計(jì)算機(jī)梳理數(shù)據(jù): Excel-> 數(shù)據(jù)庫 (MySQL)-> ?Hadoop, Spark, MaxCompute 數(shù)據(jù)量有 了很大變化,計(jì)算模型沒有變化,二維表,投影、切片、聚合、篩選和排序,基于關(guān)系代數(shù),集合論;科學(xué)計(jì)算基礎(chǔ)結(jié)構(gòu)不是二維表:例如圖片2維度,每個(gè)像素點(diǎn)不是一個(gè)數(shù)字(RGB+α 透明通道)
- 傳統(tǒng) SQL 模型處理能力不足:線性代數(shù),行列式的相乘,現(xiàn)有數(shù)據(jù)庫效率低
- 現(xiàn)狀 R,Numpy 單機(jī)基于單機(jī); ?Python 生態(tài)的 Dask 大數(shù)據(jù)到科學(xué)計(jì)算的橋梁
案例
客戶A MaxCompute 現(xiàn)有數(shù)據(jù),需要針對(duì)這些 百億數(shù)據(jù) TB 級(jí)別的數(shù)據(jù)相乘;現(xiàn)有 MapReduce 模式性能低;用 Mars 就可以高效的解決;目前是唯一一個(gè)大規(guī)模科學(xué)計(jì)算引擎
加速數(shù)據(jù)科學(xué)的新方式
加速數(shù)據(jù)科學(xué)的方式如下圖所示。
基于DASK或者是 MaxCompute Mars其實(shí)是 Scale up 和 Scale out 兼容的方式。在下圖左下代表單機(jī)運(yùn)行Python 的庫做數(shù)據(jù)科學(xué)的一個(gè)方式。大規(guī)模超算的思路是Scale up,也就是線上垂直擴(kuò)散,增加硬件能力,比如可以利用多核,當(dāng)前每臺(tái)電腦或服務(wù)器上不止一核,包括GPU、TPU、NPU等做深度學(xué)習(xí)的硬件。可以把Python移植到這些硬件上做一些加速。這里的技術(shù)包含比如Modin是做多核加速pandas。在右下,也有一些框架在做分布式Python,比如RAY是螞蟻的一款框架服務(wù),本質(zhì)上Mars是可以運(yùn)行在RAY上,相當(dāng)于Python生態(tài)的一個(gè)調(diào)度,一個(gè)kubernetes。DASK也是在做分布式Python,包括Mars。當(dāng)然,最佳的模式是 Scale up 和 Scale out 兩種做一個(gè)組合。這樣的好處是,可以做分布式,在單節(jié)點(diǎn)上也可以利用硬件能力。Mars當(dāng)前只能在大規(guī)模集群上,單機(jī)配置在GPU集群。
分布 Python 的設(shè)計(jì)邏輯
Mars本質(zhì)上設(shè)計(jì)思路是把數(shù)據(jù)科學(xué)庫分布式化掉,比如Python,可以把Dataframe做一個(gè)拆分,包括Numpy,Scikit-Learn。
把大規(guī)模作業(yè)拆分成小作業(yè)來做分布式計(jì)算。本身框架就是拆成作業(yè)用的,首先客戶端提交一個(gè)作業(yè),Mars框架把作業(yè)拆分,做一個(gè)DAG圖,最后匯總收集計(jì)算結(jié)果。
Mars 場景1 CPU和GPU混合計(jì)算
1、安全和金融領(lǐng)域,傳統(tǒng)大數(shù)據(jù)平臺(tái)挖掘周期長,資源緊張,等待周期長。
2、Mars DataFrame加速數(shù)據(jù)處理:大規(guī)模排序;統(tǒng)計(jì);聚合分析。
3、Mars learn 加速無監(jiān)督學(xué)習(xí);Mars拉起分布式深度學(xué)習(xí)計(jì)算。
4、 使用 GPU 加速特定計(jì)算。
Mars 場景2 可解釋性計(jì)算
1、廣告歸因&洞察特征的解釋算法,本身計(jì)算量巨大,耗時(shí)長。
2、使用 Mars Remote 將計(jì)算用數(shù)十臺(tái)服務(wù)器進(jìn)行加速,提升百倍性能。
Mars場景3 大規(guī)模k-最鄰近算法
1、Embedding 的流行使得用向量表述實(shí)體非常常見。
2、Mars 的NearestNeighbors算法兼容 scikit-learn。暴力算法在300萬向量和300萬向量計(jì)算top10相似計(jì)算(9萬億次向量比對(duì))中,用20個(gè)worker兩個(gè)小時(shí)計(jì)算完成,大數(shù)據(jù)平臺(tái)基于SQL+UDF的方式無法完成計(jì)算。更小規(guī)模 Mars 相比大數(shù)據(jù)平臺(tái)性能提升百倍。
3、Mars 支持分布式的方式加速Faiss、Proxima(阿里達(dá)摩院向量檢索庫),達(dá)到千萬和億級(jí)別規(guī)模。
三、最佳實(shí)踐
Mars本身會(huì)集成一些Python第三方包,基本主流機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的庫都包含在里面。下方Demo講一個(gè)使用Mars做智能推薦,用lightgbm做一個(gè)分類算法,比如有一些優(yōu)惠判斷是不是給某些用戶做推送。
Mars 包括的第三方包:
Mars 三方庫集成 — PyODPS 0.10.7 文檔
第一張圖上主要步驟是通過 AK、project 名字、Endpoint 信息連接到 MaxCompute。接下來創(chuàng)建一個(gè)4節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)8 core,32G 的集群,應(yīng)用 extended 擴(kuò)展包,并生成 100w 用戶 64維度描述信息的訓(xùn)練數(shù)據(jù)。
利用 Lightgbm 2分類算法的模型訓(xùn)練:
將模型以 Create resource 方式傳到 MaxCompute 作為 resource 對(duì)象,準(zhǔn)備測試集數(shù)據(jù)
使用測試測試集數(shù)據(jù)驗(yàn)證模型,得出分類:
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。?
總結(jié)
以上是生活随笔為你收集整理的基于MaxCompute分布式Python能力的大规模数据科学分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quick BI电子表格: 新手亦可表格
- 下一篇: IoT Studio可视化搭建平台编辑历