1. 程式人生 > >Caffe 多GPU訓練問題,以及batch_size 選擇的問題

Caffe 多GPU訓練問題,以及batch_size 選擇的問題

1. 多GPU訓練時,速度沒有變得更快。

使用多GPU訓練時,每個GPU都會執行一個 Caffe 模型的例項。比如當使用 n n 個GPU訓練時,網路會有 n n 個分身分別在各自的GPU上執行, n

n 個網路中有一個“本尊”叫root_net,root_net除了負責正常的前傳反傳還負責更新引數,而其它網路只負責前傳和反傳。大致流程是這樣的, n n 個網路共享一個數據層,資料層讀取 n
n
個batch的資料分別送給 n n 個網路進行前傳和反傳,然後使用歸約的方法將 n n 個網路計算的梯度累加在root_net上,取平均後由root_net更新網路引數,接著同步 n
n
個網路的引數,資料層再取 n n 個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的並行運算效率最高。

Reference