研究了半天分佈式,簡要總結出來分享一下,具體細節請看下面的參考資料。主要的參考資料是:node
楊旭東:一文說清楚Tensorflow分佈式訓練必備知識
zhuanlan.zhihu.com
1. 分佈式訓練策略
- 模型並行:用於模型過大的狀況,須要把模型的不一樣層放在不一樣節點orGPU上,計算效率不高,不經常使用。
- 數據並行:把數據分紅多份,每份數據單獨進行前向計算和梯度更新,效率高,較經常使用。
2. 分佈式並行模式
- 同步訓練:全部進程前向完成後統一計算梯度,統一反向更新。
- 異步訓練:每一個進程計算本身的梯度,並拷貝主節點的參數進行更新,容易形成錯亂,陷入次優解。
3. 分佈式訓練架構
- Parameter Server:集羣中有一個parameter server和多個worker,server須要等待全部節點計算完畢統一計算梯度,在server上更新參數,以後把新的參數廣播給worker。
- Ring AllReduce:只有worker,全部worker造成一個閉環,接受上家的梯度,再把累加好的梯度傳給下家,最終計算完成後更新整個環上worker的梯度(這樣全部worker上的梯度就相等了),而後求梯度反向傳播。比PS架構要高效。
4. Tensorflow分佈式框架
- Horovod
- TF>=1.11中官方提供了AllReduce策略,支持Estimator API
5. Pytorch分佈式框架
- NVIDIA/apex
- Pytorch中官方提供了DistributedDataParallel