GPU計算已成為數據科學領域的重要組成部分。計算需求的不斷增長,使得GPU計算逐漸流行起來。此外,現在每個主要雲計算提供商都提供了GPU服務,比如阿里雲,因此現在訪問高性能硬件是非常簡單的一件事。但是,自行構建GPU軟件是相當嚇人。幸運的是,Anaconda Distribution可以很容易地啟動GPU計算,並且可以從我們的軟件包庫中直接安裝幾個支持GPU的軟件包。在這篇博客文章中,我們將向你介紹如何在Anaconda發行版中開始使用GPU。

在本文中我將介紹NVIDIA GPU製造的GPU,因為它們在Anaconda Distribution中有內置支持,但是AMD的Radeon Open Compute計劃也在迅速改善AMD GPU計算生態系統,以保證能夠適應現在的軟件。

1.什麼時候選擇GPU?

GPU並不是通用計算設備。它們是專門的協處理器,對於一些任務來說是非常好的(一般可以提升10倍的性能)。GPU最成功的應用是在設備的大並行浮點吞吐量和高內存帶寬的問題領域中。一些例子包括:

1.線性代數。

2.信號和圖像處理(FFT)。

3.神經網絡和深度學習。

4.其他機器學習算法,包括廣義線性模型,梯度增強等。

5.蒙特卡羅模擬和粒子運輸。

6.流體模擬。

7.內存數據庫。

...

所有這些成功用例的共同點是什麼?廣義而言,準備用於GPU加速的應用程序具有以下特徵:

1.1:高“算術強度”

如果數學運算與內存運算的比例較高,要求運算算法速度快,GPU加速是一個很好的選擇。這些算法利用了GPU的高數學吞吐量,以及在同時對其他數據進行數學運算的同時,在後臺對內存訪問進行排隊的能力。GPU可以在請求和接收存儲在GPU內存中的一個編號的時間內輕鬆地執行許多數學指令。

什麼算得上高算術強度?GPU的一個法則是,對於你輸入的每一個數字,你至少需要十個基本的數學運算(加法,減法,乘法,除法等)或至少一個特殊的數學函數調用,如exp()或者cos()。

1.2:高度的平行性

GPU是處理陣列的最佳選擇,大陣列的元素可以並行計算。如果計算只能分成少量的獨立任務,則多核CPU可能更適合。請注意,找到並行的方法是要用不同的算法替換當前的串行算法,以高度並行的方式解決相同的問題。一個快速的網絡搜索是否有價值,看它是否有“明顯不能並行化”的東西。

1.3:工作數據集可以放入GPU內存

16 GB(甚至24 GB)的GPU現在已經可以買到,但也比在高端服務器上安裝的系統內存的數量要少一個數量級。一些算法可以將數據在同一臺計算機上的多個GPU之間進行分割,而且有時可以在不同計算機的GPU之間分割數據。也可以將系統RAM中的數據傳輸到GPU中,但連接GPU和CPU的PCI-E總線的帶寬或將成為一個限制因素,除非計算和內存傳輸仔細重疊。

1.4:I / O不是瓶頸

很多數據科學任務主要受I / O速度限制。例如,在一個磁盤上過濾500 GB記錄以找到與簡單搜索模式匹配的子集的應用程序將花費大部分時間等待數據從磁盤加載。如果這個數據過濾之後將要進行6個小時的深度學習的訓練,那麼使用GPU將是非常有益的(僅對於模型訓練階段)。在開始性能優化工作之前,分析你的Python應用程序以測量實際耗用的時間是一個好主意。

2.先決條件

在開始使用GPU之前,你需要做一些事情:

2.1:使用NVIDIA®(英偉達™)GPU(圖形處理器)的系統:更便宜的GeForce顯卡非常適合實驗,更昂貴的Tesla顯卡通常具有更好的雙精度性能和更多內存。移動NVIDIA GPU也可以工作,但性能非常有限。

2.2:支持CUDA的驅動程序:儘管Mac,Windows和Linux支持CUDA,但我們發現Linux上是最好的CUDA體驗。Mac在2014年停止獲得NVIDIA GPU,而在Windows上,圖形驅動程序系統的侷限性損害了運行CUDA的GeForce卡的性能。Linux上最新的NVIDIA驅動程序(不是Nouveau)對於支持GPU的Anaconda軟件包來說已經足夠了。除非你想從頭編譯自己的GPU軟件,否則不需要安裝完整的CUDA工具包。

2.3:Anaconda:安裝本文描述的軟件包最簡單的方法是使用Anaconda Distribution中的conda命令行工具。如果你是Anaconda Distribution的新手,最近發佈的版本5.0是一個很好的開始,但舊版本的Anaconda Distribution也可以安裝下面描述的軟件包。

3.GPU項目檢查

深度學習:Keras,TensorFlow,PyTorch

訓練神經網絡(通常稱為“深度學習”,指的是常用的大量網絡層)已經成為GPU計算的一個非常成功的應用。神經網絡已經證明了它們在圖像字幕,語言翻譯,語音生成和許多其他應用中的實用性。但是,他們需要大量的數據集和計算能力來訓練,並且能夠輕鬆地進行不同模型的實驗。一旦訓練完畢,模型可以在CPU和移動設備上運行。

