開始
加載和管理數據
處理數據
horovod.spark
政府
引用和資源
2023年8月04,更新
給我們反饋
學習如何使用HorovodRunner執行分布式訓練機器學習模型推出Horovod培訓工作引發工作數據磚。
HorovodRunner是一個通用API磚上運行分布式深度學習工作負載使用Horovod框架。通過整合Horovod火花障模式、磚能夠提供更高的穩定性對於長時間運行的深度學習培訓工作火花。HorovodRunner需要Python方法包含深度學習培訓與Horovod鉤子代碼。HorovodRunner泡菜司機和分配上的方法引發工人。Horovod MPI工作嵌入作為火花作業執行模式使用障礙。第一執行人收集所有任務執行人使用的IP地址BarrierTaskContext和觸發器Horovod工作使用mpirun。每個Python MPI進程加載醃用戶程序,反序列化,並運行它。
BarrierTaskContext
mpirun
HorovodRunner允許您啟動Horovod培訓工作引發的工作。HorovodRunner API支持表中所示的方法。詳情,請參閱HorovodRunner API文檔。
方法和簽名
描述
init(自我,np)
HorovodRunner創建一個實例。
運行(自我,主要的,* * kwargs)
運行一個調用Horovod培訓工作主要(* * kwargs)。主要功能和關鍵字參數序列化使用cloudpickle和集群分發給工人。
主要(* * kwargs)
一般的方法來開發一個分布式使用HorovodRunner培訓項目是:
創建一個HorovodRunner實例初始化節點的數量。
HorovodRunner
定義一個Horovod訓練方法中描述的方法Horovod用法,確保添加任何導入語句內的方法。
通過訓練方法HorovodRunner實例。
例如:
人力資源=HorovodRunner(np=2)def火車():進口tensorflow作為特遣部隊hvd。初始化()人力資源。運行(火車)
上運行HorovodRunner司機隻有n子流程,使用人力資源=HorovodRunner (np = - n)。例如,如果司機節點上有4個gpu,你可以選擇n到4。參數的詳細信息np,請參閱HorovodRunner API文檔。如何銷一個GPU /子流程,看到Horovod使用指南。
n
人力資源=HorovodRunner (np = - n)
4
np
一個常見的錯誤是不能被發現或醃TensorFlow對象。這發生在當庫導入語句不分發給其他執行者。為了避免這個問題,包括所有導入語句(例如,進口tensorflow作為特遣部隊)這兩個頂部的Horovod訓練方法,在其他任何用戶定義的函數稱為Horovod訓練方法。
進口tensorflow作為特遣部隊
Horovod有能力記錄其活動時間表,Horovod時間表。
重要的
Horovod時間表對性能有重大的影響。Inception3吞吐量可以減少~ 40%當啟用Horovod時間表。加快HorovodRunner工作,不要使用Horovod時間表。
你不能查看Horovod時間表而培訓正在進行中。
記錄Horovod時間表,設置HOROVOD_TIMELINE環境變量的位置你想保存時間軸文件。磚建議使用共享存儲,這樣時間軸上的一個位置文件很容易檢索。例如,您可以使用DBFS本地文件api如圖所示:
HOROVOD_TIMELINE
timeline_dir=“/ dbfs /毫升/ horovod-timeline /% s”%uuid。uuid4()操作係統。makedirs(timeline_dir)操作係統。環境(“HOROVOD_TIMELINE”]=timeline_dir+“/ horovod_timeline.json”人力資源=HorovodRunner(np=4)人力資源。運行(run_training_horovod,參數個數=參數個數)
然後,添加時間特定代碼的開始和結束培訓功能。下麵的例子筆記本包含示例代碼,您可以使用作為一個解決方案視圖培訓進展。
在新標簽頁打開筆記本
下載時間軸文件,使用磚CLI(遺留)或FileStore,然後使用Chrome瀏覽器的chrome: / /跟蹤設備查看它。例如:
chrome: / /跟蹤
這些都是一般的步驟在單節點深度學習代碼遷移到分布式訓練。的例子:遷移到分布式與HorovodRunner深度學習在這一節中說明這些步驟。
準備單獨的節點代碼:準備和測試單一節點代碼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到所有其他進程。這是必要的,以確保一致的初始化所有工人培訓開始時隨機權重或恢複檢查點。另外,如果你不使用MonitoredTrainingSession,您可以執行hvd.broadcast_global_variables全局變量被初始化後操作。
hvd.BroadcastGlobalVariablesHook (0)
MonitoredTrainingSession
hvd.broadcast_global_variables
修改你的代碼保存檢查站隻在工人0,以防止其他工人腐化他們。
遷移到HorovodRunner:HorovodRunner運行Horovod培訓工作通過調用Python函數。你必須包裝的主要訓練過程為一個Python函數。然後你就可以在本地測試HorovodRunner模式和分布式模式。
請注意
本文包含引用奴隸,磚不使用的一個術語。從軟件中刪除這個詞時,我們就將它從這篇文章。
如果你升級或降級TensorFlow、Keras或PyTorch,您必須重新安裝Horovod所以編譯新安裝的庫。舉個例子,如果你想升級TensorFlow,磚的建議使用init腳本TensorFlow安裝說明並附加以下TensorFlow特定Horovod安裝代碼結束它。看到Horovod安裝說明使用不同的組合,如升級或降級PyTorch和其他庫。
add-apt-repository - y ppa: ubuntu-toolchain-r /測試更新#使用相同的編譯器編譯Horovod TensorFlow建成apt安裝g++ 7 - y update-alternatives——安裝/usr/bin/gcc gcc /usr/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-reinstall no-deps——no-cache-dir
下麵的例子,基於MNIST數據集,演示如何將一個單節點深度學習項目遷移到分布式與HorovodRunner深度學習。
使用的工作區文件時,如果HorovodRunner不會工作np設置為大於1和筆記本從相關的進口文件。考慮使用horovod.spark而不是HorovodRunner。