大資料文摘出品
編譯:林安安、蔣寶尚
74.7秒!
根據日本富士通實驗室最新研究。他們應用了一種優化方法,在ABCI 叢集上,實作了74.7秒的訓練時間。訓練吞吐量為173萬圖像/秒,top-1驗證準确率為75.08%。
當然,如此快的速度也依賴于巨量的算力——使用了2,048個GPU。
目前此論文已經放在了arxiv上面供大家免費下載下傳。
論文下載下傳位址:
https://arxiv.org/abs/1903.12650
論文中提到,深度學習在過去的兩年内迅速發展,發展速度加快了三十倍,人們對于能夠高效執行機器學習的算法的需求越來越大。使用大規模mini batch的分布式深度學習是解決這個需求的關鍵技術,但很難準确地在大型叢集上實作很高的可擴充性。
在大型資料集上訓練的深度神經網絡(DNN)模型在各領域(如物體檢測,語言翻譯等)都取得了令人矚目的成果。然而,随着DNN模型和資料集的增多,DNN訓練的計算成本也增加了。
衆所周知,具有資料并行性的分布式深度學習能快速進行群集訓練。此方法中,在群集上進行的所有程序都具有相同的DNN模型和權重。每個程序使用不同的mini batch訓練模型,但是所有程序的權重梯度通過組合來更新。
這種通信開銷(communication overhead)成為大型叢集的重要問題。為了減少大型叢集的開銷,研究團隊增加了DNN的mini batch并且同時進行DNN訓練。然而,使用大型mini-batch訓練通常會導緻DNN模型的驗證準确性更差。是以,他們使用幾種方法來增加mini-batch的大小,這代表在疊代中計算的輸入圖像的數量,而且不會影響驗證準确性。
關于使用的計算資源,他們在ABCI 叢集和優化的MXNet深度學習架構上使用2,048個GPU。在ImageNet上使用81,920 mini-batch,74.7秒内就訓練好 ResNet-50,達到了75.08%驗證準确度。
具體方法
根據論文介紹,具體的研究方法分為3個部分,準确率提升、架構優化以及通信優化(Communication Optimizations)
關于準确率提升,其使用了通常用于深度學習優化的随機梯度下降(SGD)。當使用 large mini-batch 訓練時,SGD 更新數量會随着小批量的增加而減少。是以,提高 large mini-batch 上最終驗證準确率是一個很大的挑戰,他們采用了學習速率控制:由于更新次數少,需要使用較高的學習速度來加速訓練。然而,高的學習率使模型的訓練在早期階段變得不穩定。是以,我們通過使用熱身(warmup)來穩定SGD,進而逐漸提高學習率。此外,對于某些層次來說,所有層的學習速度都太高,使用分層自适應率來穩定訓練。
ImageNet 上 ResNet-50 的訓練時間和 top-1 驗證準确率。
關于架構。其使用了MXNet,這是一個用C ++和CUDA C語言編寫的開源深度學習架構。MXNet具有靈活性和可擴充性,可以在叢集上高效地訓練模型。然而,在中小型叢集環境中隻占總時間的一小部分的處理可能成為大規模叢集環境中的瓶頸。他們分析了CPU和GPU的性能,并找出了瓶頸。 優化了瓶頸,提高訓練吞吐量如下。采用的方法包括:并行DNN模型初始化( Parallel DNN model initialization)、在GPU上的批量規範計算(Batched norm computations on the GPU)
分布式并行深度學習需要所有減少通信以在所有程序之間交換每層的梯度,由于每個GPU的batch規模小,是以通信時間變長,而計算時間變短,是以減少通信開銷在大型叢集環境中是不可忽略的。 為了克服這些問題,他們采用的方法包括:調節通信的資料大小(Adjusting data size of communication),即研究人員收集了各層的梯度,然後将 allreduce 的資料大小調整為幾兆位元組;最佳的通信排程(Optimal scheduling of communications)即預先以統計的方式将所有層分為好幾組。一旦每個程序完成一組中所有層的反向處理,就計劃開始 allreduce 操作。
最後,訓練準确度以及驗證準确度結果如下?