如何通過Maingear的新型Data Science PC將NVIDIA GPU用於機器學習

  • 2019 年 10 月 31 日
  • 筆記

作者 | DéborahMesquita

來源 | Medium

編輯 | 程式碼醫生團隊

深度學習使我們能夠執行許多類似人類的任務,但是如果是數據科學家並且沒有在FAANG公司工作(或者如果沒有開發下一個AI初創公司),那麼仍然有可能會使用和舊的(好吧,也許不是那麼古老)機器學習來執行日常任務。

深度學習的一個特點是它的計算量很大,因此所有主要的DL庫都利用GPU來提高處理速度。但是,如果因為不使用深度學習而感到被淘汰,那段日子已經過去了:有了RAPIDS庫套件,現在可以完全在GPU上運行數據科學和分析管道。

https://developer.nvidia.com/rapids

在本文中,將討論其中的一些RAPIDS庫,並進一步了解Maingear的新型Data Science PC。

人們為什麼仍然使用GPU?

一般來說,GPU之所以快,是因為它們具有高頻寬的記憶體和以比傳統CPU更高的速率執行浮點運算的硬體[1]。GPU的主要任務是執行渲染3D電腦圖形所需的計算。

但是在2007年,NVIDIA創建了CUDA。CUDA是一個並行計算平台,為開發人員提供API,使能夠構建可以利用GPU進行通用處理的工具。

GPU已經發展成為高度並行的多核系統,可以非常高效地處理大數據塊。在並行處理大數據塊的情況下,此設計比通用中央處理器(CPU)更有效的演算法-Wikipedia上的CUDA文章 [2]

基本上,機器學習會執行處理大量數據的操作,因此GPU在執行ML任務時非常方便。TensorFlow和Pytorch是已經利用GPU的庫的示例。現在,藉助RAPIDS庫套件,還可以操縱數據幀並在GPU上運行機器學習演算法。

快速

RAPIDS是一套開放源程式碼庫,可與流行的數據科學庫和工作流集成在一起以加快機器學習的速度[3]。

一些RAPIDS項目包括cuDF(類似於Pandas的數據框操作庫)。cuML,機器學習庫的集合,將提供sciKit-learn中可用的GPU版本的演算法;cuGraph,類似於NetworkX的加速圖分析庫[4]。

https://github.com/rapidsai/cudf

https://github.com/rapidsai/cuml

Pandas和sciKit-learn是兩個主要的數據科學庫,因此讓我們進一步了解cuDF和cuML。

cuDF:數據幀操作

cuDF提供了類似Pandas的API,用於數據幀操作,因此,如果知道如何使用Pandas,那麼已經知道如何使用cuDF。如果想跨多個GPU分配工作流,則還有Dask-cuDF庫[5]。

可以像Pandas一樣創建系列和數據框:

import numpy as np  import cudf  s = cudf.Series([1,2,3,None,4])  df = cudf.DataFrame([('a', list(range(20))),                       ('b', list(reversed(range(20)))),                       ('c', list(range(20)))])

也可以將pandas數據幀轉換為cuDF數據幀(但不建議這樣做):

import pandas as pd  import cudf  df = pd.DataFrame({'a': [0, 1, 2, 3],'b': [0.1, 0.2, None, 0.3]})  gdf = cudf.DataFrame.from_pandas(df)

也可以做相反的事情,將cuDF數據幀轉換為pandas數據幀:

import cudf  df = cudf.DataFrame([('a', list(range(20))),                       ('b', list(reversed(range(20)))),                       ('c', list(range(20)))])  pandas_df = df.head().to_pandas()

或轉換為numpy數組:

import cudf  df = cudf.DataFrame([('a', list(range(20))),                       ('b', list(reversed(range(20)))),                       ('c', list(range(20)))])  df.as_matrix()  df['a'].to_array()

對數據框所做的所有其他操作(查看數據,排序,選擇,處理缺失值,使用csv文件等)均相同:

import cudf  df = cudf.DataFrame([('a', list(range(20))),                       ('b', list(reversed(range(20)))),                       ('c', list(range(20)))])  df.head(2)  df.sort_values(by='b')  df['a']  df.loc[2:5, ['a', 'b']]  s = cudf.Series([1,2,3,None,4])  s.fillna(999)  df = cudf.read_csv('example_output/foo.csv')  df.to_csv('example_output/foo.csv', index=False)

關於性能,僅舉一個例子,使用Pandas載入1gb的csv文件花費了13秒,而使用cuDF載入它花費了2.53秒。