對於深度學習來說,我非常喜歡Keras。Keras是一個Python庫,用於構建,訓練和評估支持多種高性能後端庫(包括TensorFlow,Theano和Microsoft的Cognitive Toolkit)的神經網絡模型。Keras也可以不用GPU,但是對於許多項目來說,如果你有一個GPU的話,訓練速度可以提高10倍。

Keras和支持GPU的TensorFlow版本可以使用以下命令安裝在Anaconda中:

conda install keras-gpu

我也喜歡在Jupyter上記錄我的Keras實驗,所以你可能也想運行:

conda install notebook

jupyter notebook

一些很好的起點是練習Github上的CIFAR10和MNIST卷積神經網絡實例。

值得一提的是像TensorFlow和PyTorch這樣的庫可以直接用於各種計算和機器學習任務,而不僅僅是深度學習。因為它們使CPU和GPU之間的計算變得非常容易,所以它們可以成為數據科學工具箱中最強大的工具。

4.GPU加速數學庫:pyculib

NVIDIA還通過GPU加速實現了標準的數學算法。pyculib項目提供了許多這些算法的Python包,包括:

1.線性代數。

2.快速傅立葉變換。

3.稀疏矩陣。

4.隨機數生成。

5.排序。

這些Python包採用標準的NumPy數組,併為你處理來自GPU的所有副本。請注意,由於複製開銷,你可能會發現這些函數沒有比NumPy更快的小陣列。性能也很大程度上取決於你使用的GPU類型和數組數據類型。使用GeForce顯卡時,float32類型比float64(NumPy默認)要快得多。

5.GPU內核編程:Numba

對於想要深入研究GPU編程細節的人來說,Numba是一個不錯的選擇。Numba是開放源代碼Python編譯器,其中包括適用於CPU和GPU目標的即時編譯工具。它不僅編譯用於在CPU上執行的Python函數,還包括一個完全的Python本機API,用於通過CUDA驅動程序對NVIDIA GPU進行編程。在GPU上運行的代碼也是用Python編寫的,並且內置了支持將NumPy數組發送到GPU並使用熟悉的Python語法訪問它們的支持。

Numba的GPU支持是可選的,所以要啟用它,你需要安裝Numba和CUDA工具包conda軟件包:

conda install numba cudatoolkit

CUDA編程模型基於兩級數據並行性概念。在GPU上啟動“內核函數”,同時執行相同的函數的“網格”(通常是數千個)線程。網格由許多相同的線程塊組成,塊內的線程能夠比不同塊中的線程更容易地同步和共享數據。這種編程風格與傳統的CPU上的多線程編程有很大不同,它針對“數據並行”算法進行了優化,每個線程同時運行相同的指令,但具有不同的輸入數據元素。CUDA編程指南的前幾章對如何使用CUDA給予了很好的討論。一旦熟悉了CUDA編程模型,下一步應該是2017 GPU技術大會上我們教程中的Jupyter筆記本。筆記本涵蓋了使用Python編程GPU的基本語法,還包括更多高級主題,如ufunc創建,內存管理和調試技術。

6.GPU數據框:PyGDF

GPU Dataframe(簡稱“GDF”)概念是Anaconda與GPU Open Analytics Initiative的其他成員共同開發的。GDF是Apache Arrow格式的數據幀,存儲在GPU內存中。由於在CUDA驅動程序中支持在進程之間傳輸GPU內存部分,所以通過對GPU加速數據庫(如MapD)的查詢創建的GDF可以直接發送到Python解釋器,在該解釋器中可以執行該數據幀的操作,然後可以將數據移動到像H2O這樣的機器學習庫中,所有這些都不需要從GPU上取下數據。

對Python Dataframe的Python支持由PyGDF項目提供,我們從2017年3月開始一直致力於PyGDF項目。它提供了用於在GPU數據幀上運行的Pandas API的子集,使用GPU的並行計算能力(以及Numba JIT )用於排序,柱狀數學,縮減,過濾器,連接和按操作分組。

結論:

我只介紹了關於GPU的冰山一角,但是希望上面提到的能激勵你深入瞭解。下面

下載Anaconda發行版:https://www.anaconda.com/download/

Keras教程:https://github.com/fchollet/keras-resources

Pyculib文檔:http://pyculib.readthedocs.io/

從GTC 2017 Numba GPU教程:https://github.com/ContinuumIO/gtc2017-numba

Parallel Forall博客中有關Numba的七件事:

https://devblogs.nvidia.com/parallelforall/seven-things-numba/

GPU Open Analytics Initiative主頁:http://gpuopenanalytics.com/

Stanley selbert, Stan領導著Anaconda的社區創新團隊,他的工作重點是高性能GPU計算和設計數據分析

本文由北郵@愛可可-愛生活老師推薦,阿里云云棲社區組織翻譯。

文章原標題《Getting started with GPU Computing in Anaconda》

作者:Stanley selbert譯者:虎說八道,審閱:

相關推薦

推薦中...