Horovod?Tensor flow?Uber開源分散式深度學習模型
世界頂尖科技公司的工程師常常發現,為了滿足公司的獨特需求,他們不得不為現有軟體基礎上開發定製替代方案。
近日,Uber將自己的Horovod(一個跨多台機器的分散式深度學習訓練框架)引入開源項目LF深度學習基金會。Uber利用Horovod支持自動駕駛汽車、欺詐檢測和出行預測,該項目的貢獻者包括Amazon、IBM、Intel和Nvidia。
Horovod是一個分散式的TensorFlow訓練框架,目標是使分散式深度學習快速且易於使用。在Uber內部,他們發現MPI模型比帶參數伺服器的分散式TensorFlow簡單得多,所需的代碼更改也少得多。
除了Uber,阿里巴巴、亞馬遜和Nvidia也在使用Horovod。Horovod項目可以與TensorFlow、Keras和PyTorch等流行框架一起使用。
Uber上個月加入了Linux基金會,並加入了AT&T和諾基亞等其他科技公司的行列,支持LF深度學習基金會的開源項目。LF深度學習基金會成立於3月,旨在支持針對深度學習和機器學習的開源項目,是Linux基金會的一部分。
自該基金會成立以來,其他項目還包括機器學習平台Angel和彈性深度學習(Elastic Deep learning),這是一個幫助雲服務提供商利用TensorFlow等框架製作雲集群服務的項目。
根據Uber的說法,Horovod讓開發人員只需幾行代碼就可以完成任務。這不僅加快了初始修改過程,而且進一步簡化了調試。考慮到深度學習項目的高度迭代性,這同樣可以節省大量時間。
在過去的幾年裡,深度學習的進步推動了圖像處理、語音識別和預測的巨大進步。在Uber,深度學習應用於整個業務,從自動駕駛研究到出行預測和欺詐預防,並為用戶創造更好的體驗。
由於種種原因,TensorFlow已經成為Uber首選的深度學習庫。首先,該框架是用於深度學習的最廣泛使用的開源框架之一,這使得新用戶很容易上手。
它還結合了高性能和修補低級模型細節的能力——例如,可以同時使用高級api,如Keras,並使用NVIDIA的CUDA工具包實現自己的自定義操作符。
此外,TensorFlow還支持各種深度學慣用例的端到端支持,從進行探索性研究到將模型部署到雲伺服器、移動應用程序甚至自動駕駛汽車上。
去年,Uber Engineering推出了米開朗基羅(Michelangelo),這是一個內部的「mvc即服務」(mvc -as-a-service)平台,它讓機器學習自主化,讓大規模構建和部署這些系統變得容易。
Horovod正是這個米開朗基羅複雜平台的組成部分,Uber開發這個平台是為了為其內部的深度學習努力奠定基礎。該公司將該軟體描述為管理AI開發生命周期各個方面的端到端系統。
鑒於Uber此次宣布開放Horovod,它可能還會隨著時間的推移發布米開朗基羅其他組件的代碼。
Horovod的出現,也反應不同企業在縱深涉及深度學習時遇到了不少問題。
隨著Uber使用越來越多的機器學習模型,它們的規模和數據消耗顯著增長。在大多數情況下,模型仍然足夠小,可以容納一個伺服器中的一個或多個GPU,但是隨著數據集的增長,訓練時間也在增加,有時需要一周甚至更長時間。
第二個問題是關於Uber規模計算的挑戰。在運行了一些基準測試之後,他們發現不能使標準的分散式TensorFlow按比例擴展,以及需要的服務。例如,在128個GPU上進行訓練時,由於效率低下,損失了大約一半的資源。
當Uber在128個NVIDIA Pascal GPU上運行標準的TensorFlow基準測試套件時,他們發現Inception V3和ResNet-101模型都無法利用將近一半的GPU資源。
標準的分散式TensorFlow包使用參數伺服器方法來平均梯度。在這種方法中,每個流程都有兩個潛在角色之一:Worker或參數伺服器。Worker用於處理訓練數據,計算梯度,並將它們發送到參數伺服器進行平均。
Uber認為,雖然這種方法提高了性能,但遇到了兩個挑戰:確定Worker與參數伺服器的正確比例。
如果使用一個參數伺服器,它可能會成為網路或計算瓶頸。如果使用多個參數伺服器,通信模式將變成「all-to-all」,這可能會使網路互連飽和。
處理增加TensorFlow程序複雜性:在測試中,每個用戶的分散式TensorFlow必須顯式啟動每個Worker和參數伺服器,通過服務發現周圍信息,如所有的Worker和參數伺服器的主機和埠,並修改培訓計劃構建tf.Server()和一個適當的tf.ClusterSpec()。
2017年初,百度發表了一篇文章《將HPC技術深度學習》,涉及到不同的演算法平均梯度和溝通這些梯度(上面的第2步和第3步),該演算法基於Patarasuk和Yuan在2009年的論文《工作站集群帶寬最優全約演算法》中引入的方法。
在環約簡演算法中,每個N個節點與兩個節點通信2*(N-1)次。在此通信過程中,節點發送和接收數據緩衝區的塊。在前N-1次迭代中,接收到的值被添加到節點緩衝區的值中。在第二次N-1迭代中,接收到的值替換節點緩衝區中保存的值。
百度的論文認為,該演算法是帶寬最優的,這意味著如果緩衝區足夠大,它將最優地利用可用網路。
Uber也意識到,採用環減少(ring-allreduce)方法可以提高可用性和性能,這促使我們自己開發實現,以滿足Uber的TensorFlow需求。隨後,Uber採用了百度的TensorFlow ring-allreduce演算法,並在此基礎上進行了構建。
Uber將代碼轉換為一個名為Horovod的獨立Python包,這個包是以俄羅斯傳統的民間舞蹈命名的,在這種舞蹈中,表演者挽著手臂繞圈跳舞,就像分散式TensorFlow進程使用Horovod彼此通信一樣。
Uber目前的不同團隊都可能使用不同版本的TensorFlow,但他們希望所有團隊都能夠利用ring-allreduce演算法,而不需要升級到TensorFlow的最新版本,對自己的版本應用補丁,甚至不需要花時間構建框架。
有了一個獨立的包,Uber表示就可以根據硬體的不同,將安裝Horovod所需的時間從大約1小時縮短到幾分鐘。Horovod在Inception V3和ResNet-101中都達到了90%的縮放效率,在VGG-16中達到了79%的縮放效率。
此外,Uber用NCCL替換了百度ring-allreduce實現,NCCL是NVIDIA的集合通信庫,它提供了高度優化的ring-allreduce版本。NCCL 2引入了跨多台機器運行ring-allreduce的能力,能夠利用它的許多性能提升優化。
Uber還在此基礎上增加了對適合單個伺服器模型的支持,可能是在多個GPU上,而原來的版本只支持適合單個GPU的模型。
Horovod項目負責人亞歷克斯?瑟蓋夫(Alex Sergeev)表示,Horovod是為了讓各行各業的人工智慧研究人員能夠更快、更直觀地進行深度學習模型訓練。後續隨著Horovod在功能和應用方面的不斷成熟,加入LF將使我們能夠進一步擴大它在開源生態系統中的影響。
活動預告
TAG:高工智能 |