Pytorch 分佈式訓練

 

torch.distributed 包支持

Pytorch 分佈式目前只支持 Linux

Pytorch 中通過 torch.distributed 包提供分佈式支持,包括 GPU 和 CPU 的分佈式訓練支持。。

在此之前,torch.nn.DataParallel 已經提供數據並行的支持,但是其不支持多機分佈式訓練,且底層實現相較於 distributed 的接口,有些許不足。

torch.distributed 的優勢如下:

  1. 每個進程對應一個獨立的訓練過程,且只對梯度等少量數據進行信息交換。

在每次迭代中,每個進程具有自己的 optimizer ,並獨立完成所有的優化步驟,進程內與一般的訓練無異。

在各進程梯度計算完成之後,各進程需要將梯度進行彙總平均,然後再由 rank=0 的進程,將其 broadcast 到所有進程。之後,各進程用該梯度來更新參數。

由於各進程中的模型,初始參數一致 (初始時刻進行一次 broadcast),而每次用於更新參數的梯度也一致,因此,各進程的模型參數始終保持一致。

而在 DataParallel 中,全程維護一個 optimizer,對各 GPU 上梯度進行求和,而在主 GPU進行參數更新,之後再將模型參數 broadcast 到其他 GPU

相較於 DataParalleltorch.distributed 傳輸的數據量更少,因此速度更快,效率更高。

  1. 每個進程包含獨立的解釋器和 GIL

由於每個進程擁有獨立的解釋器和 GIL,消除了來自單個 Python 進程中的多個執行線程,模型副本或 GPU 的額外解釋器開銷和 GIL-thrashing ,因此可以減少解釋器和 GIL 使用衝突。這對於嚴重依賴 Python runtime 的 models 而言,比如說包含 RNN 層或大量小組件的 models而言,這尤爲重要。

 

windows報錯:

module 'torch.distributed' has no attribute 'get_world_size'

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章