batchsize大小對訓練速度的影響
阿新 • • 發佈:2020-10-09
1.batchsize越大 是不是訓練越快?
GPU :一塊2080Ti
平臺:pytorch cuda
圖片數量:2700
batchsize | 一個圖片處理時間 | GPU記憶體佔用 | GPU算力使用 | 一個epoch 所用時間 |
---|---|---|---|---|
1 | 0.117s | 2.5G | 20% | 2700 * 0.0117 = 318s |
5 | 0.516s | 8G | 90% | 2700 * 0.516/5 = 279s |
batchsize大了之後,佔用的資源多了,算力多了,但是速度沒有提升,這樣是不是太坑了。
我們其實可以把 batchsize設定小點,然後把剩餘的記憶體跑其他實驗,而且再在同一張卡上跑一個新的實驗,對之前的速度也沒有影響。
結論:
1.本人實驗 batchsize越大,訓練速度提升不大
2.bachsize小點,多跑幾個實驗真香
完成每個epoch運算的所需的全部時間主要卡在:
- load資料的時間,
- 每個epoch的iter數量。
- 因此對於每個epoch,不管是純計算時間還是全部時間,大體上還是大batch能夠更節約時間一點,但隨著batch增大,iter次數減小,完成每個epoch的時間更取決於載入資料所需的時間,此時也不見得大batch能帶來多少的速度增益了。
2.batchsize大了,是不是結果會變好?
收集資料發現,確實是這樣的,但是也不能太大了
- Batch_Size 太小,演算法在 200 epoches 內不收斂。
- 隨著 Batch_Size 增大,處理相同資料量的速度越快。
- 隨著 Batch_Size 增大,達到相同精度所需要的 epoch 數量越來越多。
- 由於上述兩種因素的矛盾, Batch_Size增大到某個時候,達到時間上的最優。
- 由於最終收斂精度會陷入不同的區域性極值,因此 Batch_Size增大到某些時候,達到最終收斂精度上的最優。