DataParallel 和 DistributedDataParallel 的区别和使用方法
1.DataParallel
DataParallel更易于使用(只需簡單包裝單GPU模型)。
model = nn.DataParallel(model)它使用一個進程來計算模型參數,然后在每個批處理期間將分發到每個GPU,然后每個GPU計算各自的梯度,然后匯總到GPU0中進行求平均,然后由GPU0進行反向傳播更新參數,然后再把模型的參數由GPU0傳播給其他的GPU。
特點:
(1)broadcast 的是模型的參數,因此速度慢,效率低
(2)操作簡單
因此通信很快成為一個瓶頸,GPU利用率通常很低。nn.DataParallel要求所有的GPU都在同一個節點上(不支持分布式),而且不能使用Apex進行混合精度訓練。
https://zhuanlan.zhihu.com/p/113694038
1.DistributedDataParallel支持模型并行,而DataParallel并不支持,這意味如果模型太大單卡顯存不足時只能使用前者;
2.DataParallel是單進程多線程的,只用于單機情況,而DistributedDataParallel是多進程的,適用于單機和多機情況,真正實現分布式訓練;
3.DistributedDataParallel的訓練更高效,因為每個進程都是獨立的Python解釋器,避免GIL問題,而且通信成本低其訓練速度更快,基本上DataParallel已經被棄用;
4.必須要說明的是DistributedDataParallel中每個進程都有獨立的優化器,執行自己的更新過程,但是梯度通過通信傳遞到每個進程,所有執行的內容是相同的;
2. DistributedDataParallel
https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html#torch.nn.parallel.DistributedDataParallel
官網鏈接
注意:在 DataParallel 中,batch size 設置必須為單卡的 n 倍,但是在 DistributedDataParallel 內,batch size 設置于單卡一樣即可
比DataParallel,DistributedDataParallel訓練時間縮減了好幾倍。
一定要用DistributedDataParallel
https://zhuanlan.zhihu.com/p/97115875
pytorch(分布式)數據并行個人實踐總結
坑:
(1)DistributedDataParallel 內,batch size 設置于單卡一樣即可
總結
以上是生活随笔為你收集整理的DataParallel 和 DistributedDataParallel 的区别和使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么使用虚拟光驱加载 虚拟光驱加载教程
- 下一篇: win10怎么不用u盘重装win7系统