為什麼batch_size 增大會增加每一步的運算時間?
如果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問題太專業回答不了
推薦閱讀: