Pytorch多GPU並行處理


  • 可以參數2017coco detection 曠視冠軍MegDet: MegDet 與 Synchronized BatchNorm
  • PyTorch-Encoding官方文檔對CGBN(cross gpu bn)實現
  •  GPU捉襟見肘還想訓練大批量模型?
    • 在一個或多個 GPU 上訓練大批量模型: 梯度累積
    • 充分利用多 GPU 機器:torch.nn.DataParallel
    • 多 GPU 機器上的均衡負載 : PyTorch-Encoding 的 PyTorch 包,包括兩個模塊:DataParallelModel 和 DataParallelCriterion
    • 分布式訓練:在多台機器上訓練: PyTorch 的 DistributedDataParallel
  • Pytorch 的多 GPU 處理接口是 torch.nn.DataParallel(module, device_ids),其中 module 參數是所要執行的模型,而 device_ids 則是指定並行的 GPU id 列表。
  • 而其並行處理機制是,首先將模型加載到主 GPU 上,然后再將模型復制到各個指定的從 GPU 中,然后將輸入數據按 batch 維度進行划分,具體來說就是每個 GPU 分配到的數據 batch 數量是總輸入數據的 batch 除以指定 GPU 個數。每個 GPU 將針對各自的輸入數據獨立進行 forward 計算,最后將各個 GPU 的 loss 進行求和,再用反向傳播更新單個 GPU 上的模型參數,再將更新后的模型參數復制到剩余指定的 GPU 中,這樣就完成了一次迭代計算。所以該接口還要求輸入數據的 batch 數量要不小於所指定的 GPU 數量。
 

這里有兩點需要注意:

  1. 主 GPU 默認情況下是 0 號 GPU,也可以通過 torch.cuda.set_device(id) 來手動更改默認 GPU。
  2. 提供的多 GPU 並行列表中需要包含有主 GPU

但是,DataParallel 有一個問題:GPU 使用不均衡。在一些設置下,GPU-1 會比其他 GPU 使用率高得多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM