码迷,mamicode.com
首页 > 其他好文 > 详细

Pytorch 多GPU训练-多计算节点并行-All you need

时间:2019-09-30 16:24:16      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:tfs   通过   man   共享存储   doc   自己   size   保存   提升   

概述

本篇介绍多计算节点上的pytorch分布式训练。从环境配置到运行demo的所有步骤,step by step。没有理论原理,理论原理可以参考这里.

基础环境

  • 多台linux计算节点,通过网络连接,不同主机之间可以相互ping通。网速越快越好,如果通信速度比较慢,就不用怎么考虑分布式训练。

  • 所有linux计算节点都包含若干GPU,GPU数量可以不一致,但是所有GPU计算速度尽量一致,否则模型的同步时会等待大量时间(短板效应)。

  • 所有计算节点都拥有Pytorch运行环境,即都可以单独的运行训练代码。

NFS环境搭建

这里NFS有两个作用:(1)集群初始化时作为多个进程(不同主机上)UDS(unix domain socket)的通信地址;(2)数据集统一存放在NFS目录上,所有进程都可以同时访问。

选择一台与计算节点同一网段的linux主机作为存储节点,或者使用计算节点中的一台作为存储节点。

存储节点操作如下:

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 ,需要自己更改数据集的地址。

运行demo

分别在三个主机上运行如下的命令。word_size 为 3,当启动的进程数少于3时,所有已经启动的进程会等待,进程数达到3时集群创建成功,训练开始。每个计算节点都使用该计算节点上的两个GPU --gpu_devices 0 1

# 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

Pytorch 多GPU训练-多计算节点并行-All you need

标签:tfs   通过   man   共享存储   doc   自己   size   保存   提升   

原文地址:https://www.cnblogs.com/walter-xh/p/11613031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!