Pytorch 分布式DPP 基本概念
Reference
PyTorch分布式DPP涉及的基本概念与问题(强烈推荐)
GO
防喷指南,小小学生,啥也不会,欢迎指出错误。
1. 分布式参数解释
- rank:用于表示在整个分布式任务中进程的序号,每一个进程对应了一个rank进程,整个分布式训练由许多的rank进程完成。rank,我个人理解就相当于进程的index,通过这个index找到对应的进程。
- node:物理节点,一般来说指一台机器,机器内部可以有多个GPU
- local_rank:local_rank不同于进程rank的地方在于,他是相对于node而言的编号,每个node之间的local_rank相对独立。如果是一台机器,rank一般就等于local_rank。
- world size:一个分布式任务中,rank的总数。
图片来自参考链接
图中world_size=12,总共有12个rank。
1.1 注意:
1、rank与GPU之间没有必然的对应关系,一个rank可以包含多个GPU;一个GPU也可以为多个rank服务(多进程共享GPU)。
这一点在理解分布式通信原理的时候比较重要。因为很多资料里面对RingAllReduce、PS-WorK 等模式解释时,习惯默认一个rank对应着一个GPU,导致了很多人认为rank就是对GPU的编号。
2. 通信参与与模式
通信过程主要是完成模型训练过程中参数信息的传递,主要考虑通信后端和通信模式选择,后端与模式对整个训练的收敛速度影响较大,相差可达2~10倍。在DDP中支持了几个常见的通信库,而数据处理的模式写在Pytorch底层,供用户选择的主要是后端。在初始化时需要设置:
- backend:通信后端,可选nccl(NVIDIA推出),gloo(FACEBOOK推出),mpi(OpenMPI),从测试效果来看,如果显卡支持nccl,建议选择nccl。
torch提供了api接口判断底层通信库是否可用
torch.distributed.is_nccl_available() # 判断nccl是否可用
torch.distributed.is_mpi_available() # 判断mpi是否可用
torch.distributed.is_gloo_available() # 判断gloo是否可用
- master_addr与master_port:主节点的地址以及端口,供init_method的tcp方式使用。因为pytorch中网络通信建立是从机去连接主机,运行ddp只需要指定主节点的IP与端口,其他节点的IP不需要填写。这两个参数可以通过环境变量或者init_method传入。
# 方式1:
os.environ['MASTER_ADDR'] = 'localhost'
os.environ['MASTER_PORT'] = '12355'
dist.init_process_group("nccl", rank=rank, world_size=world_size)
# 方式2:
dist.init_process_group("nccl", init_method="tcp://localhost:12355",rank=rank, world_size=world_size)
Pytorch 分布式DPP 基本概念相关推荐
- 新手手册:Pytorch分布式训练
文 | 花花@机器学习算法与自然语言处理 单位 | SenseTime 算法研究员 目录 0X01 分布式并行训练概述 0X02 Pytorch分布式数据并行 0X03 手把手渐进式实战 A. 单机单 ...
- PyTorch 分布式训练DDP 单机多卡快速上手
PyTorch 分布式训练DDP 单机多卡快速上手 本文旨在帮助新人快速上手最有效的 PyTorch 单机多卡训练,对于 PyTorch 分布式训练的理论介绍.多方案对比,本文不做详细介绍,有兴趣的读 ...
- Pytorch分布式训练/多卡训练(二) —— Data Parallel并行(DDP)(2.2)(代码示例)(BN同步主卡保存梯度累加多卡测试inference随机种子seed)
DDP的使用非常简单,因为它不需要修改你网络的配置.其精髓只有一句话 model = DistributedDataPrallel(model, device_ids=[local_rank], ou ...
- Pytorch - 分布式通信原语(附源码)
前言 由于工作需要,最近在补充分布式训练方面的知识.经过一番理论学习后仍觉得意犹未尽,很多知识点无法准确get到(例如:分布式原语scatter.all reduce等代码层面应该是什么样的,ring ...
- [源码解析] PyTorch 分布式(2) ----- DataParallel(上)
[源码解析] PyTorch 分布式(2) ----- DataParallel(上) 文章目录 [源码解析] PyTorch 分布式(2) ----- DataParallel(上) 0x00 摘要 ...
- [源码解析] PyTorch分布式优化器(1)----基石篇
[源码解析] PyTorch分布式优化器(1)----基石篇 文章目录 [源码解析] PyTorch分布式优化器(1)----基石篇 0x00 摘要 0x01 从问题出发 1.1 示例 1.2 问题点 ...
- Pytorch - 分布式训练极简体验
由于工作需要,最近在补充分布式训练方面的知识.经过一番理论学习后仍觉得意犹未尽,很多知识点无法准确get到(例如:分布式原语scatter.all reduce等代码层面应该是什么样的,ring al ...
- WCF分布式开发步步为赢(1):WCF分布式框架基础概念
众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都 ...
- PyTorch分布式训练
PyTorch分布式训练 PyTorch 是一个 Python 优先的深度学习框架,能够在强大的 GPU 加速基础上实现张量和动态神经网络.PyTorch的一大优势就是它的动态图计算特性. Licen ...
最新文章
- mysql不被其他ip访问_mysql数据库无法被其他ip访问的解决方法
- Java中的RAII
- 联想打印机7256显示更换墨盒_惠普打印机涉嫌垄断?只认自家“昂贵”墨盒,成本太高招架不住...
- 基于django rest framework的mock server实践
- 小米线刷一直显示flashing_小米空调质量怎么样 小米空调一晚上多少电 看完这篇你就有数了...
- SQL大全------之 oracle关于insert all的用法
- Jenkins testng maven reportng
- enumerate取下标
- Centos7_系统初始优化配置
- Linux内存管理之vmalloc与low_memory
- 《WINDOWS黑客编程技术详解》勘误收集及软件下载
- 免费的安卓录屏、录音软件(无需root)
- python 进化树_Biopython之系统发育树(进化树)的绘制
- python list切片_python list切片
- vue自定义组件,ElementUi表单校验v-model不能即时生效的解决方法
- Fallback函数
- vue3.x 中使用 vant <van-image>图片不显示的问题
- 最有意思的100条英语(转)
- 使用tensorflow和Keras的初级教程
- 并联串联混合的电压和电流_困惑了很久的串联/并联谐振电路详解