天天看點

【深度學習小常識】CPU(中央處理器)和GPU(圖像處理器)的差別

學習資料集訓練時,電腦沒有GPU,是以當時訓練時用的是CPU,也沒有意識到兩者之間在訓練資料集有什麼差别,直到在一次訓練過程中,着重看了一下訓練過程,才發現,訓練時間是真的差距大。

接下來就給大家講一下,這兩個具體有什麼差别。

一、GPU和CPU是什麼?

CPU:中央處理器(英文Central Processing Unit)是一台計算機的運算核心和控制核心。CPU、内部存儲器和輸入/輸出裝置是電子計算機三大核心部件。其功能主要是解釋計算機指令以及處理計算機軟體中的資料。

【深度學習小常識】CPU(中央處理器)和GPU(圖像處理器)的差別

CPU

GPU:英文全稱Graphic Processing Unit,中文翻譯為“圖形處理器”。一個專門的圖形核心處理器。GPU是顯示卡的“大腦”,決定了該顯示卡的檔次和大部分性能,同時也是2D顯示卡和3D顯示卡的差別依據。2D顯示晶片在處理3D圖像和特效時主要依賴CPU的處理能力,稱為“軟加速”。3D顯示晶片是将三維圖像和特效處理功能集中在顯示晶片内,也即所謂的“硬體加速”功能。

【深度學習小常識】CPU(中央處理器)和GPU(圖像處理器)的差別

GPU

【深度學習小常識】CPU(中央處理器)和GPU(圖像處理器)的差別

顯示卡

二、GPU與CPU有什麼差別?

CPU和GPU之是以大不相同,是由于其設計目标的不同,它們分别針對了兩種不同的應用場景。主要差別如下。

CPU需要很強的通用性來處理各種不同的資料類型,同時又要邏輯判斷又會引入大量的分支跳轉和中斷的處理。這些都使得CPU的内部結構異常複雜。而GPU面對的則是類型高度統一的、互相無依賴的大規模資料和不需要被打斷的純淨的計算環境。

于是CPU和GPU就呈現出非常不同的架構。

【深度學習小常識】CPU(中央處理器)和GPU(圖像處理器)的差別

其中上圖中綠色的是計算單元,橙紅色的是存儲單元,橙黃色的是控制單元。

GPU采用了數量衆多的計算單元和超長的流水線,但隻有非常簡單的控制邏輯并省去了Cache。而CPU不僅被Cache占據了大量空間,而且還有有複雜的控制邏輯和諸多優化電路,相比之下計算能力隻是CPU很小的一部分。

【深度學習小常識】CPU(中央處理器)和GPU(圖像處理器)的差別

CPU 基于低延時的設計:

【深度學習小常識】CPU(中央處理器)和GPU(圖像處理器)的差別

CPU有強大的ALU(算術運算單元),它可以在很少的時鐘周期内完成算術計算。

當今的CPU可以達到64bit 雙精度。執行雙精度浮點源算的加法和乘法隻需要1~3個時鐘周期。CPU的時鐘周期的頻率是非常高的,達到1.532~3gigahertz(千兆HZ, 10的9次方).大的緩存也可以降低延時。儲存很多的資料放在緩存裡面,當需要通路的這些資料,隻要在之前通路過的,如今直接在緩存裡面取即可。

複雜的邏輯控制單元。當程式含有多個分支的時候,它通過提供分支預測的能力來降低延時。資料轉發。 當一些指令依賴前面的指令結果時,資料轉發的邏輯控制單元決定這些指令在pipeline中的位置并且盡可能快的轉發一個指令的結果給後續的指令。這些動作需要很多的對比電路單元和轉發電路單元。

【深度學習小常識】CPU(中央處理器)和GPU(圖像處理器)的差別

GPU是基于大的吞吐量設計。

GPU的特點是有很多的ALU和很少的cache. 緩存的目的不是儲存後面需要通路的資料的,這點和CPU不同,而是為thread提高服務的。如果有很多線程需要通路同一個相同的資料,緩存會合并這些通路,然後再去通路dram(因為需要通路的資料儲存在dram中而不是cache裡面),擷取資料後cache會轉發這個資料給對應的線程,這個時候是資料轉發的角色。但是由于需要通路dram,自然會帶來延時的問題。

GPU的控制單元(左邊黃色區域塊)可以把多個的通路合并成少的通路。

GPU的雖然有dram延時,卻有非常多的ALU和非常多的thread. 為啦平衡記憶體延時的問題,我們可以中充分利用多的ALU的特性達到一個非常大的吞吐量的效果。盡可能多的配置設定多的Threads.通常來看GPU ALU會有非常重的pipeline就是因為這樣。是以與CPU擅長邏輯控制,串行的運算。和通用類型資料運算不同,GPU擅長的是大規模并發計算,這也正是密碼破解等所需要的。是以GPU除了圖像處理,也越來越多的參與到計算當中來。

上面說的有點專業化,接下來就簡單說一下,他們兩個到底差在哪?

CPU(Central Processing Unit)是電腦最主要的部件,他的主要功能是解釋計算機指令以及處理計算機軟體中的資料,說白了就是做指揮工作,統籌各方面。CPU相當于整個電腦的心髒,而GPU相當于顯示卡的心髒。

普通的處理器CPU差不多雙核心四線程,目前市面上最高端的桌面處理器i9-7980XE(RMB1.5萬)不過十八核心三十六線程。GPU則不同,就拿普通的2000塊的遊戲顯示卡RX 480來說,RX480的GPU晶片計算單元劃分為36個CU計算核心,每個CU核心又包含了64個流處理器計算核心,是以總共就是36X64=2304個流處理器計算核心。

CPU相對于GPU就像老教授和國小生,拿i9-7980XE和RX480舉個例子,出一套國小數學試卷,老教授剛做一道題,兩千多名學生一人一題早就交卷子了。如果套高數卷子,老教授做完學生們一道也不會做。

三、訓練神經網絡GPU優于CPU

很多個簡單的工作,交給GPU顯然更适合。

其實在早期,神經網絡都是用CPU訓練的。即使現在,像TensorFlow這樣的流行架構也支援在CPU上運作。那麼,既然CPU和GPU都可以訓練神經網絡,為什麼一般用GPU訓練神經網絡?很簡單,因為GPU比CPU快很多。比如,Victor Dibia(IBM研究院Research Staff Member)基于Tensorflow架構訓練了一個實時檢測手部的網絡。

訓練這樣一個神經網絡要花多久?CPU上大約要12天,而GPU上則是5小時。(我們這裡不讨論具體的型号,關鍵是兩者的比例。CPU和GPU的差距太大了)。

而且,實際上這個神經網絡的訓練時間已經通過遷移學習大大縮短了。遷移學習指直接拿訓練好的圖像分類的模型來用,隻是重新訓練最後一層或幾層網絡以檢測手部,是以能快很多。那如果從頭開始訓練的話(有的時候沒有現成的模型可供遷移),可能要幾周甚至幾個月。這還是GPU的情況。

繼續閱讀