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

概述

本篇介绍多计算节点上的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

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

时间: 2024-10-08 06:45:26

Pytorch 多GPU训练-多计算节点并行-All you need的相关文章

pytorch 多GPU 训练

import osos.environ['CUDA_VISIBLE_DEVICES'] = '0, 1, 2'import torch #注意以上两行先后顺序不可弄错 device = torch.device('cuda') model = DataParallel(model)model.to(device) 这样模型就会在gpu 0, 1, 2 上进行训练 原文地址:https://www.cnblogs.com/rabitvision/p/12218986.html

Pytorch中多GPU训练指北

前言 在数据越来越多的时代,随着模型规模参数的增多,以及数据量的不断提升,使用多GPU去训练是不可避免的事情.Pytorch在0.4.0及以后的版本中已经提供了多GPU训练的方式,本文简单讲解下使用Pytorch多GPU训练的方式以及一些注意的地方. 这里我们谈论的是单主机多GPUs训练,与分布式训练不同,我们采用的主要Pytorch功能函数为DataParallel而不是DistributedParallel,后者为多主机多GPUs的训练方式,但是在实际任务中,两种使用方式也存在一部分交集.

pytorch使用horovod多gpu训练

pytorch使用horovod多gpu训练 pytorch在Horovod上训练步骤分为以下几步: import torch import horovod.torch as hvd # Initialize Horovod 初始化horovod hvd.init() # Pin GPU to be used to process local rank (one GPU per process) 分配到每个gpu上 torch.cuda.set_device(hvd.local_rank())

深度学习的黄金搭档:GPU正重塑计算方式(转载)

转载:原文链接 深度学习的黄金搭档:GPU正重塑计算方式 OFweek电子工程网讯 随着神经网络和深度学习研究的不断深入——尤其是语音识别和自然语言处理.图像与模式识别.文本和数据分析,以及其他复杂领域——研究者们不断在寻找新的更好的方法来延伸和扩展计算能力. 几十年来,这一领域的黄金标准一直是高性能计算(HCP)集群,它解决了大量处理能力的问题,虽然成本有点过高.但这种方法已经帮助推动了多个领域的进步,包括天气预测.金融服务,以及能源勘探. 然而,2012 年,一种新的方法出现了.伊利诺伊大学

微软HPC群集添加Linux计算节点

HPC群集系统中计算资源的管理是重要的一块,如果能够实现计算作业可以在异构操作系统上面协同运作,无疑将是一大亮点,微软HPC pack自2012 upate3开始,支持本地linux作为计算节点,微软官网写到如何添加linux计算节点进入HPC群集的方法,但仅是Ubuntu版本的操作,而且有些关键步骤并没有写出,导致如果不是很懂linux的微软系统管理员做起来会遇到各种问题,因此老王通过本文将实际环境中安装涉及到的步骤全部呈现,并讨论linux计算节点为微软HPC群集带来的可能性. 本文以hpc

OpenStack运维(二):计算节点的故障和维护

1.计划中的维护 举例:需要升级某一个计算节点的硬件配置,需要将计算节点上的虚拟机迁移后在对其进行操作,分为两种情况. 1.1 云系统使用了共享存储 a. 获取虚拟机列表:nova list --host compute01-node-Name --all-tenant b. 将每个虚拟机迁移至另一台计算节点:nova live-migration <uuid> compute02-node-Name c. 停止nova-compute服务:stop nova-compute d. 维护工作完

Oenstak(M版)计算节点安装

#############修改hosts文件 10.0.0.11 controller10.0.0.31 compute110.0.0.32 compute210.0.0.41 block110.0.0.51 object110.0.0.52 object2 #############关闭selinux及防火墙############# systemctl stop firewalldsystemctl disable firewalld #############下载openstack软件包#

提升Exadata 计算节点本地IO性能

1.问题概述 某客户有一台Exadata X2-2,每个计算节点是4块普通的本地SAS硬盘做成的RAID5,然后在RAID5的本地硬盘上创建了一个文件系统来存放DSG数据同步软件,在后续的运维过程中,发现DSG数据同步软件在进行数据同步时的延时非常严重. DSG进行检查和性能分析后,确认是由于Exadata的本地硬盘提供的IOPS无法满足DSG软件的要求,大量的时间都在等待本地磁盘的读写IO上. 通过磁盘性能分析工具也可以发现,本地盘的IO使用率基本上是在90%以上,严重时长时间100%,客户希

Openstack 网络服务 Neutron计算节点部署(十)

Neutron计算节点部署 安装组件,安装的服务器是192.168.137.12 1.安装软件包 yum install -y openstack-neutron-linuxbridge ebtables ipset 2.配置文件neutron.conf 因为neutron控制节点跟计算节点配置几乎一样,直接复制控制节点的文件到计算节点,将不同的部分进行修改. scp /etc/neutron/neutron.conf [email protected]:/etc/neutron 在neutro