使用cuDF更快地載入1GB CSV 5倍

cuML:機器學習演算法

cuML與其他RAPIDS項目集成,以實現機器學習演算法和數學基元函數。在大多數情況下,cuML的Python API與sciKit-learn中的 API匹配。該項目仍然有一些局限性(例如,目前無法腌制cuML RandomForestClassifier實例),但是它們的發布周期很短,為期6周,因此它們總是會添加新功能。

除其他工具外,還有回歸,分類,聚類和降維演算法的實現。該API與sciKit API確實非常一致:

import cudf  import numpy as np  from cuml.linear_model import LogisticRegression    X = cudf.DataFrame()  X['col1'] = np.array([1,1,2,2], dtype = np.float32)  X['col2'] = np.array([1,2,2,3], dtype = np.float32)  y = cudf.Series( np.array([0.0, 0.0, 1.0, 1.0], dtype = np.float32) )  # training  reg = LogisticRegression()  reg.fit(X,y)    print("Coefficients:")  print(reg.coef_.copy_to_host())  print("Intercept:")  print(reg.intercept_.copy_to_host())  # making predictions  X_new = cudf.DataFrame()  X_new['col1'] = np.array([1,5], dtype = np.float32)  X_new['col2'] = np.array([2,5], dtype = np.float32)    preds = reg.predict(X_new)    print("Predictions:")  print(preds)

Maingear的Data Science PC

一切都很好,但是如何使用這些工具?好吧,首先,需要獲得與RAPIDS兼容的NVIDIA GPU卡。如果不想花時間找出硬體規格的最佳選擇,那麼NVIDIA將發布Data Science PC。

PC隨附經過優化的軟體堆棧,可運行所有這些用於機器學習和深度學習的庫。它隨Ubuntu 18.04一起提供,可以使用NVIDIA GPU Cloud中的 Docker容器,也可以使用本機conda環境。關於PC的最好的事情之一就是完全安裝了所有庫和軟體。如果不得不在Linux發行版上安裝NVIDIA驅動程式,或者必須從源程式碼安裝TensorFlow,就會知道這是多麼的夢幻。這些是系統配置:

顯示卡

具有24 GB GPU記憶體的NVIDIA Titan RTX 或通過NVIDIA NVLink連接的2路NVIDIA Titan RTX,提供了總計48 GB GPU記憶體

CPU

Intel Core i7類CPU 或更高版本

記憶體

48 GB DDR4系統記憶體為最小單個GPU配置和 的DDR4 GB的96系統存儲器最小為雙GPU配置

硬碟

至少1 TB SSD

該Maingear公司VYBE PRO數據科學PC配備了多達兩個雙NVIDIA TITAN RTX 24GB卡,每個PC是手工組裝。

https://maingear.com/nvidiadatascience/

一個來自Maingear公司VYBE PRO PC有兩個NVIDIA TITAN RTX卡(這件事是如此美麗我害怕打開它)

在VYBER PRO PC上使用具有4,000,000行和1000列的數據集(此數據幀使用大約15 GB的記憶體)訓練XGBoost模型在CPU上花費1分鐘46s(記憶體增量為73325 MiB) ,在GPU上僅花費21.2s(記憶體增量為520 MiB)。

使用GPU更快地訓練XGBoost模型5倍

結論

藉助數據科學,始終需要探索和嘗試新事物。在使工作流程變得困難的其他軟體工程挑戰中,計算數據的大小和時間是兩個瓶頸,這兩個瓶頸使無法在運行實驗時進入流程狀態。擁有一台可以改善這一點的PC和工具確實可以加快工作,並幫助更快地在數據中發現有趣的模式。想像得到一個40 GB的csv文件,然後只需將其載入到記憶體中即可查看其內容。

RAPIDS工具為機器學習工程師帶來了深度學習工程師已經熟悉的GPU處理速度的提高。為了生產使用機器學習的產品,需要進行迭代並確保擁有可靠的端到端流水線,並且使用GPU執行它們將有望改善項目輸出。

參考文獻

[1] https://graphics.stanford.edu/papers/gpumatrixmult/gpumatrixmult.pdf

[2] https://en.wikipedia.org/wiki/CUDA

[3]https://nvidianews.nvidia.com/news/nvidia-introduces-rapids-open-source-gpu-acceleration-platform-for-large-scale-data-analytics-and-machine-learning

[4] https://rapids.ai/about.html

[5]https://rapidsai.github.io/projects/cudf/zh/0.10.0/10min.html#When-to-use-cuDF-and-Dask-cuDF