論文:https://arxiv.org/pdf/1810.11787.pdf
譯文:深度神經網絡分布式訓練指引
摘要
深度學習讓人工智能領域取得了很大的進步。但是訓練這些深度學習模型需要大量的計算。單機單卡訓練ImageNet需要一周。多機分布式訓練可以極大地減少訓練時間。最近,有2048個GPU的一個集群,把訓練ImageNet的時間減少到4min。本文調研分布式訓練的各種算法和技術,並且提出一個效果最好的分布式訓練框架。我們探究同步和異步隨機梯度下降、All Reduce 梯度聚合策略、在集群內進行混合精度訓練以獲得高吞吐低延遲的最佳實踐、大批量訓練以及梯度壓縮。
介紹
1、背景和動機:
數據正在以史無前例的規模產生,這些數據需要被有效分析以獲得有意義的信息。深度學習作為強有力的分析工具,在視覺、語言和智能推理等復雜任務上表現都很好。然而,這些算法需要花很長的時間來訓練大量的數據,才能得到有效的結果。最初,結果最好是單機單卡訓練ImageNet分類模型花了一周,但是現在的數據規模遠比ImageNet大。我們需要線性擴展(linear scale)訓練速度,同時保留訓練結果的精度、容錯以及在高延遲的網絡中收斂。
2、分布式訓練概覽:
分布式訓練可以分為兩種,數據並行和模型並行。
數據並行把數據集平分到各個節點,每個節點都有一份完整的模型以及本地權值子集,每個節點訓練數據集子集,並且更新本地權值子集。這些本地權值在集群節點間共享,並通過積累算法,計算得到全局權值。然后全局權值被分發回各個節點,繼續下一個batch的訓練。(注:BytePS中,每個worker節點都有所有權值,更新權值的主要工作由server節點負責)
模型並行把模型結構分割到不同節點。AlexNet把結構划分到2個GPU,以滿足GPU顯存要求。模型並行應用於,1)模型太大;2)模型結構可以並行。目標檢測網絡有隔離的邊界和互相獨立的類預測頭(這個之后深入看看)。
分布式訓練框架的組成
1、分布式訓練算法:
節點間通信:
分布式訓練另一個重要部分就是節點間的數據通信。
梯度積累
梯度積累算法在分布式訓練系統中扮演着重要角色。這些算法負責收集每個worker節點的本地梯度,再把更新之后全局梯度分發回各個worker節點。
低精度訓練
基於ImageNet訓練Resnet,目前最快4min。
算術精度:
梯度和參數壓縮
結論
我們調研和總結了分布式訓練框架的多種組成部分,以及推薦如下技術來構建一個高效、可擴展的分布式訓練框架:
1、使用同步SGD,保證嚴格收斂。
2、All Reduce過程中的梯度積累應該用binary blocks算法,因為它的運行時間很優越。
3、為了高效利用硬件和網絡帶寬,梯度壓縮、量化和混合精度訓練等等技術都應該用上。
4、batch_size應該盡可能大(BytePS實踐中,通常用滿GPU顯存),以獲得最好的並行效果,以及最小化訓練時間。推薦LARS算法,batch_size可以到64k。(注:這里64k具體怎么運作的?不會把顯存撐爆嗎?)
我們還提出了一個容錯的All Reduce算法,可以在不全部重啟的情況下工作。最后,我們提及分布式訓練未來的一些方向和啟示。