- 可以參數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 數量。

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

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