Mars 加速資料科學的新方式

2021-10-12 14:13:10 字數 3385 閱讀 7640

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

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

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

資料科學技術棧包含語言、資料分析、資料工程、機器學習、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就是我們試圖構建的「橋」,能來兼顧小規模和大規模資料處理。大規模資料處理能構建集群,有三種主要方式,第一是在物理機上,第二是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的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可以把以前的**變成分布式**,並且內部也可以與第三方庫做整合。

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

資料科學 讀取資料的若干方式

讀取excel資料 我們知道資料科學研究中我們最常用的工具就是python,所以這裡講解一下一些讀取資料的方法 下面使用jupyter notebook進行資料讀取的小實驗 開啟檔案的基本語法 file open 輸入檔案所在的路徑 mode buffering 例子 file open data....

GPU 加速資料科學工作流程

gpu 加速資料科學工作流程 gpu accelerate your data science workflows 傳統上,資料科學工作流程是緩慢而繁瑣的,依賴於cpu來載入 過濾和運算元據,訓練和部署模型。gpu大大降低了基礎設施成本,並為使用rapids的端到端資料科學工作流提供了卓越的效能 開...

WPF的UI更新方式

那在 wpf 中,要如何更新 ui 的內容呢?當然,要從乙個不正確的範例開始。ex1bad.xaml xmlns xmlns x title ex1bad height 300 width 300 ex1bad.xaml.cs usingsystem.threading usingsystem.wi...