新人,小白。最近開始學習機器學習的語義分割。查到自己電腦上的顯卡為intel,無法安裝cuda。 請問論壇里的大神,是不是深度學習框架pytorch ,caffe ,keras等都不能使用。有可以推薦的嗎?

謝謝


去Google用TPU也可以


深度學習離不開GPU,不過一直以來對GPU和CPU的差別,CUDA以及cuDNN都不是很了解,所以找了些資料整理下,希望不僅可以幫助自己理解,也能夠幫助到其他人理解。

先來講講CPU和GPU的關係和差別吧。截圖來自資料1(CUDA的官方文檔):

從上圖可以看出GPU(圖像處理器,Graphics Processing Unit)和CPU(中央處理器,Central Processing Unit)在設計上的主要差異在於GPU有更多的運算單元(如圖中綠色的ALU),而Control和Cache單元不如CPU多,這是因為GPU在進行並行計算的時候每個運算單元都是執行相同的程序,而不需要太多的控制。Cache單元是用來做數據緩存的,CPU可以通過Cache來減少存取主內存的次數,也就是減少內存延遲(memory latency)。GPU中Cache很小或者沒有,因為GPU可以通過並行計算的方式來減少內存延遲。因此CPU的Cahce設計主要是實現低延遲,Control主要是通用性,複雜的邏輯控制單元可以保證CPU高效分發任務和指令。所以CPU擅長邏輯控制,是串列計算,而GPU擅長高強度計算,是並行計算。打個比方,GPU就像成千上萬的苦力,每個人乾的都是類似的苦力活,相互之間沒有依賴,都是獨立的,簡單的人多力量大;CPU就像包工頭,雖然也能幹苦力的活,但是人少,所以一般負責任務分配,人員調度等工作。

可以看出GPU加速是通過大量線程並行實現的,因此對於不能高度並行化的工作而言,GPU就沒什麼效果了。而CPU則是串列操作,需要很強的通用性,主要起到統管和分配任務的作用。

CUDA的官方文檔(參考資料1)是這麼介紹CUDA的:a general purpose parallel computing platform and programming model that leverages the parallel compute engine in NVIDIA GPUs to solve many complex computational problems in a more efficient way than on a CPU.

換句話說CUDA是NVIDIA推出的用於自家GPU的並行計算框架,也就是說CUDA只能在NVIDIA的GPU上運行,而且只有當要解決的計算問題是可以大量並行計算的時候才能發揮CUDA的作用。

在 CUDA 架構下,顯示晶元執行時的最小單位是thread。數個 thread 可以組成一個block。一個 block 中的 thread 能存取同一塊共享的內存,而且可以快速進行同步的動作。每一個 block 所能包含的 thread 數目是有限的。不過,執行相同程序的 block,可以組成grid。不同 block 中的 thread 無法存取同一個共享的內存,因此無法直接互通或進行同步。因此,不同 block 中的 thread 能合作的程度是比較低的。不過,利用這個模式,可以讓程序不用擔心顯示晶元實際上能同時執行的 thread 數目限制。例如,一個具有很少量執行單元的顯示晶元,可能會把各個 block 中的 thread 順序執行,而非同時執行。不同的 grid 則可以執行不同的程序(即 kernel)。

cuDNN(CUDA Deep Neural Network library):是NVIDIA打造的針對深度神經網路的加速庫,是一個用於深層神經網路的GPU加速庫。如果你要用GPU訓練模型,cuDNN不是必須的,但是一般會採用這個加速庫

還是建議使用cuda,可以提高自己的實驗效率,但是配置cuda還是很麻煩的,需要花費大量的經歷,因此比較建議大家在智星雲租用GPU,首先由圖形界面,且環境也幾乎都配置好了。


CUDA的官方文檔(參考資料1)是這麼介紹CUDA的:a general purpose parallel computing platform and programming model that leverages the parallel compute engine in NVIDIA GPUs to solve many complex computational problems in a more efficient way than on a CPU.

換句話說CUDA是NVIDIA推出的用於自家GPU的並行計算框架,也就是說CUDA只能在NVIDIA的GPU上運行,而且只有當要解決的計算問題是可以大量並行計算的時候才能發揮CUDA的作用。

接下來這段話摘抄自資料2。在 CUDA 的架構下,一個程序分為兩個部份:host 端和 device 端。Host 端是指在 CPU 上執行的部份,而 device 端則是在顯示晶元上執行的部份。Device 端的程序又稱為 「kernel」。通常 host 端程序會將數據準備好後,複製到顯卡的內存中,再由顯示晶元執行 device 端程序,完成後再由 host 端程序將結果從顯卡的內存中取回。

在 CUDA 架構下,顯示晶元執行時的最小單位是thread。數個 thread 可以組成一個block。一個 block 中的 thread 能存取同一塊共享的內存,而且可以快速進行同步的動作。每一個 block 所能包含的 thread 數目是有限的。不過,執行相同程序的 block,可以組成grid。不同 block 中的 thread 無法存取同一個共享的內存,因此無法直接互通或進行同步。因此,不同 block 中的 thread 能合作的程度是比較低的。不過,利用這個模式,可以讓程序不用擔心顯示晶元實際上能同時執行的 thread 數目限制。例如,一個具有很少量執行單元的顯示晶元,可能會把各個 block 中的 thread 順序執行,而非同時執行。不同的 grid 則可以執行不同的程序(即 kernel)

cuDNN(CUDA Deep Neural Network library):是NVIDIA打造的針對深度神經網路的加速庫,是一個用於深層神經網路的GPU加速庫。如果你要用GPU訓練模型,cuDNN不是必須的,但是一般會採用這個加速庫。

總的來說目前cuda和cuDNN是目前主流的解決方案。我也經歷過沒有GPU的苦,也用cpu訓練過,不過經驗是完全浪費時間,得不償失,要是自己沒有GPU,可以考慮租用GPU,比如智星雲,大家可以在智星雲租用GPU,環境都是配置好的,性價比很高。


AMD已經向Tensorflow提交了ROCm支持,然而目前最成熟的方案依舊是CUDA。

使用 AMD 顯卡加速 TensorFlow?

mp.weixin.qq.com圖標

這個問題的本質是:

對於一般的model,以及常規的資金投入下,是不是cuda加速框架的訓練速度足夠快,而使你能在合理的時間內得到結果。

答案:是,cuda是目前最好的選擇。

其實目前主流框架都支持cpu版(因為其實這些框架總的來說都是數學運算庫,當然可以基於cpu進行運算),而且amd,intel都推出了基於自己晶元的加速版本,amd也做了ROCm的gpu加速。

但是,最重要的,nvidia推出的cuda,也只有nvidia GPU有最優的效能,nvidia整個軟硬體生態做的最好,現在幾乎所有深度學習框架都首選cuda作為底層加速庫,結局就是,沒得選,當前只有用cuda了。。。


推薦閱讀:
相关文章