動手學深度學習 | 深度學習硬體: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
- 如果要提高泛化性,就有可能要增加資料?那麼關於調參呢?
在其他條件都不變的情況下,增加資料確實是提高泛化性最直接的方法。當然資料的質量才是關鍵,如果找了一堆相似的圖片,那麼再多的圖片其實也是沒有效果的。
沐神建議是可以調參,但是不要過度調參,因為過度調參的話,可能只能fit到當前的資料。
- LLC是什麼?
last level cache,就是直接和記憶體交換的那一級的快取,基本的效能瓶頸也是在這裡。
- 研一剛進入科研,是一直看論文嗎?程式碼要怎麼練習才能復現論文?
首先80%的論文是不能復現的。
但是很多時候你不用搞得那麼複雜,作者可能會放程式碼,別人可能也會復現程式碼,你可以去研究別人的程式碼。而且程式碼和論文多多少少有些不一樣,很多實現的技術細節是不一樣的。程式碼也要去看懂每一句話,然後去琢磨這個細節到底是幹嘛的,
網站:paper with code
- 分散式和高效能的差別是什麼?
分散式主要考慮的容災的問題,就是一臺伺服器掛了之後應該如何應對。
高效能一般不太會去考慮容災的問題,更加關注的效能的問題。
- resnet只能用在影象領域嗎?文字可以用嗎?
resnet不能用在文字上,但是我們後面將講如何使用卷積來處理文字。
- Xavier初始化和BN可以一起用麼?
是可以一起用的,只不過說的是BN不要和dropout一起使用。
- 看了很多目標檢測的paper,但是現在打比賽就是一些簡單整合,資料增強,感覺沒有什麼模型原創性,怎麼才能有更多的模型改造和優化能力?
打比賽可以打一打,但是不會學到太多東西...