「直播回顾」Mars:加速数据科学的新方式
簡介:?本文從數(shù)據(jù)科學概念、背景和現(xiàn)狀切入,引出加速數(shù)據(jù)科學的新方式Mars,并介紹了Mars具體能解決的一些問題和背后的邏輯、哲學,同時對Mars整體數(shù)據(jù)處理流程進行了介紹。
本文分為4個部分:
Mars的背景和現(xiàn)狀
Mars解決了什么問題
Mars背后的哲學
總結與展望
一、Mars的背景和現(xiàn)狀
說到加速數(shù)據(jù)科學的新方式,就不得不說什么是數(shù)據(jù)科學,以下是維基的定義:
數(shù)據(jù)科學通過運用各種相關的數(shù)據(jù)來幫助非專業(yè)人士來理解問題。第一,它的目標是從數(shù)據(jù)中提取輸入價值的部分,第二,它要生產(chǎn)數(shù)據(jù)產(chǎn)品,第三它結合了非常多重要的技術,包括數(shù)學、統(tǒng)計、機器學習、可視化,最后,它需要真正解決問題。
它包含三個方面,計算機科學、數(shù)學和統(tǒng)計、領域和商業(yè)知識。它們結合起來分別是機器學習、軟件開發(fā)和傳統(tǒng)研究,中間是數(shù)據(jù)科學。
數(shù)據(jù)科學技術棧包含語言、數(shù)據(jù)分析、數(shù)據(jù)工程、機器學習、Web開發(fā)、運維和商業(yè)智能。每個技術棧都包含不同的工具,提供不同的數(shù)據(jù)服務。
傳統(tǒng)Python數(shù)據(jù)科學棧的三大底座是NumPy、Pandas和SciPy。NumPy是最核心的部分,它用來做數(shù)值計算,幾乎其他所有Python的數(shù)據(jù)科學技術棧都建立在NumPy上,因為它有最基礎的數(shù)據(jù)結構,也就是多維數(shù)組;另外,Pandas也用NumPy實現(xiàn),它上面有很多API來進行分析操作;而SciPy主要負責科學計算。在此基礎上,是機器學習和可視化,同時還有豐富的Python函數(shù)。
上面是Python數(shù)據(jù)科學技術棧整體的狀況,他們有幾大好處,比如廣泛使用,是事實標準;上手成本低,容易為初學者和學生入門;和語言結合緊密,能用Python來組織函數(shù)調用。但是它們都是單機的庫,不能處理很大的數(shù)據(jù)量,所以需要用到大數(shù)據(jù)的數(shù)據(jù)工程技術棧,比如Hadoop、Hive、Spark等。它們雖然支持多語言,沒有強綁定,但是學習門檻比較陡峭,也需要對系統(tǒng)本身有足夠的了解。做數(shù)據(jù)科學需要把精力放在數(shù)據(jù)本身,而不是工具,但是這幾個庫讓工作圍繞著庫展開,而非數(shù)據(jù)。因此,我們是否能把這兩個工作連接起來,利用傳統(tǒng)的技術價值而不是關注大數(shù)據(jù)系統(tǒng)本身,來解決很多問題。
現(xiàn)在大家說摩爾定律已經(jīng)失效,我們可以回顧一下它的歷史。早期它通過復雜指令集和精簡指令集的方式讓速度提升,但是隨著縮放比例定律和阿姆達爾定律的終結,未來是不是要20年才能達到2倍效率的提升呢?
另外隨著深度學習、機器學習和AI的火熱,機器學習模型也會越來越大,它的訓練已經(jīng)呈指數(shù)級增長,但是摩爾定律并沒有追上機器學習模型訓練發(fā)展的速度。
另外一個現(xiàn)狀就是技術棧的問題,NumPy、Pandas等它們更多只能在單核上來應用計算,但是阿姆達爾定律下的核數(shù)是會越來越多,所以并沒有很好地進行利用。同時,不管是計算量還是數(shù)據(jù)規(guī)模的增長速度,都超過了摩爾定律的速度,所以也不能用單機解決問題。
基于以上,加速數(shù)據(jù)科學主要有兩種方式。第一是Scale up,利用多核和更好的硬件,比如GPU、FPGA和TPU等,以及現(xiàn)有的庫,包括Modin、CuPy、Rapids等來提升效率。第二是 Scale out,利用分布式的方式來加速,因為單核的性能總歸是有限的,可以利用Ray、Dask和Modin等。而結合Scale up和Scale out,就可以構建一個大規(guī)模的更好的硬件集成,比如今天介紹的加速數(shù)據(jù)科學的新方式Mars。
二、Mars解決了什么問題
Mars就是我們試圖構建的“橋”,能來兼顧小規(guī)模和大規(guī)模數(shù)據(jù)處理。大規(guī)模數(shù)據(jù)處理能構建集群,有三種主要方式,第一是在物理機上,第二是kubernetes,第三是Hadoop Yarn的調度器上,拉起Mars的集群。
Mars的核心基礎部分對應著傳統(tǒng)Python數(shù)據(jù)技術棧,比如Mars Tensor對應NumPy,DataFrame對應Pandas等。而構建在這個基礎之上的,是Mars Learn模塊,它可以兼容Scikit-learn API,能簡單地進行更大數(shù)據(jù)規(guī)模的分布式處理。此外,Mars還支持深度學習和機器學習的框架,比如能輕松運行TensorFlow、PyTorch等,而且可視化也可以在Mars上宣布。除此之外,Mars還支持了豐富的數(shù)據(jù)源。
從傳統(tǒng)Python技術棧到Mars也非常簡單,比如在NumPy和Pandas里要變成Mars,只需要替換import,然后后面變?yōu)檠舆t執(zhí)行即可。
普通的Python函數(shù),在調用的時候變成mr.spawn來延遲這個過程,最后通過execute來并發(fā)執(zhí)行,不用擔心Mars是運行在單機上還是分布式運行。
而Mars上的TensorFlow大部分也一樣,區(qū)別在于main函數(shù)部分的變化。
三、Mars背后的設計哲學
第一是分而治之,不重復造輪子。比如創(chuàng)建一個Mars的Tensor,對里面所有元素進行求和操作,在觸發(fā)execute之后,Mars會生成小任務的計算圖,它可以將小任務調度到分布式的集群中來運行。此外還做了很多優(yōu)化,通過算子融合來提升性能。
第二,在Mars的世界,一切皆可并行。在Mars里實現(xiàn)了并行正則排序算法,比如創(chuàng)建一個cluster,有5個Worker,每個Worker是8核32G,那么相比單機的NumPy函數(shù),它提升了4倍。
下面看下Mars整體數(shù)據(jù)的處理流程。我們通過客戶端的代碼觸發(fā)執(zhí)行,生成一個粗粒度的計算圖,然后通過Web服務器提交任務,并將任務轉發(fā)給Scheduler,然后在這里切分成小任務。隨后,Scheduler根據(jù)Worker工作負載的情況來把它分發(fā)到各個機器上運行,這里會用到調度的策略等等。這個過程中,Mars會自動觸發(fā)數(shù)據(jù)傳輸工作,保證在節(jié)點執(zhí)行的時候它所有輸入的數(shù)據(jù)都在這臺機器上。此外Mars還會自動進行Spill操作,當我們內存不夠的時候,它會把不常用的數(shù)據(jù)Spill到磁盤上,讓Mars可以處理遠超過這個內存能放下的數(shù)據(jù)規(guī)模。
四、總結與展望
首先Mars是完全開源的項目,完全遵循開源的規(guī)范,而且項目的progress都能在GitHub上看到;其次Mars有兼容性,它的API高度兼容NumPy、Pandas和Scikit-learn;同時,它的單機、多核與分布式的處理性能也更高;最后是交互性,Mars Remote可以把以前的代碼變成分布式代碼,并且內部也可以與第三方庫做集成。
Github地址:https://github.com/mars-project/mars
下面是關于Mars未來的展望,大家可以訪問專欄。未來我們的開發(fā)計劃重心放在提升Mars learn的接口覆蓋率和Mars DataFrame接口覆蓋率上,統(tǒng)一單機和分布式執(zhí)行層等等。
原文鏈接
本文為阿里云原創(chuàng)內容,未經(jīng)允許不得轉載。
總結
以上是生活随笔為你收集整理的「直播回顾」Mars:加速数据科学的新方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笑联 x mPaaS | 12 个模块,
- 下一篇: IEEE EDGE 2020论文:Ast