Caffe 多GPU訓練問題,以及batch_size 選擇的問題
阿新 • • 發佈:2018-11-16
1. 多GPU訓練時,速度沒有變得更快。
使用多GPU訓練時,每個GPU都會執行一個 Caffe 模型的例項。比如當使用 個GPU訓練時,網路會有 個分身分別在各自的GPU上執行, 個網路中有一個“本尊”叫root_net,root_net除了負責正常的前傳反傳還負責更新引數,而其它網路只負責前傳和反傳。大致流程是這樣的, 個網路共享一個數據層,資料層讀取 個batch的資料分別送給 個網路進行前傳和反傳,然後使用歸約的方法將 個網路計算的梯度累加在root_net上,取平均後由root_net更新網路引數,接著同步 個網路的引數,資料層再取 個batch的資料進行下一次迭代。在多個GPU之間實現歸約和同步會很耗時,尤其是當兩個GPU不在一個multiGpuBoardGroup上的情況,所以整體的時間並沒有減少太多。
2. Batch_size 選擇的問題
這裡的意思就是batchsize和學習率是相關的,如果batchsize減小了X倍,則理論上學習率應增大sqrt(X)倍(當然這是找到最好的batchsize的情況下的),不過Alex還是用了X倍。後面 https://arxiv.org/abs/1404.5997 這個連結的論文還沒看,有時間的可以看一下,好像有專門講到batchsize的設定的。
另外,batchsize最好設定為8的倍數,這樣gpu的並行運算效率最高。