久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進(jìn)行Mars的應(yīng)用與實(shí)踐

164次閱讀
沒有評論

共計(jì) 3583 個字符,預(yù)計(jì)需要花費(fèi) 9 分鐘才能閱讀完成。

這篇文章給大家介紹如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

一、Mars 簡介

Mars 是統(tǒng)一的數(shù)據(jù)科學(xué)平臺,它用來加速傳統(tǒng)的 Python 數(shù)據(jù)科學(xué)技術(shù)棧,在單機(jī)中也可以用多核加速,或用分布式來加速。Mars 可以部署在單機(jī)的分布式集群,或者 Kubernetes 和 Hadoop Yarn 上。

Mars 整個框架構(gòu)建在單機(jī)的并行和分布式的這兩個調(diào)度的基礎(chǔ)之上,它的數(shù)據(jù)科學(xué)基礎(chǔ)包括三個核心部分,Tensor、DataFrame 和 Remote。而構(gòu)建在這個基礎(chǔ)之上的,是 Mars Learn 模塊,它可以兼容 Scikit-learn API,能簡單地進(jìn)行更大數(shù)據(jù)規(guī)模的分布式處理。此外,Mars 還支持深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的框架,比如能輕松運(yùn)行 TensorFlow、PyTorch 等,而且可視化也可以在 Mars 上完成。除此之外,Mars 還支持了豐富的數(shù)據(jù)源。

從傳統(tǒng) Python 技術(shù)棧到 Mars 也非常簡單,比如在 NumPy 和 Pandas 里要變成 Mars,只需要替換 import,然后后面變?yōu)檠舆t執(zhí)行即可。

普通的 Python 函數(shù),在調(diào)用的時(shí)候變成 mr.spawn 來延遲這個過程,最后通過 execute 來并發(fā)執(zhí)行,不用擔(dān)心 Mars 是運(yùn)行在單機(jī)上還是分布式運(yùn)行。

而 Mars 上的 TensorFlow 大部分也一樣,區(qū)別在于 main 函數(shù)部分的變化。最后,我們需要通過 run_tensorflow_script 的方式把腳本運(yùn)行到 Mars 中。

二、典型場景

場景 1. CPU 和 GPU 混合計(jì)算

在安全和金融領(lǐng)域可以用 Mars 做 CPU 和 GPU 的混合計(jì)算,加速現(xiàn)有的工作流。

在這個領(lǐng)域,因?yàn)閭鹘y(tǒng)大數(shù)據(jù)平臺挖掘周期長,資源緊張,需要很久來執(zhí)行任務(wù),不能達(dá)到客戶需求。所以能用 Mars DataFrame 來加速數(shù)據(jù)處理,它可以做大規(guī)模數(shù)據(jù)排序,并幫助用戶做高階統(tǒng)計(jì)和聚合分析。

另外在安全領(lǐng)域有很多無監(jiān)督學(xué)習(xí)的算法,Mars learn 能加速無監(jiān)督學(xué)習(xí),同時(shí)拉起分布式深度學(xué)習(xí)計(jì)算加速現(xiàn)有的深度學(xué)習(xí)訓(xùn)練。之后,對于某些計(jì)算任務(wù)也可以利用 GPU 來加速。

場景 2. 可解釋性計(jì)算

在廣告領(lǐng)域,在廣告歸因和洞察特征的解釋算法中,因?yàn)楸旧碛?jì)算量大,所以耗時(shí)很長。這種情況下,單機(jī)加速是比較困難的,基于傳統(tǒng)大數(shù)據(jù)平臺的分布式也不太靈活,但是通過 Mars remote,可以很輕松地把計(jì)算分布到幾十臺機(jī)器上來加速,達(dá)到百倍的性能提升。

場景 3. 大規(guī)模 K - 最鄰近算法

Mars 非常廣泛地應(yīng)用在 K - 最鄰近算法中,因?yàn)?Embedding 越來越流行,它讓向量表述實(shí)體非常常見。另外,Mars 的 NearestNeighbors 算法兼容 scikit-learn,它里面有暴力算法,而用戶也需要暴力算法來進(jìn)行大規(guī)模計(jì)算,可以通過多個 worker 來完成,從而讓性能提升百倍。最后,Mars 支持分布式的方式加速 Faiss 和 Proxima,達(dá)到千萬級別和上億級別的規(guī)模。

