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,但是現在打比賽就是一些簡單集成,數據增強,感覺沒有什么模型原創性,怎么才能有更多的模型改造和優化能力?
打比賽可以打一打,但是不會學到太多東西...