論文:https://arxiv.org/pdf/1811.05233.pdf
譯文:大規模分布式SGD:瞬間訓練完基於ImageNet的ResNet50
摘要
由於大mini-batch訓練的不穩定性(為什么不穩定?),和梯度同步的開銷,深度學習分布式訓練很難線性擴展到擁有大量GPU的集群。我們通過控制batch_size和label smoothing(這是什么意思?),來解決不穩定性。通過2D-Torus all reduce 算法來解決梯度同步的開銷。2D-Torus all reduce 算法把GPU按照2D網格的方式組織,並且從不同方向執行通信操作。這兩種技術在NNL中實現了,我們在ABCI集群中,用122秒訓練完了基於ImageNet的ResNet50。
介紹
隨着數據集和DNN模型的size越來越大,訓練模型所需的時間也越來越長。基於數據並行的大規模分布式深度學習是一種減少訓練時間的有效手段。但是,大規模分布式訓練有兩個技術難題。1)大mini-batch訓練會導致准確率下降。2)GPU間梯度同步的通信開銷。需要一種新方法來解決這兩個難題。
在過去的幾年,提出了很多技術來解決這兩個難題。這些工作利用基於ImageNet的ResNet50來衡量訓練效果。基於ImageNet的ResNet50是衡量大規模分布式深度學習的最受歡迎的數據集和模型之一。表1展示了最近工作的訓練時間和准確率。
大mini-batch的不穩定性,和梯度同步代價,是我們想要解決的核心問題。我們用3456個Tesla V100 GPU,122秒訓練完,並且准確率75.29%。我們還想在不損失准確率的情況下,提高GPU擴展效率。1024個Tesla V100 GPU的擴展效率是84.75%(意思是假設一個GPU的利用率是100%,那么1024個GPU的利用率就是84.75%)。(見表2)
方法
眾所周知,大mini-batch訓練不穩定,而且會產生泛化差距(generalization gap)(這是什么意思?),mini-batch=32K時,不穩定性得到緩解。還有mini-batch=64K。
基於數據並行的分布式訓練,需要在GPU之間同步並平均梯度,再開始下一個迭代。這通過all reduce操作來實現。在大規模GPU集群,all reduce操作的開銷導致很難達到線性擴展。
1、大mini-batch訓練技術:
1)控制batch_size,逐步增大mini-batch,可以減少不穩定性。直觀來說,增大batch_size,損失的走勢更加平坦,有利於避免局部最小值。本文,我們實驗batch_size控制,來減少准確率損失,batch_size超過32K。訓練過程采用了batch_size自適應。
2)label smoothing,正規化可以提高泛化能力。我們實驗label smoothing來減少准確率損失,batch_size超過32K。label smoothing降低了true標簽的概率,同時提高了false標簽的概率,以避免過擬合。
2、2D-Torus all reduce:
一種高效的通信拓撲,對降低通信開銷極其重要。前人提出的通信拓撲包括ring all reduce和分級ring all reduce。
在特別大的GPU集群中,ring all reduce算法沒法完全利用網絡帶寬。通信開銷跟GPU個數成正比,因為網絡延遲。(ring all reduce算法中,通信時間跟GPU個數無關才對?)
我們用2D-Torus all reduce來解決這個問題,拓撲結構如圖1。GPU按2D網格組織。在2D-Torus中,all reduce分3步:reduce scatter、all reduce和all gather,如圖2。1)水平執行reduce scatter;2)豎直執行all reduce;3)水平執行all gather。2D-Torus all reduce的通信開銷比ring all reduce小
注:有關batch_size對訓練的影響,眾說紛紜。
參考鏈接
https://openreview.net/pdf?id=H1oyRlYgg