三、Demo

Demo1. 分析豆瓣電影數(shù)據(jù)

我們從這個 Demo 看一下 Mars 如何加速 pandas 數(shù)據(jù)處理及其可視化。

開始演示之前我們需要安裝 Mars。這里已經(jīng)創(chuàng)建了 Jupyter,然后 pip install pymars。

安裝之后,我們可以到 IPython 進(jìn)行驗(yàn)證,可以看到下面的結(jié)果沒有問題,接下來我們就可以進(jìn)入到 Jupyter notebook 里。

我們開始 demo。這個數(shù)據(jù)可以在 GitHub 地址下載,然后我們用 pandas 來分析電影的數(shù)據(jù),使用 ipython memory usage 來查看內(nèi)存使用。

我們的數(shù)據(jù)主要用到 4 個 CSV 文件,分別是 movies、ratings、users 和 comments。

接下來根據(jù)上映日期統(tǒng)計(jì)有多少電影發(fā)布。這里先處理一下數(shù)據(jù),讓發(fā)行日期只取到年份,去掉日期,并對年份做聚合。

數(shù)據(jù)出來后,可以用 pandas bokeh 把圖繪制出來,并通過交互式的方式查看。

接下來看電影評分的統(tǒng)計(jì)。首先把有評分的電影篩選出來,然后把豆瓣評分的數(shù)值數(shù)量從大到小進(jìn)行排序。可以看到,最多的評分是 6.8 分。

同樣,通過 pandas bokeh 把它畫成柱狀圖,評分差不多呈現(xiàn)正態(tài)分布。

接下來做一個標(biāo)簽詞云,看電影哪個標(biāo)簽詞最多,這里從 movies 取出 tags,用斜杠分割,然后 max words 是 50。

接下來我們再對電影的 Top K 進(jìn)行分析。首先按電影 ID 進(jìn)行聚合,求出評價(jià)的平均值和個數(shù)。然后我們對評價(jià)個數(shù)進(jìn)行過濾,從高到低,算出 top20 的電影。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

然后做評論數(shù)據(jù)分析。因?yàn)樵u論是中文的,所以需要做一個分詞,然后對每一句話做切分,在統(tǒng)計(jì)的時(shí)候進(jìn)行排序。這里可以加一個進(jìn)度條,在處理數(shù)據(jù)的時(shí)候方便看到進(jìn)程。這個過程大概花了 20 分鐘,所以在單機(jī)上跑大任務(wù)的時(shí)候?qū)C(jī)器的壓力還是比較大。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

這是最終的詞云圖。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

接下來我們用 Mars 做同樣的分析任務(wù)。首先是對 Mars 環(huán)境進(jìn)行部署,然后這里有 5 個 worker,每個 worker 是 8 個 CPU 和 32G 內(nèi)存。還是一樣,我們打開內(nèi)存的監(jiān)控,做一些 import,這里把 import Pandas 替換成 import mars.dataframe,然后 Numpy 是 import mars.tensor。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

隨后我們在 SDK 里來創(chuàng)建 to mars dataframe,這一步幾乎沒有用到內(nèi)存,最終得到的結(jié)果也和之前一樣。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

我們用同樣的方式來分析上映日期的電影個數(shù)和電影評分。得益于 Mars 跟 Pandas 的高度兼容,我們也能用 Pandas bokeh 來呈現(xiàn)結(jié)果。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

電影評論的分析也一樣,但是在顯示的時(shí)候,Mars 只會拉取頭幾條和最后幾條,所以客戶端幾乎沒有內(nèi)存使用。而且整個 running 過程只用了 45 秒,與之前的 20 分鐘相比提升了幾十倍性能。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

接下來我們用 Mars 做一個地區(qū)的統(tǒng)計(jì),讓它有一個動態(tài)的效果。首先我們看一下剛剛計(jì)算過的已經(jīng) released 的電影 dataframe,然后取 1980-2019 這幾年的電影,而 regions 部分可能有多個,所以用斜杠分割開,最后執(zhí)行排出 top10 地域電影。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

然后我們通過 bar chart race 來生成動態(tài)效果。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

Demo2. 豆瓣電影推薦

第二個 demo 我們會基于剛才豆瓣電影的數(shù)據(jù)來做一個推薦。我們首先會用 TensorFlow Mars 來進(jìn)行訓(xùn)練,接著用 Mars 分布式 KNN 算法來加速召回計(jì)算。

我們先使用單機(jī)的技術(shù)棧,這個數(shù)據(jù)已經(jīng)分成了訓(xùn)練和測試集,所以我們先 to pandas 把它下載到本地,接著來對用戶和電影做一個 label encode,把它變成一個數(shù)字,而不是字符串的值。隨后我們對數(shù)據(jù)進(jìn)行處理,先按照時(shí)間排序,然后按照用戶進(jìn)行分組,生成分組聚合的結(jié)果。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

接下來開始訓(xùn)練,我們需要用 TensorFlow 訓(xùn)練出代表 user 的 embedding。之前說過 embedding,可以對任一實(shí)體用向量描述,所以得到 embedding 之后,我們在給用戶推薦電影時(shí)就可以查找在這個向量空間里面跟這個用戶比較接近的電影 embedding。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

訓(xùn)練后我們可以保存向量,這里的搜索規(guī)模是 60 萬乘 7 萬,單機(jī)花費(fèi)了 22 分鐘,但如果達(dá)到千萬乘千萬級別,搜索耗時(shí)要超過 800 小時(shí),這是不可接受的。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

接下來我們看如何用 Mars 來實(shí)現(xiàn)這一過程。首先創(chuàng)建一個 Mars 集群,這里有 8 個 worker。然后和上面一樣,對數(shù)據(jù)進(jìn)行預(yù)處理,做 label encode,按時(shí)間排序,按 user 分組生成分組聚合。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

這里唯一的區(qū)別是 Mars 會自動推斷 DataFrame 的結(jié)果,如果推斷失敗就需要用戶自己提供 dtypes 和 output type。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

然后是執(zhí)行和訓(xùn)練。這里 TensorFlow 可以寫 Python 文件,不用寫到 notebook 里。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

接著我們用 Mars 的 run tensorflow script 來跑這個腳本,然后指定 worker 是 8。可以看到,執(zhí)行的時(shí)間縮小到了 23 分鐘。同時(shí),我們也拿到了最終的 embedding,用 Mars 做 embedding 只需 1 分 25 秒,比剛剛的時(shí)間提升個十倍左右。1400 萬乘 1400 萬也可以穩(wěn)定在 1 小時(shí)左右,與單機(jī) 800 個小時(shí)相比提升是非常巨大的。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

四、最佳實(shí)踐

首先盡量不要使用 to pandas 和 to numpy,因?yàn)檫@會把 Mars 的分布式數(shù)據(jù)變成單機(jī)的數(shù)據(jù),失去了 Mars 本身的優(yōu)勢,除非這個操作不能用 Mars 實(shí)現(xiàn);其次,Mars tensor、DataFrame 和 learn 由于本身受限于 API 的原因需要自己寫一些函數(shù),所以可以考慮用 Mars remote 來加速,把操作抽象成函數(shù);第三,Pandas 的加速技巧在 Mars DataFrame 依然適用,比如可以使用更高效的數(shù)據(jù)類型,可以優(yōu)先使用內(nèi)建操作,使用 apply 取代循環(huán)。

如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐

關(guān)于如何進(jìn)行 Mars 的應(yīng)用與實(shí)踐就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計(jì)3583字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 阿拉善左旗| 白山市| 新丰县| 哈尔滨市| 墨江| 太湖县| 四平市| 江油市| 荆门市| 县级市| 宁海县| 武平县| 徐水县| 古浪县| 慈利县| 依安县| 兰州市| 通许县| 文安县| 安岳县| 抚顺市| 兴海县| 嘉兴市| 象州县| 孟村| 霍山县| 宁明县| 河池市| 保山市| 抚州市| 沙洋县| 石屏县| 自治县| 资源县| 琼海市| 灌云县| 公主岭市| 龙江县| 金沙县| 潢川县| 图们市|