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 基本概念相关推荐

  1. 新手手册:Pytorch分布式训练

    文 | 花花@机器学习算法与自然语言处理 单位 | SenseTime 算法研究员 目录 0X01 分布式并行训练概述 0X02 Pytorch分布式数据并行 0X03 手把手渐进式实战 A. 单机单 ...

  2. PyTorch 分布式训练DDP 单机多卡快速上手

    PyTorch 分布式训练DDP 单机多卡快速上手 本文旨在帮助新人快速上手最有效的 PyTorch 单机多卡训练,对于 PyTorch 分布式训练的理论介绍.多方案对比,本文不做详细介绍,有兴趣的读 ...

  3. Pytorch分布式训练/多卡训练(二) —— Data Parallel并行(DDP)(2.2)(代码示例)(BN同步主卡保存梯度累加多卡测试inference随机种子seed)

    DDP的使用非常简单,因为它不需要修改你网络的配置.其精髓只有一句话 model = DistributedDataPrallel(model, device_ids=[local_rank], ou ...

  4. Pytorch - 分布式通信原语(附源码)

    前言 由于工作需要,最近在补充分布式训练方面的知识.经过一番理论学习后仍觉得意犹未尽,很多知识点无法准确get到(例如:分布式原语scatter.all reduce等代码层面应该是什么样的,ring ...

  5. [源码解析] PyTorch 分布式(2) ----- DataParallel(上)

    [源码解析] PyTorch 分布式(2) ----- DataParallel(上) 文章目录 [源码解析] PyTorch 分布式(2) ----- DataParallel(上) 0x00 摘要 ...

  6. [源码解析] PyTorch分布式优化器(1)----基石篇

    [源码解析] PyTorch分布式优化器(1)----基石篇 文章目录 [源码解析] PyTorch分布式优化器(1)----基石篇 0x00 摘要 0x01 从问题出发 1.1 示例 1.2 问题点 ...

  7. Pytorch - 分布式训练极简体验

    由于工作需要,最近在补充分布式训练方面的知识.经过一番理论学习后仍觉得意犹未尽,很多知识点无法准确get到(例如:分布式原语scatter.all reduce等代码层面应该是什么样的,ring al ...

  8. WCF分布式开发步步为赢(1):WCF分布式框架基础概念

     众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都 ...

  9. PyTorch分布式训练

    PyTorch分布式训练 PyTorch 是一个 Python 优先的深度学习框架,能够在强大的 GPU 加速基础上实现张量和动态神经网络.PyTorch的一大优势就是它的动态图计算特性. Licen ...

最新文章

  1. mysql不被其他ip访问_mysql数据库无法被其他ip访问的解决方法
  2. Java中的RAII
  3. 联想打印机7256显示更换墨盒_惠普打印机涉嫌垄断?只认自家“昂贵”墨盒,成本太高招架不住...
  4. 基于django rest framework的mock server实践
  5. 小米线刷一直显示flashing_小米空调质量怎么样 小米空调一晚上多少电 看完这篇你就有数了...
  6. SQL大全------之 oracle关于insert all的用法
  7. Jenkins testng maven reportng
  8. enumerate取下标
  9. Centos7_系统初始优化配置
  10. Linux内存管理之vmalloc与low_memory
  11. 《WINDOWS黑客编程技术详解》勘误收集及软件下载
  12. 免费的安卓录屏、录音软件(无需root)
  13. python 进化树_Biopython之系统发育树(进化树)的绘制
  14. python list切片_python list切片
  15. vue自定义组件,ElementUi表单校验v-model不能即时生效的解决方法
  16. Fallback函数
  17. vue3.x 中使用 vant <van-image>图片不显示的问题
  18. 最有意思的100条英语(转)
  19. 使用tensorflow和Keras的初级教程
  20. 并联串联混合的电压和电流_困惑了很久的串联/并联谐振电路详解

热门文章

  1. 用思维导图写小说的提纲
  2. SQL存储过程返回受影响的行数
  3. Zeit – Linux图形化中定时任务的工具
  4. 最小二乘与极大似然估计
  5. Neo4j调用APOC算法库
  6. JavaScript操作iframe之不得不说的秘密(一)
  7. 内存专题--各种RAM/ROM/Cache/Flash等内存概念与区别
  8. TensorFlow2.0 教程-图像分类
  9. 恺撒与基督: 罗马帝国面积
  10. 测评工具evo的使用