如果GPU運算是並行計算的話那麼按理來說 batchsize 的增大並不會每一步的計算時間。可是我實際運行tensorflow MNIST 數據集示例 修改batch_size 的結果卻是這樣的:

循環次數 batch_size 時間

2000 1 6.2032110691070563

2000 2 6.312160968780518

2000 3 6.461185932159424

2000 10 6.871996641159058

2000 20 7.6756696701049805

2000 30 8.525161266326904

2000 40 9.229804515838623

2000 50 10.038037300109863

2000 60 11.120123863220215

2000 100 14.59116268157959

2000 200 23.391196727752686

2000 500 47.28020977973938

求問原因


我認為所謂的GPU並行運算是針對一層卷積操作的。比如,現在有N個通道數為C的卷積核,那麼這N個卷積核之間是沒有依賴關係的,就可以同時計算出對應的N張特徵圖。而網路的前一層和後一層之間有依賴關係,前一層的輸出是後一層的輸入,所以應該不存在並行關係。這一點在Caffe框架下比較明顯。


batch_size增大就是計算量變大,就算是再並行運算,計算機的計算量也是有限的,超過計算機的並行計算量肯定增大開銷時間。再說了並行運算會有通訊的時間成本,這樣的話開銷時間也會變大。所以引起開銷時間變大的因素有很多!


樓主現在弄明白了嗎,我發現我驗證時候增大batchsize,總時間差別不大


stackoverflow 上的回答是GPU的並行是指每一個卷積層是並行的,而不是整個batch 裡面所有的數據都是一起處理的。 有大神回復一下 是這個樣子嗎?

Why training speed does not scale with the batch size??

stackoverflow.com圖標


問題太專業回答不了


推薦閱讀:
相关文章