基於horovod實現Pytorch多機分布式訓練

2021-10-06 07:46:13 字數 2004 閱讀 4721

由uber公司的開發的horovod架構,是乙個整合了多個深度學習的統一平台,提供分布式訓練效率的同事,讓深度學習分布式訓練變得更方便。

在深度學習領域中,當計算資料較多或者模型較大時,為提高模型訓練效率,一般採用多gpu的分布式訓練,常見的深度學習框架都支援分布式訓練,雖然這些框架都各自有分布式實現,但不能統一到乙個平台上,造成使用上體驗不好,由uber公司的開發的horovod架構,它是乙個整合了多個深度學習的統一平台,提供分布式訓練同時則讓深度學習分布式訓練變得更方便。本文主要對horovod的工作原理進行簡單介紹,然後給出ti上包含映象製作以及ti平台的使用。

uber公司開發的horovod架構是利用nvidia的nccl2作為底層的通訊基礎,實現了單機多卡,多機多卡分布式訓練高效的線性加速。為了更好描述nccl2的通訊原理,下面通過兩幅圖進行表述:圖1是單機多卡的通訊原理(gpu direct p2p),圖2是多機多卡的通訊原理(gpu direct rdma)。從圖中可以看到,無論單機的gpu通訊還是多機的gpu通訊,只需要保證gpu在相同pci-e匯流排下,即可實現gpu對其他gpu memory的訪問,最終達到高頻寬、低延遲和低資源利用率的效果。這點對於深度學習的模型訓練而言,通過利用gpu間高頻寬完成梯度更新 + 引數更新,可明顯的提高整個訓練速度。

圖1:單機多卡gpu direct p2p

圖2表明跨機的通訊,需要網路裝置的支援(即網路裝置和gpu掛載相同的pci-e匯流排下),通訊的技術為rdma,目前rdma的實現方式主要分為infiniband和ethernet兩種傳輸網路。

官方提供的ubuntu16.04製作有點問題,首先是gcc版本太高編譯通不過,需要降級gcc g++到4.9版本,還是躺了不少坑的。

from nvidia/cuda:9.0-devel-ubuntu16.04

env tensorflow_version=1.12.0

env pytorch_version=1.3.0

env torchvision_version=0.4.1

env cudnn_version=7.4.1.5-1+cuda9.0

env nccl_version=2.3.7-1+cuda9.0

env mxnet_version=1.4.1

env python_version=3.5

如下修改:

# downgrade gcc g++ ,becase tensorflow incompatable

run apt-get install -y gcc-4.9 && apt-get install -y g++-4.9 && \

cd /usr/bin && \

rm gcc && \

ln -s gcc-4.9 gcc && \

rm g++ && \

ln -s g++-4.9 g++ && \

gcc --version

另外映象處理了ssh生成秘鑰操作:

run ssh-keygen -t rsa && \

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

詳情可以檢視附件dockerfile檔案。

測試資料集: pytorch mnist 60000 samples (batch size=100)

文章簡單說明了horovod映象製作,簡單的對比了效能

基於註解實現

用於記錄日誌的工具類,它裡面提供了公共的 component logger aspect 表示當前類是乙個切面類 public class logger 前置通知 before pt1 public void beforeprintlog 後置通知 afterreturning pt1 public...

基於Jquery Ajax Json實現分頁顯示

1.後台action產生json資料。list blacklist blackservice.getblackinfolist mobilenum,gatewayid,startdate,enddate int totalrows blacklist.size stringbuffer sb new...

AOP基於註解實現

切面類 component 控制反轉 aspect 宣告切面類 public class forumadvisor after execution com.mitu.aspect.宣告後置增強 public void after around execution com.mitu.aspect.宣告...