首頁>技術>

本文分為4個部分:

Mars的背景和現狀Mars解決了什麼問題Mars背後的哲學總結與展望一、Mars的背景和現狀

說到加速資料科學的新方式,就不得不說什麼是資料科學,以下是維基的定義:

資料科學透過運用各種相關的資料來幫助非專業人士來理解問題。第一,它的目標是從資料中提取輸入價值的部分,第二,它要生產資料產品,第三它結合了非常多重要的技術,包括數學、統計、機器學習、視覺化,最後,它需要真正解決問題。

它包含三個方面,計算機科學、數學和統計、領域和商業知識。它們結合起來分別是機器學習、軟體開發和傳統研究,中間是資料科學。

資料科學技術棧包含語言、資料分析、資料工程、機器學習、Web開發、運維和商業智慧。每個技術棧都包含不同的工具,提供不同的資料服務。

傳統Python資料科學棧的三大底座是NumPy、Pandas和SciPy。NumPy是最核心的部分,它用來做數值計算,幾乎其他所有Python的資料科學技術棧都建立在NumPy上,因為它有最基礎的資料結構,也就是多維陣列;另外,Pandas也用NumPy實現,它上面有很多API來進行分析操作;而SciPy主要負責科學計算。在此基礎上,是機器學習和視覺化,同時還有豐富的Python函式。

上面是Python資料科學技術棧整體的狀況,他們有幾大好處,比如廣泛使用,是事實標準;上手成本低,容易為初學者和學生入門;和語言結合緊密,能用Python來組織函式呼叫。但是它們都是單機的庫,不能處理很大的資料量,所以需要用到大資料的資料工程技術棧,比如Hadoop、Hive、Spark等。它們雖然支援多語言,沒有強繫結,但是學習門檻比較陡峭,也需要對系統本身有足夠的瞭解。做資料科學需要把精力放在資料本身,而不是工具,但是這幾個庫讓工作圍繞著庫展開,而非資料。因此,我們是否能把這兩個工作連線起來,利用傳統的技術價值而不是關注大資料系統本身,來解決很多問題。

現在大家說摩爾定律已經失效,我們可以回顧一下它的歷史。早期它透過複雜指令集和精簡指令集的方式讓速度提升,但是隨著縮放比例定律和阿姆達爾定律的終結,未來是不是要20年才能達到2倍效率的提升呢?

另外隨著深度學習、機器學習和AI的火熱,機器學習模型也會越來越大,它的訓練已經呈指數級增長,但是摩爾定律並沒有追上機器學習模型訓練發展的速度。

另外一個現狀就是技術棧的問題,NumPy、Pandas等它們更多隻能在單核上來應用計算,但是阿姆達爾定律下的核數是會越來越多,所以並沒有很好地進行利用。同時,不管是計算量還是資料規模的增長速度,都超過了摩爾定律的速度,所以也不能用單機解決問題。

基於以上,加速資料科學主要有兩種方式。第一是Scale up,利用多核和更好的硬體,比如GPU、FPGA和TPU等,以及現有的庫,包括Modin、CuPy、Rapids等來提升效率。第二是 Scale out,利用分散式的方式來加速,因為單核的效能總歸是有限的,可以利用Ray、Dask和Modin等。而結合Scale up和Scale out,就可以構建一個大規模的更好的硬體整合,比如今天介紹的加速資料科學的新方式Mars。

二、Mars解決了什麼問題

Mars就是我們試圖構建的“橋”,能來兼顧小規模和大規模資料處理。大規模資料處理能構建叢集,有三種主要方式,第一是在物理機上,第二是kubernetes,第三是Hadoop Yarn的排程器上,拉起Mars的叢集。

Mars的核心基礎部分對應著傳統Python資料技術棧,比如Mars Tensor對應NumPy,DataFrame對應Pandas等。而構建在這個基礎之上的,是Mars Learn模組,它可以相容Scikit-learn API,能簡單地進行更大資料規模的分散式處理。此外,Mars還支援深度學習和機器學習的框架,比如能輕鬆執行TensorFlow、PyTorch等,而且視覺化也可以在Mars上宣佈。除此之外,Mars還支援了豐富的資料來源。

從傳統Python技術棧到Mars也非常簡單,比如在NumPy和Pandas裡要變成Mars,只需要替換import,然後後面變為延遲執行即可。

普通的Python函式,在呼叫的時候變成mr.spawn來延遲這個過程,最後透過execute來併發執行,不用擔心Mars是執行在單機上還是分散式執行。

而Mars上的TensorFlow大部分也一樣,區別在於main函式部分的變化。

三、Mars背後的設計哲學

第一是分而治之,不重複造輪子。比如建立一個Mars的Tensor,對裡面所有元素進行求和操作,在觸發execute之後,Mars會生成小任務的計算圖,它可以將小任務排程到分散式的叢集中來執行。此外還做了很多最佳化,透過運算元融合來提升效能。

第二,在Mars的世界,一切皆可並行。在Mars裡實現了並行正則排序演算法,比如建立一個cluster,有5個Worker,每個Worker是8核32G,那麼相比單機的NumPy函式,它提升了4倍。

下面看下Mars整體資料的處理流程。我們透過客戶端的程式碼觸發執行,生成一個粗粒度的計算圖,然後透過Web伺服器提交任務,並將任務轉發給Scheduler,然後在這裡切分成小任務。隨後,Scheduler根據Worker工作負載的情況來把它分發到各個機器上執行,這裡會用到排程的策略等等。這個過程中,Mars會自動觸發資料傳輸工作,保證在節點執行的時候它所有輸入的資料都在這臺機器上。此外Mars還會自動進行Spill操作,當我們記憶體不夠的時候,它會把不常用的資料Spill到磁碟上,讓Mars可以處理遠超過這個記憶體能放下的資料規模。

四、總結與展望

首先Mars是完全開源的專案,完全遵循開源的規範,而且專案的progress都能在GitHub上看到;其次Mars有相容性,它的API高度相容NumPy、Pandas和Scikit-learn;同時,它的單機、多核與分散式的處理效能也更高;最後是互動性,Mars Remote可以把以前的程式碼變成分散式程式碼,並且內部也可以與第三方庫做整合。

Github地址:https://github.com/mars-project/mars

下面是關於Mars未來的展望,大家可以訪問專欄。未來我們的開發計劃重心放在提升Mars learn的介面覆蓋率和Mars DataFrame介面覆蓋率上,統一單機和分散式執行層等等。

原文連結:https://developer.aliyun.com/article/780154

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 分享一款免費實用的監控工具——Nagios