新聞中心
基于 MaxCompute 分布式 python 能力的大規(guī)模數(shù)據(jù)科學(xué)分析
作者:佚名 2021-09-24 11:34:44
網(wǎng)絡(luò)
分布式 Python的趨勢(shì)是呈現(xiàn)上漲趨勢(shì),特別是在數(shù)據(jù)分析和數(shù)據(jù)科學(xué)領(lǐng)域,幾乎是top one的編程語(yǔ)言。這是Python生態(tài)的發(fā)展趨勢(shì)。當(dāng)然,在數(shù)據(jù)分析數(shù)據(jù)科學(xué)機(jī)器學(xué)習(xí)這個(gè)領(lǐng)域,不只是有編程語(yǔ)言這一個(gè)因素。

一、Python 生態(tài)的重要性
Why Python
Python has grown to become the dominant language both in data analytics, and general programming。
根據(jù)技術(shù)問(wèn)答網(wǎng)站stack overflow統(tǒng)計(jì),Python、C#、Javascript、java、php、C++、SQL、R、statistics這些編程語(yǔ)言從2009年至2021年的趨勢(shì)圖如下圖所示??梢钥闯鯬ython的趨勢(shì)是呈現(xiàn)上漲趨勢(shì),特別是在數(shù)據(jù)分析和數(shù)據(jù)科學(xué)領(lǐng)域,幾乎是top one的編程語(yǔ)言。這是Python生態(tài)的發(fā)展趨勢(shì)。當(dāng)然,在數(shù)據(jù)分析數(shù)據(jù)科學(xué)機(jī)器學(xué)習(xí)這個(gè)領(lǐng)域,不只是有編程語(yǔ)言這一個(gè)因素。
統(tǒng)計(jì)來(lái)自 https://insights.stackoverflow.com/trends
數(shù)據(jù)科學(xué)技術(shù)棧
在數(shù)據(jù)科學(xué)領(lǐng)域編程語(yǔ)言只是一個(gè)方面,語(yǔ)言不止包含Python,也有數(shù)據(jù)分析人員用SQL,或者傳統(tǒng)分析語(yǔ)言R,或者是函數(shù)式編程語(yǔ)言Scala。第二個(gè)方面需要有數(shù)據(jù)分析對(duì)應(yīng)的庫(kù),比如NumPy、pandas等,或者是基于可視化的庫(kù)會(huì)在里面。Python運(yùn)行的集群還會(huì)有一些運(yùn)維的技術(shù)棧在里面,比如可以運(yùn)行在docker或者是kubernetes上。如果要做數(shù)據(jù)分析數(shù)據(jù)科學(xué),前期需要對(duì)數(shù)據(jù)進(jìn)行清洗,有一些ETL的過(guò)程。有一些清洗不只是一兩步能完成的,需要用工作流去完成整體的ETL的過(guò)程。里面涉及到最流行的組件比如Spark,整個(gè)工作流調(diào)度Airflow,最終結(jié)果做一個(gè)呈現(xiàn),就需要存儲(chǔ),一般用PostgreSQL數(shù)據(jù)庫(kù)或者內(nèi)存數(shù)據(jù)庫(kù)redis,對(duì)外再連接一個(gè)BI工具,做最終結(jié)果的展示。還有比如機(jī)器學(xué)習(xí)的一些組件或者平臺(tái),TensorFlow、PyTorch等。如果是設(shè)計(jì)到Web開(kāi)發(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è)視圖。我們從編程語(yǔ)言切入,發(fā)現(xiàn)如果要實(shí)現(xiàn)大規(guī)模數(shù)據(jù)的數(shù)據(jù)科學(xué)是需要方方面面的考量。
二、MaxCompute 分布式 Python 能力介紹
MaxCompute 分布式 Python 技術(shù) - PyODPS
MaxCompute是一款SaaS模式的云數(shù)據(jù)倉(cāng)庫(kù),基于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)行;如果第三方庫(kù),能以 UDF+SQL 的形式運(yùn)行,也可以分布式運(yùn)行。
如果需要 Python 把作業(yè)拆成子任務(wù)分布式來(lái)運(yùn)行,比如大規(guī)模的向量計(jì)算原生 Python 沒(méi)有分布式能力,這時(shí)候推薦用 MaxCompute Mars。是可以把Python任務(wù)拆分成子任務(wù)進(jìn)行運(yù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, 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 技術(shù) - Mars
項(xiàng)目名字 Mars
最早是 MatrixandArray;登陸火星
為什么要做 Mars
為大規(guī)??茖W(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ù)庫(kù) (MySQL)-> Hadoop, Spark, MaxCompute 數(shù)據(jù)量有 了很大變化,計(jì)算模型沒(méi)有變化,二維表,投影、切片、聚合、篩選和排序,基于關(guān)系代數(shù),集合論;科學(xué)計(jì)算基礎(chǔ)結(jié)構(gòu)不是二維表:例如圖片2維度,每個(gè)像素點(diǎn)不是一個(gè)數(shù)字(RGB+α 透明通道)
傳統(tǒng) SQL 模型處理能力不足:線性代數(shù),行列式的相乘,現(xiàn)有數(shù)據(jù)庫(kù)效率低
現(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ī)??茖W(xué)計(jì)算引擎
加速數(shù)據(jù)科學(xué)的新方式
加速數(shù)據(jù)科學(xué)的方式如下圖所示。
基于DASK或者是 MaxCompute Mars其實(shí)是 Scale up 和 Scale out 兼容的方式。在下圖左下代表單機(jī)運(yùn)行Python 的庫(kù)做數(shù)據(jù)科學(xué)的一個(gè)方式。大規(guī)模超算的思路是Scale up,也就是線上垂直擴(kuò)散,增加硬件能力,比如可以利用多核,當(dāng)前每臺(tái)電腦或服務(wù)器上不止一核,包括GPU、TPU、NPU等做深度學(xué)習(xí)的硬件??梢园裀ython移植到這些硬件上做一些加速。這里的技術(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é)庫(kù)分布式化掉,比如Python,可以把Dataframe做一個(gè)拆分,包括Numpy,Scikit-Learn。
把大規(guī)模作業(yè)拆分成小作業(yè)來(lái)做分布式計(jì)算。本身框架就是拆成作業(yè)用的,首先客戶端提交一個(gè)作業(yè),Mars框架把作業(yè)拆分,做一個(gè)DAG圖,最后匯總收集計(jì)算結(jié)果。
Mars 場(chǎng)景1 CPU和GPU混合計(jì)算
1、安全和金融領(lǐng)域,傳統(tǒng)大數(shù)據(jù)平臺(tái)挖掘周期長(zhǎng),資源緊張,等待周期長(zhǎng)。
2、Mars DataFrame加速數(shù)據(jù)處理:大規(guī)模排序;統(tǒng)計(jì);聚合分析。
3、Mars learn 加速無(wú)監(jiān)督學(xué)習(xí);Mars拉起分布式深度學(xué)習(xí)計(jì)算。
4、 使用 GPU 加速特定計(jì)算。
Mars 場(chǎng)景2 可解釋性計(jì)算
1、廣告歸因&洞察特征的解釋算法,本身計(jì)算量巨大,耗時(shí)長(zhǎng)。
2、使用 Mars Remote 將計(jì)算用數(shù)十臺(tái)服務(wù)器進(jìn)行加速,提升百倍性能。
Mars場(chǎng)景3 大規(guī)模k-最鄰近算法
1、Embedding 的流行使得用向量表述實(shí)體非常常見(jiàn)。
2、Mars 的NearestNeighbors算法兼容 scikit-learn。暴力算法在300萬(wàn)向量和300萬(wàn)向量計(jì)算top10相似計(jì)算(9萬(wàn)億次向量比對(duì))中,用20個(gè)worker兩個(gè)小時(shí)計(jì)算完成,大數(shù)據(jù)平臺(tái)基于SQL+UDF的方式無(wú)法完成計(jì)算。更小規(guī)模 Mars 相比大數(shù)據(jù)平臺(tái)性能提升百倍。
3、Mars 支持分布式的方式加速Faiss、Proxima(阿里達(dá)摩院向量檢索庫(kù)),達(dá)到千萬(wàn)和億級(jí)別規(guī)模。
三、最佳實(shí)踐
Mars本身會(huì)集成一些Python第三方包,基本主流機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的庫(kù)都包含在里面。下方Demo講一個(gè)使用Mars做智能推薦,用lightgbm做一個(gè)分類算法,比如有一些優(yōu)惠判斷是不是給某些用戶做推送。
Mars 包括的第三方包:
https://pyodps.readthedocs.io/zh_CN/latest/mars-third-parties.html
第一張圖上主要步驟是通過(guò) AK、project 名字、Endpoint 信息連接到 MaxCompute。接下來(lái)創(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)備測(cè)試集數(shù)據(jù)
使用測(cè)試測(cè)試集數(shù)據(jù)驗(yàn)證模型,得出分類:
分享標(biāo)題:基于MaxCompute分布式Python能力的大規(guī)模數(shù)據(jù)科學(xué)分析
轉(zhuǎn)載源于:http://fisionsoft.com.cn/article/dpgoehi.html


咨詢
建站咨詢
