[ 教學 ]  Rapids簡介與Benchmark評測
  回覆文章總數:

Rapids簡介與Benchmark評測

  By : Leadtek AI Expert     410

RAPIDS為NVIDIA推出的針對資料科學與機器學習的GPU加速平台,主要是透過CUDA加速函式庫進行最佳化的計算,讓使用者方便使用GPU的運算資源,並提供Python搭配jupyter的介面,在進行資料分析時可將數據可視化。RAPIDS構建於Apache Arrow、pandas和scikit-learn等流行的開源項目之上,為最流行的Python數據科學工具鏈帶來了GPU效能。
 
NVIDIA為了將更多機器學習方法引入RAPIDS也與許多open-source 貢獻者合作開發,如Anaconda、BlazingDB、Databricks、Quansight 和 scikit-learn,其中Apache Arrow及 Pandas (python資料科學函式庫) 的創造者也參與其中,將RAPIDS的開發環境導入Apache Arrow的資料格式,大幅提升資料傳輸和分析的效率,NVIDIA也正努力將RAPIDS與Apache Spark進行整合。

Apache Arrow

Apache Arrow優勢,圖片來源

Apache Arrow為一種跨平台應用的內存數據交換「記憶體格式」,讓使用者在不同系統數據間的結合更有效率,傳統的內存數據使採用行列是儲存,每個系統都有屬於自己的記憶體格式,在資料交換時會浪費許多時間在序列化和反序列上,而Apache Arrow則是採用列式儲存格式,大大提升系統和應用的效率。
 

Appach Arrow儲存架構,圖片來源

Apache Arrow 的記憶體資料結構示意圖,傳統的記憶體資料格式為行列儲存(如圖左),Apache Arrow為列式儲存,將相同的資料排列在一起。
 

cuDF 

GPU DataFrame library

cuDF為GPU DataFrame 函式庫,將資料以DataFrame的格式儲存,並用於數據分析與計算,使用上與python中pandas類似,能夠進行資料讀取、過濾、聚合…等等,此外,cuDF基於Apache Arrow的記憶體格式開發,能提升資料傳輸GPU運算的效率,也能簡單地將其他資料來源(如:Pandas、spark、csv…等)轉換為cuDF的資料格式,或將cuDF轉為其他格式使用,透過開源的JIT編譯器(即時編譯):Numba, cuDF也提供平行化處理資料的功能,使用者可使用cuDF提供的包裝函式,簡單地對資料進行平行計算,而對於kernel使用有經驗的人,也可直接使用cuDF DataFrame與Numba來撰寫kernel 函式進行計算。

 
DataFrame為二維的資料結構(如上圖),可以使用不同的指令來檢視與使用想要的資料(如:資料大小、長度、空值的數量…等),該資料格式可用來進行機器學習運算,雖然與cuDF DataFrame形式與使用上相同,然而cuDF因為需在GPU上宣告空間而有額外的處理時間,且默認的記憶體管理模式下,cuDF DataFrame的空間大小取決於GPU Memory,通常會比Pandas DataFrame小。

cuML


cuML為RAPIDS的機器學習與科學計算函式庫,提供類似於scikit-learn的API,並且不需要了解GPU相關程式也能使用GPU來加速運算,使用cuML時通常需搭配cuDF DataFrame,來加速資料進入GPU的速度,以簡化Host與Device 之間傳輸的指令,cuML的演算法可分為三大類:Regression and Classification、Clustering及Dimensionality Reduction,演算法使用C語言撰寫,透過cython銜接,目前cuML有些部分仍在開發當中。Rapids團隊也與DMLC XGBoost組織有緊密的合作,在RAPIDS的環境中也支援XGBoost的方法。
 
NVIDIA與DASK合作開發,往後將推出多GPU多節點的技術在machine learning的方法中實現,預計在RAPIDS 1.0版時大部分方法都可以支援。

Benchmarks - Official Test


Spark與RAPIDS效能比較,縱軸為執行時間(秒),圖片來源

比較使用CPU 與使用RAPIDS端到端(end to end)流程,可以看到RAPIDS不只減少模型訓練時間,也大幅降低資料轉換的時間。
 

三種方法於不同資料規模下的cuML與sklearn加速比,圖片來源

TSVD、PCA、DBSCAN 三種方法使用cuML與sklearn 訓練的效能差異,資料規模越大,效能提升也越顯著。同樣的,處理的變數越多(features),效能提升也更明顯。

Benchmarks - Actual Test

測試系統規格: WinFast WS830 (Intel Xeon W-2135, 128GB RAM, GTX 1070 8GB) 

軟體規格: Ubuntu 18.04, CUDA 10.0, cuDNN 7.5
 

cuDF(RAPIDS)與pandas資料讀取速度比較 (橫軸為資料規模,縱軸為執行時間(秒))


GPU與CPU(12核心)於XGBoost效能比較 (橫軸為資料規模,縱軸為執行時間(秒))

 
(12核心)於RandomForest效能比較 (橫軸為資料規模,縱軸為執行時間(秒))

 
GPU與CPU於PCA效能比較 (橫軸為資料規模,縱軸為執行時間(秒))
 

GPU與CPU於K-means效能比較 (橫軸為資料規模,縱軸為執行時間(秒))

以下是回覆文