Facebook教你如何用Large Minibatch一小時Train好ImageNet

FAIR(Facebook AI Research)對分散式SGD如何透過提高Minibatch Size從而縮短訓練時間進行了實證性研究。最終結果在ResNet-50上將Minibatch Size設定為8192,並利用256個GPU做分散式訓練,訓練時間成功從29小時縮短至1小時且維持相同的準確率。當然,並不是單純提高Minibatch Size就能輕鬆縮短訓練時間,而本篇的價值所在即是提供了許多經得起實證檢驗的加速技巧,接下來就為讀者做簡單介紹。

訓練大型的神經網路需要配合大規模的資料集,往往是相當耗時且必須採用Minibatch的方式進行訓練。從理論上我們可以推得一個Batch Size與Learning Rate之間的Linear Scaling Rule,也就是Batch Size調高k倍,Learning Rate亦可同步調高k倍,來達到相似的效率,而調大Minibatch Size對分散式訓練來說有助於減少同步化次數帶來的負擔。不過實務上這個法則並沒有如想像中容易應用,似乎也存在著擴張的極限。

這篇論文對Linear Scaling Rule進行了實證上的深入研究,也作了許多數學分析以確保一些訓練的細節。其中一個重點技巧即是Gradual Warmup(參考Fig.2),因為在初始階段網絡參數的變化性較大,使得較大的Batch Size容易失去近似性,所以建議初始階段的Learning Rate可以從一個較小的數值逐步調高至k倍。另外則是舉出了許多作分散式訓練時容易犯的錯,例如作Batch Normalization時應固定每個Worker的Sample Size以確保Loss Function不變、放大Learning Rate的效果不等於放大Loss、使用Momentum Correction等等。

而在系統設計上,除了提到計算部分使用的是Caffe2,硬體規格也有詳細的說明,例如使用32台Big Basin Server,每台安裝8張NVIDIA P100,以及50Gbit Ethernet Network等。(小編OS: 雖然看論文很有趣,但真不知道何時才有機會玩到這種等級的設備啊XD?)

從實驗結果來看(參考Fig.3),可以發現應用了論文提到的技巧,Minibatch Size達到8k(1k=1024)時Training Error仍能貼合Baseline,但再放大Size的話Error就開始飄高了。

更多細節可參考論文

Share the joy
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

近期文章

近期迴響

彙整

分類

其它

leoyang Written by:

Be First to Comment

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *