Pytorch---DDP使用
目录
零、Pytorch并行模块
1、Data_parallel
2、多进程封装方式
一、实验目的和实验内容
1.1实验介绍
二、实验设计
2.1对model实现参数的广播、收集和聚合
2.2设置瓶颈节点
2.2.1 聚合时间瓶颈
2.2.2 梯度计算时间瓶颈
零、Pytorch并行模块
1、Data_parallel
单机多卡:数据并行的方式,网络的input数据一般要求IId,被切割成子集,不同子集作为不同device的输入(device指gpu,上面的model都是一样的)。然后计算的loss一般放到nn.DataParallel()的output_device设备上,导致该设备内存占用相比更大。
代码:
2、多进程封装方式
(1)torch.multiprocessing里面的process,这种方式有点类似在终端执行两次python train.py &。这里是要加&符号的。
(2)使用torch.distributed.launch
在终端启用。每个torch.distributed.launch会启动n个进程,并给每个进程一个--local_rank=i的参数。有多少台机器:--nnodes;当前是哪台机器:--node_rank;每台机器有多少个进程:--nproc_per_node;高级参数(多机模式)通讯的address和通讯的port
(3)torch.multiprocessing.spawn
mp.spawn和process有点类似,如下
一、实验目的和实验内容
了解并掌握分布式算法中的集体通信和参数聚合策略
|
1.1实验介绍
本次实验是在单机模拟分布式系统,通过多进程来模拟多节点,使用Pytorch的DDP模块来进行分布式任务。
创建DDP模块,首先正确设置过程组,初始化分布式环境。
Init_process确保每个进程都可以使用相同的 IP 地址和端口通过主机进行协调,包括设置
torch.distributed支持点对点通信和集合通信,数据从一个进程到另一个进程的传输称为点对点通信,这些是通过send和recv函数或其直接对应部分isend和irecv实现的。
与点对点通信相反,集合允许跨组中所有进程的通信模式。Pytorch提供4中运算符和7个集合体。
任务是通过pytorch的通信原语来实现参数的广播、收集和聚合。
二、实验设计
2.1对model实现参数的广播、收集和聚合
(1)对不同进程的model进行同一参数的初始化
使用boardcast来操作,0代表进程rank 0,就是第一个进程的model参数复制到其他进程的model里。
(2)训练过程里,还需要对不同进程的参数进行聚合,例如使用all_reduce来聚合模型的参数。
这里的实现主要是对grad做的,采用SUM运算符。
对于参数聚合,处理all_reduce以外,采用reduce+boardcast实现all_reduce相同的功能。
通信原语 |
Rank数 |
Train_time |
||
All_reduce |
2 |
12.083552837371826 |
||
Reduce+boardcast |
2 |
12.250021696090698 |
||
All_reduce |
1 |
14.21995210647583 |
||
Reduce+boardcast |
1 |
14.708715438842773 |
2.2设置瓶颈节点
对rank=1进程设置sleep,查看运算时间
瓶颈节点实验 |
参数聚合方式 |
Sleep |
||
Exp_name |
All_reduce |
Rank 0 |
Rank 1 |
Train_time |
1 |
是 |
不 |
不 |
10.395909786224365 |
2 |
是 |
不 |
Rank启动时sleep 0.001秒 |
12.336158275604248 |
3 |
是 |
不 |
每次聚合时sleep 0.01秒 |
36.61159658432007 |
4 |
是 |
不 |
每次loss.backward sleep 6s |
2.2.1 聚合时间瓶颈
为了查看一次参数聚合不同时间的影响,我打印了聚合前后的时间。
Rank1 使用sleep 0.5s
正常聚合时间是:
2.2.2 梯度计算时间瓶颈
聚合操作需要考虑所有rank的梯度,这一过程里面sleep,根据pytorch的提示应该是会wait的。
对rank1的loss.backward后加上sleep可以看见,
再打印聚合参数完成的时间:
通过上图可以看见,参数聚合的过程是需要所有rank一同时间的。前面的loss. Backward的计算梯度过程时间的差异会体现在模型参数聚合过程。
可以理解,因为想loss计算、梯度计算和梯度更新,在pytorch里面都是针对当前进程的。
Pytorch---DDP使用相关推荐
- pytorch 指定卡1_[原创][深度][PyTorch] DDP系列第一篇:入门教程
引言 DistributedDataParallel(DDP)是一个支持多机多卡.分布式训练的深度学习工程方法.PyTorch现已原生支持DDP,可以直接通过torch.distributed使用,超 ...
- [深度][PyTorch] DDP系列第三篇:实战与技巧
[深度][PyTorch] DDP系列第三篇:实战与技巧 转自:https://zhuanlan.zhihu.com/p/250471767 零. 概览 想要让你的PyTorch神经网络在多卡环境上跑 ...
- pytorch DDP加速之gradient accumulation设置
pytorch DDP 参考:https://zhuanlan.zhihu.com/p/250471767 GPU高效通信算法-Ring Allreduce: https://www.zhihu.co ...
- PyTorch DDP
正在郁闷呢 jetson nx 的torchvision安装~~ 自带就剩5g 想弄到ssd 项目中的 venv中又 cuda.h没有... 明明已经装好什么都对 算了说今天主题 啊对 还是搬运啊 学 ...
- Pytorch DDP分布式数据合并通信 torch.distributed.all_gather()
文章目录 1. 官网介绍 2. all_gather()不进行梯度传播,用于模型test或eval状态 3. all_gather()需要进行梯度传播,用于模型train状态 4. 相关链接 1. 官 ...
- PyTorch 多机多卡训练:DDP 实战与技巧
作者丨996黄金一代@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/250471767 编辑丨极市平台 零. 概览 想要让你的PyTorch神经网络在多卡环境上跑得又 ...
- Pytorch中的DDP
一. 概览 DDP的原理? 在分类上,DDP属于Data Parallel.简单来讲,就是通过提高batch size来增加并行度. 为什么快? DDP通过Ring-Reduce的数据交换方法提高了通 ...
- Pytorch分布式训练/多卡训练(二) —— Data Parallel并行(DDP)(2.2)(代码示例)(BN同步主卡保存梯度累加多卡测试inference随机种子seed)
DDP的使用非常简单,因为它不需要修改你网络的配置.其精髓只有一句话 model = DistributedDataPrallel(model, device_ids=[local_rank], ou ...
- PyTorch如何加速数据并行训练?分布式秘籍大揭秘
本文转载自机器之心. 选自arXiv 作者:Shen Li等 机器之心编译 参与:小舟.杜伟 PyTorch 在学术圈里已经成为最为流行的深度学习框架,如何在使用 PyTorch 时实现高效的并行化? ...
- PyTorch 多机多卡训练:分布式实战与技巧
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx DistributedDataParallel(DDP)是一个支持多机多卡.分布式训练的深度学 ...
最新文章
- 区块链相关论文研读4: Monoxide异步共识组
- AIX下两个常用命令
- 给批量用户设磁盘配额
- Linux Bash变量-数值运算与运算符
- 推出了底层代码chatbot开发工具,Rulai获650万美元融资
- IDEA 快捷键终极大全
- CF802O-April Fools‘ Problem(hard)【wqs二分,优先队列】
- 后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值
- Linux/Ubuntu 单机配置Hbase
- matlab 工业相机 曝光时间_工业相机与普通相机的差别
- 诡异的 BOM 字符 \ufeff
- 006--C++动态内存(简介)
- Centos7安装Informix
- QQ空间自动点赞脚本1
- zoom 更改安装位置_如何以Zoom更改会议主持人
- excel2013超链接进不去,提示“您的组织策略不允许...”
- 文字环形旋转加载js特效
- mysql创建子用户代码_mysql创设用户及受权
- J.A.R.V.I.S.
- 360手机怎样更新系统版本android,360手机N5迎来安卓7.0稳定版升级