入門
用戶指南
Horovod.Spark
管理指南
參考指南
資源
2022年8月26日更新
向我們發送反饋
HorovoDrunner是一般的APIHorovod框架。通過將Horovod與Spark的屏障模式,Databricks能夠為Spark上的長期深入學習培訓工作提供更高的穩定性。Horovodrunner采用了一種Python方法,其中包含帶有Horovod鉤的深度學習訓練代碼。Horovodrunner會在駕駛員上醃製該方法並將其分發以激發工人。使用屏障執行模式將HOROVOD MPI作業嵌入為火花作業。第一個執行人使用BarrierTaskContext並觸發使用的工作姆普倫。每個Python MPI進程都加載了醃製的用戶程序,對其進行挑選並運行它。
BarrierTaskContext
姆普倫
Horovodrunner讓您可以推出Horovod培訓工作作為Spark Jobs。HOROVODRUNNER API支持表中顯示的方法。有關詳細信息,請參閱HorovoDrunner API文檔。
方法和簽名
描述
在自身,NP)
創建一個horovodrunner的實例。
奔跑(自我,,主要的,**誇爾格斯)
運行horovod培訓工作主(** kwargs)。主函數和關鍵字參數是使用CloudPickle序列化並分布到集群工人的。
主(** kwargs)
使用HorovoDrunner製定分布式培訓計劃的一般方法是:
創建一個Horovodrunner實例用節點數量初始化。
Horovodrunner
根據描述的方法定義horovod訓練方法horovod用法,請確保在方法中添加任何導入語句。
將訓練方法傳遞給Horovodrunner實例。
例如:
人力資源=Horovodrunner((NP=2)防守火車():進口TensorFlow作為TFHVD。在裏麵()人力資源。跑((火車)
僅在駕駛員上運行horovodrunnern子處理,使用人力資源=horovodrunner(np = -n)。例如,如果驅動程序節點上有4個GPU,則可以選擇n取決於4。有關參數的詳細信息NP,請參閱HorovoDrunner API文檔。有關如何固定每個子過程的一個GPU的詳細信息,請參閱Horovod使用指南。
n
人力資源=horovodrunner(np = -n)
4
NP
一個常見的錯誤是無法找到或醃製張量對象。當庫導入語句未分發給其他執行者時,就會發生這種情況。為避免此問題,請包括所有導入語句(例如,進口TensorFlow作為TF)兩個都在Horovod訓練方法的頂部以及在Horovod培訓方法中所謂的其他用戶定義的功能中。
進口TensorFlow作為TF
Horovod能夠記錄其活動的時間表,稱為Horovod時間軸。
重要的
Horovod時間軸對性能有重大影響。啟用HOROVOD時間軸時,Inception3吞吐量可以減少約40%。為了加快HorovoDrunner的工作,請勿使用Horovod時間軸。
在進行培訓時,您無法查看HOROVOD時間表。
要記錄Horovod時間軸,請設置horovod_timeline環境變量可在要保存時間軸文件的位置。Databricks建議在共享存儲上使用一個位置,以便可以輕鬆檢索時間表文件。例如,您可以使用DBFS本地文件API如圖所示:
horovod_timeline
Timeline_dir=“/dbfs/ml/horovod-timeline/%s“%UUID。UUID4()操作係統。Makedirs((Timeline_dir)操作係統。環境[['Horovod_timeline'這是給予的=Timeline_dir+“/horovod_timeline.json”人力資源=Horovodrunner((NP=4)人力資源。跑((run_training_horovod,,,,參數=參數)
然後,將時間軸特定代碼添加到培訓功能的開始和結尾。以下筆記本包括示例代碼,您可以用作解決訓練進度的解決方法。
在新標簽中打開筆記本
要下載時間軸文件,請使用Databricks CLI或者文件,然後使用Chrome瀏覽器chrome://跟蹤查看它的設施。例如:
chrome://跟蹤
這些是將單節點深度學習代碼遷移到分布式培訓的一般步驟。這例子在本節中說明了這些步驟。
準備單個節點代碼:使用TensorFlow,Keras或Pytorch準備並測試單節點代碼。
遷移到Horovod:遵循說明horovod用法用horovod遷移代碼並在驅動程序上進行測試:
添加hvd.init()初始化Horovod。
hvd.init()
使用此過程使用的服務器GPU使用config.gpu_options.visible_device_list。通過每個過程的一個GPU的典型設置,可以將其設置為本地等級。在這種情況下,服務器上的第一個過程將分配第一個GPU,第二個進程將分配第二個GPU等。
config.gpu_options.visible_device_list
包括數據集的碎片。在運行分布式培訓時,該數據集操作員非常有用,因為它允許每個工人讀取唯一的子集。
按工人數量擴展學習率。同步分布式培訓中的有效批量大小由工人數量縮放。增加學習率可以補償增加的批量規模。
包裝優化器HVD.DistributedOptimizer。分布式優化器代表梯度計算到原始優化器,使用Allreduce或Allgather平均梯度,然後應用平均梯度。
HVD.DistributedOptimizer
添加hvd.BroadcastGlobalvariableshook(0)將初始變量狀態從等級0播放到所有其他過程。這是確保所有工人以隨機權重或從檢查點恢複的訓練時確保所有工人的一致初始化所必需的。或者,如果您不使用監測的交易,您可以執行hvd.broadcast_global_variables全局變量後的操作已初始化。
hvd.BroadcastGlobalvariableshook(0)
監測的交易
hvd.broadcast_global_variables
修改您的代碼以保存工作0上的檢查點,以防止其他工人破壞它們。
遷移到Horovodrunner:Horovodrunner通過調用Python功能來運行Horovod培訓工作。您必須將主要培訓程序包裝到單個Python功能中。然後,您可以在本地模式和分布式模式下測試HOROVODRUNNER。
筆記
本文包含對該術語的參考奴隸,該術語數據不使用。從軟件中刪除該術語後,我們將從本文中刪除它。
如果您升級或降級tensorflow,keras或pytorch,則必須重新安裝horovod,以便將其與新安裝的庫進行編譯。例如,如果要升級TensorFlow,Databricks建議使用來自TensorFlow安裝說明並將以下張量特定的HOROVOD安裝代碼附加到其末尾。看HOROVOD安裝說明使用不同的組合,例如升級或降級Pytorch和其他庫。
附加APT-REPOSITOR -YPA:UBUNTU-TOOLCHAIN-R/TEST APT UPDATE#使用構建TensorFlow編譯Horovod的相同編譯器APT安裝G ++ -7 -Y Update-Anternatives-安裝/usr/bin/bin/gcc gcc/usr/bin/bin/gcc-760- 奴隸/usr/bin/g ++ g ++/usr/bin/g ++ -7horovod_gpu_allreduce=NCCLhorovod_cuda_home=/usr/local/cuda pip安裝Horovod==0.18.1 - force-redinstall -no-deps -no-no-cache-dir
以下示例,基於mnist數據集,演示如何將單節點深度學習程序遷移到與HorovoDrunner分發深度學習。
如果支持Databricks存儲庫中的文件在工作區中啟用,然後,如果NP設置為大於1,筆記本電腦從存儲庫中的其他文件中導入。考慮使用Horovod.Spark代替Horovodrunner。