利用GPU加速傳統機器學習算法——RAPIDS簡介及其使用方法

隨著深度學習的火熱,對計算機算力的要求越來越高。從2012年AlexNet以來,人們越來越多開始使用GPU加速深度學習的計算。

然而,一些傳統的機器學習方法對GPU的利用卻很少,這浪費了很多的資源和探索的可能。在這裡,我們介紹一個非常優秀的項目——RAPIDS,這是一個致力於將GPU加速帶給傳統算法的項目,並且提供了與Pandas和scikit-learn一致的用法和體驗,非常值得大家嘗試。如果需要使用傳統機器學習方法處理大規模的數據,這是非常值得使用的庫。這裡列舉的只是少部分功能,它的強大遠遠超過你的想象。

目前,RAPIDS提供三個模塊處理數據:cuDF相當於Pandas,cuML相當於scikit-learn,cuGraph則是處理圖數據的(如PageRank算法)。由於它的兼容性很好,我們可以把RAPIDS與深度學習框架結合,用cuDF來利用GPU加速處理數據,然後使用PyTorch的深度學習模型處理任務。這也是可以的。所以,它非常靈活而且強大。

RAPIDS在Medium上也有博客,介紹了很多使用RAPIDS處理任務的技巧,如使用RAPIDS處理金融數據、使用cuDF加速協同過濾等。鏈接可以看參考一章。大家也可以參考基於GPU的機器學習Python庫——RAPIDS簡介及其使用方法 | 數據學習者官方網站(Datalearner)

本文主要內容如下

一、為什麼使用GPU

二、RAPIDS簡介

2.1、cuDF2.2、cuML2.3、cuGraph

三、使用方法

一、為什麼使用GPU

相比較CPU而言,GPU是由很多個簡單的核組成的計算單元,它可以並行處理很多個任務(而CPU是有較少的複雜的核心組成,執行序列任務,只能同時執行很少的線程)。同時,GPU也比CPU有更好的帶寬優化。而深度學習的基本算子則是矩陣乘法、向量加減和單值運算,它的特點是基本算子計算簡單,但是對算力的需求較高。這正好與GPU的特點相結合。因此,GPU是目前加速深度學習最合適的硬件。

當然,這裡不得不提到的是CUDA。CUDA是一個直接運行在GPU上的並行計算平臺和編程模型。它是由Nvidia開發的,目的是為了充分利用Nvidia家的GPU計算能力。雖然基於GPU的並行計算平臺和編程框架還有很多,如OpenCL等。但是,CUDA是目前應用最廣泛的一個。

在CUDA之上,我們可以使用C、C++和Fortran編程語言,但這類語言的入門門檻較高,所以很多框架都在此之上提供了Python的用戶編程入口。如TensorFlow,它的底層就是使用C語言編寫,可以運行在CUDA上,因而可以充分利用GPU的並行計算能力。下圖是TensorFlow的架構:

利用GPU加速傳統機器學習算法——RAPIDS簡介及其使用方法

儘管如此,目前只有深度學習框架比較充分利用了GPU的加速功能。而很多傳統機器學習算法大多數只能運行在CPU上,為了加速傳統機器學習算法的運行速度,現在也有一些組織開始提供類似的框架了。而RAPIDS就是其中非常優秀的一個。

二、RAPIDS簡介

RAPIDS是一個開源的庫,它提供了端到端的數據科學和分析流程,以及一些傳統的經典機器學習算法,可以完全運行在GPU上。它與一些主流的庫完美兼容,如Pandas等,因此,入門不高。

與TensorFlow類似,RAPIDS的底層使用C語言編寫,並利用NVIDIA的CUDA平臺進行GPU的加速。在上層則提供Python的編程接口。RAPIDS架構如下:

利用GPU加速傳統機器學習算法——RAPIDS簡介及其使用方法

RAPIDS起源於Apache Arrow和GoAi項目。目前包括了三個項目:

  • cuDF
  • cuML
  • cuGraph

我們分別簡單介紹一下。

2.1、cuDF

cuDF是基於Apache Arrow構造(這是一種基於內存的數據處理的跨語言平臺),但是一種GPU的DataFrame庫。可以用來加載、過濾、表徵數據。cuDF提供了類似Pandas的編程接口。上手非常容易。

如下面的官方示例:

import cudf
tips_df = cudf.read_csv(file)
tips_df['tip_percentage'] = tips_df['tip']/tips_df['total_bill']*100

可以看到,它與Pandas的處理方式幾乎一模一樣。

2.2、cuML

cuML是RAPIDS項目中實現機器學習算法和數學計算的庫。它可以讓我們在GPU上運行傳統的機器學習算法。為了方便大家使用,cuML還提供了與scikit-learn像似的算法接口。

與在CPU上運行相比,cuML運行在GPU上要快10-50倍。下圖給出了RAPIDS數據處理到算法運算的速度對比:

利用GPU加速傳統機器學習算法——RAPIDS簡介及其使用方法

可以看到,RAPIDS的速度要比運行在CPU上的sklearn算法速度快很多。

2.3、cuGraph

cuGraph是一個用來處理圖形數據的庫,主要吹cuDF在GPU上的數據。它期望提供類似NetworkX接口的工具,可以幫助大家處理圖挖掘問題。目前支持的算法包括PageRank、BSF等。

三、使用方法

RAPIDS依賴一些其他的基本庫。因此,使用RAPIDS之前需要安裝一些依賴的庫。目前,RAPIDS需要的東西:

  • GPU: NVIDIA Pascal及更好的GPU,兼容6.0以上版本
  • OS:Ubuntu 16.04/18.04或者CentOS7(需要gcc5.4和7.3)
  • Docker: Docker CE v18+和NVIDIA-docker v2+
  • CUDA:9.2且驅動是v396.37以上,或者10.0驅動v410.48以上

cuDF的使用和Pandas基本一致,cuML的使用和sklearn的方法基本一致。所以上手非常簡單。我們看一下官網運行DBSCAN的例子即可:

import cudf
from cuml.cluster import DBSCAN
# Create and populate a GPU DataFrame
gdf_float = cudf.DataFrame()
gdf_float['0'] = [1.0, 2.0, 5.0]
gdf_float['1'] = [4.0, 2.0, 1.0]
gdf_float['2'] = [4.0, 2.0, 1.0]
# Setup and fit clusters
dbscan_float = DBSCAN(eps=1.0, min_samples=1)
dbscan_float.fit(gdf_float)
print(dbscan_float.labels_)

輸出的結果是:

0 0
1 1
2 2
dtype: int32

參考:

https://medium.com/shachishah.ce/do-we-really-need-gpu-for-deep-learning-47042c02efe2

https://towardsdatascience.com/heres-how-you-can-accelerate-your-data-science-on-gpu-4ecf99db3430

https://rapids.ai/

https://medium.com/rapids-ai

相關推薦

推薦中...