1. 程式人生 > 其它 >動手學深度學習 | 深度學習硬體:CPU和GPU | 30

動手學深度學習 | 深度學習硬體:CPU和GPU | 30

目錄

CPU和GPU

我們講講GPU和CPU是什麼,而且為什麼深度學習使用GPU會快。

上圖最直觀的就是CPU的浮點運算能力比顯示卡差很多,但是顯示卡的視訊記憶體不會很大,32G其實也就封頂了,但是CPU的記憶體可以一直疊加。

物理核只有一個,但是可以有2個超執行緒。就是市面上很多說的4核8執行緒。

超執行緒對於有IO等待的任務還是有用的,增加並行度。但是對於深度學習這種計算密集的,實際上超執行緒並不會有提升,因為超執行緒是共享的暫存器,計算密集型如果一個執行緒把cache佔滿了,那麼另外一個執行緒也是隻能等著。

上面關於向量的計算,左邊會比右面(numpy)會慢很多。實際上會有慢個幾百倍。

左邊每次計算一次都要呼叫一次資源,python資源調動的開銷還是挺大的,

但是這個加法運算是容易在Cpp中進行並行的。

CPU效能的提升就是一個保證cache的穩定性,還有一個就是儘量的利用多核。

上面一個方框可以認為是一個“大核”,其中的每個綠點可以看做是一個計算單元,在每個計算單元都可以開一個計算執行緒。也就是GPU是可以開出上千個執行緒。

就算GPU每個計算單元算的比CPU慢,但是人家數量多,總體的計算量還是遠高於CPU的。

計算的峰值很難達到很大程度與記憶體的頻寬有關,計算的再快,來不及讀取,其實也是白費的。

GPU通過多核和高速頻寬來實現高速的計算。

視訊記憶體都是高頻寬的記憶體,這個是很貴的。

GPU基本是沒有邏輯控制單元的,就是存在大量的計算核,所以GPU的控制流處理能力很差。

QA

  1. 如果要提高泛化性,就有可能要增加資料?那麼關於調參呢?

在其他條件都不變的情況下,增加資料確實是提高泛化性最直接的方法。當然資料的質量才是關鍵,如果找了一堆相似的圖片,那麼再多的圖片其實也是沒有效果的。

沐神建議是可以調參,但是不要過度調參,因為過度調參的話,可能只能fit到當前的資料。

  1. LLC是什麼?

last level cache,就是直接和記憶體交換的那一級的快取,基本的效能瓶頸也是在這裡。

  1. 研一剛進入科研,是一直看論文嗎?程式碼要怎麼練習才能復現論文?

首先80%的論文是不能復現的。

而且如果要復現一篇論文,你要理解論文中的每一句話,而且作者有把裡面的關鍵細節給寫出來。

但是很多時候你不用搞得那麼複雜,作者可能會放程式碼,別人可能也會復現程式碼,你可以去研究別人的程式碼。而且程式碼和論文多多少少有些不一樣,很多實現的技術細節是不一樣的。程式碼也要去看懂每一句話,然後去琢磨這個細節到底是幹嘛的,

網站:paper with code

  1. 分散式和高效能的差別是什麼?

分散式主要考慮的容災的問題,就是一臺伺服器掛了之後應該如何應對。

高效能一般不太會去考慮容災的問題,更加關注的效能的問題。

  1. resnet只能用在影象領域嗎?文字可以用嗎?

resnet不能用在文字上,但是我們後面將講如何使用卷積來處理文字。

  1. Xavier初始化和BN可以一起用麼?

是可以一起用的,只不過說的是BN不要和dropout一起使用。

  1. 看了很多目標檢測的paper,但是現在打比賽就是一些簡單整合,資料增強,感覺沒有什麼模型原創性,怎麼才能有更多的模型改造和優化能力?

打比賽可以打一打,但是不會學到太多東西...