Pytorch 多GPU訓練-多計算節點並行-All you need

概述

本篇介紹多計算節點上的pytorch分佈式訓練。從環境配置到運行demo的全部步驟,step by step。沒有理論原理,理論原理能夠參考這裏.html

基礎環境

  • 多臺linux計算節點,經過網絡鏈接,不一樣主機之間能夠相互ping通。網速越快越好,若是通訊速度比較慢,就不用怎麼考慮分佈式訓練。node

  • 全部linux計算節點都包含若干GPU,GPU數量能夠不一致,可是全部GPU計算速度儘可能一致,不然模型的同步時會等待大量時間(短板效應)。python

  • 全部計算節點都擁有Pytorch運行環境,即均可以單獨的運行訓練代碼。linux

NFS環境搭建

這裏NFS有兩個做用:(1)集羣初始化時做爲多個進程(不一樣主機上)UDS(unix domain socket)的通訊地址;(2)數據集統一存放在NFS目錄上,全部進程均可以同時訪問。git

選擇一臺與計算節點同一網段的linux主機做爲存儲節點,或者使用計算節點中的一臺做爲存儲節點。github

存儲節點操做以下:shell

apt-get install nfs-kernel-server
<path to share> *(rw,sync,no_root_squash,no_subtree_check) # insert this line to /etc/exports, save & exit
exportfs -a

數據集保存到共享目錄中。
全部計算節點將共享目錄掛載到本地:網絡

mkdir /mnt/nfs
mount -t nfs <ip of storage node>:<path to share> /mnt/nfs

分佈式訓練

代碼見: github ,須要本身更改數據集的地址。dom

運行demo

分別在三個主機上運行以下的命令。word_size 爲 3,當啓動的進程數少於3時,全部已經啓動的進程會等待,進程數達到3時集羣建立成功,訓練開始。每一個計算節點都使用該計算節點上的兩個GPU --gpu_devices 0 1socket

# node 1
python multigpu_demo_v3.py \
    --init_method file://<absolute path to nfs file> \
    --rank 0 \
    --world_size 3 \
    --gpu_devices 0 1

# node 2
python multigpu_demo_v3.py \
    --init_method file://<absolute path to nfs file> \
    --rank 1 \
    --world_size 3 \
    --gpu_devices 0 1

# node 3
python multigpu_demo_v3.py \
    --init_method file://<absolute path to nfs file> \
    --rank 2 \
    --world_size 3\
    --gpu_devices 0 1

更多測試細節見github

總結

Pytorch裏的分佈式訓練只能實現增大batch size的做用,對於速度的提高不明顯,對於Batch Norm沒有幫助,若是要提高BN的效果,須要用Sync Bn

相關文章
相關標籤/搜索