One weird trick for parallelizing convolutional neural networks 讀筆記

One weird trick for parallelizing convolutional neural networks,alex的一篇新作品。


首先:文中正式提到,卷積層參數佔了5%,但是計算時間佔據了90%-95%;而全連接層,參數佔據了95%,計算時間卻只有5%-10%,這個其實是和我在跑別的模型時的時間是一致的,組裏同事一直說是全連接層計算時間長,後來看到caffe裏有人提到要把fft代替卷積加速計算實現了,就覺得肯定是卷積層計算時間長,只是一直沒找到時間去打log測試具體數據。


如題,主要是並行CNN,多個GPU之間的並行處理。

並行分爲兩種,數據並行和模型並行。

模型並行,處理同樣的數據,將模型分爲幾個部分。imagenet2012 alex的雙GPU算是模型並行吧。

數據並行,是指同樣規模的模型,訓練不同的數據。

從並行角度來看,卷積適合數據並行,而全連接適合模型並行。

這個也就是我們最近看了很多文章的一箇中心,就是卷積層將圖像的空間特性保留的比較好,而全連接層就不具有這個特徵。正是因爲這個特點,卷積層將數據並行處理,纔會對整體效果影響較小吧。而全連接層,其實就是分類器,出來的是相對較高層抽象的特徵,並不具備了空間特性。因此,這一層如果是模型並行會效果更好。

文章中,正是使用的這種特性,在卷積層上利用了數據並行,而全連接層是模型並行。

具體在並行過程中,怎麼進行呢?

作者分爲兩部分進行介紹,首先是forward propagation,這一過程的並行,尤其是到了卷積層的並行可以有多種方式:

1. 所有層的參數共享後,進行計算forward 再計算backward。

2. 只有一層將參數發給別的所有workers,然後計算forward,計算相應batch(128)的backward;同樣,另外一個batch的worker,將數據分發爲其它所有workers,計算forward,然後再是backward,更新了另外一個batch的workers。

3. 每次只將128/K個的參數傳給別的所有workers,然後和2中一樣計算forward和backward,分別更新每一個worker。


分析一下,第一種方式,需要等待所有的workers,這樣將很佔存儲。。。。

第二種方式,第二種相對有效。

第三種,在不同worker之間均有通信。

而在backward階段,類似分析(待續)



權重同步

基本上的思路就是,每一個worker更新了1/k的梯度矩陣。

batch size

128K,卷積層相當於batch=128K,而全連接層是128。

實現階段(待續):

重點介紹了權重更新的過程,趕快找時間看看原始的2012的文章,然後再回頭看這一部分,期待我們同事能先講解。




發佈了415 篇原創文章 · 獲贊 26 · 訪問量 86萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章