DDP、pytorch的分布式 torch.distributed.launch 训练说明

news2024/9/25 19:14:06

0、DDP的运行原理

执行步骤:

  1. 将data分为多个不同的batch,每个gpu得到batch都是不一样的
  2. 然后将每个batch放在每个gpu上独立的执行
  3. 最后得到的梯度求平均
  4. 将平均梯度平分给每个gpu
  5. 执行下一次迭代

这也就意味着你有多少个gpu,训练的速度也会提升多少倍

1个gpu和多个gpu输出相同的日志(step)?

例如给你一个下面的代码:

def run_loop(self):
    while (not self.lr_anneal_steps or self.step + self.resume_step < self.lr_anneal_steps):
        # 准备数据
        batch, cond = next(self.data)
        # 执行前后向传播
        self.run_step(batch, cond)
        # 更新日志 + save checkpoint
        if self.step % self.log_interval == 0:
            logger.dumpkvs()
        if self.step % self.save_interval == 0:
            self.opt.consolidate_state_dict()
            self.save()
            # Run for a finite amount of time in integration tests.
            if os.environ.get("DIFFUSION_TRAINING_TEST", "") and self.step > 0:
                return
        self.step += 1
        if self.step % 1000 == 0:
            logger.log("The current step is :", self.step)
            logger.log("The current time is :", datetime.datetime.now())

每个GPU上的进程都会独立地执行run_loop函数,那么N个gpu就会执行N个run_loop(),所以一次就会打印出N个"The current step is 1000",如果你使用1个gpu,它同样会打印1个"The current step is 1000",你此时如果不懂原理可能会认为是不是DDP没有起到加速作用,怎么多个gpu和1个gpu在相同时间内执行的都是相同的step呢?

虽然logger输出是一样的step,但是这并不意味着你的多个gpu执行的速度和1个gpu执行的速度是一样的,虽然4个gpu输出的是100个step,但是他比1个gpu执行的batch数多4倍,也就意味着训练速度提升了4倍

 

一、参数说明: 

我们在训练分布式时候,会使用到 torch.distributed.launch,可以通过命令,来打印该模块提供的可选参数 python -m torch.distributed.launch --help

usage: launch.py [-h] [--nnodes NNODES] [--node_rank NODE_RANK]
                [--nproc_per_node NPROC_PER_NODE] [--master_addr MASTER_ADDR] [--master_port MASTER_PORT] 
                [--use_env] [-m] [--no_python] [--logdir LOGDIR]
                training_script ...

 

torch.ditributed.launch参数解析(终端运行命令的参数):

  • nnodes:节点(主机)的数量,通常一个节点对应一个主机
  • node_rank:指的是当前启动的是第几台服务器,从 0 开始。
  • nproc_per_node:一个节点中显卡的数量
  • -master_addr:master节点的ip地址,也就是0号主机的IP地址,该参数是为了让 其他节点 知道0号节点的位,来将自己训练的参数传送过去处理
  • -master_port:master节点的port号,在不同的节点上master_addr和master_port的设置是一样的,用来进行通信


torch.ditributed.launch相关环境变量解析(代码中os.environ中的参数):

  • WORLD_SIZE:os.environ[“WORLD_SIZE”]所有进程的数量(可以简单记为gpu的总数)。如果你有2台服务器,每台服务器有4张卡,那么 World Size 就是 2 x 4 = 8。
  • LOCAL_RANK:os.environ[“LOCAL_RANK”]每张显卡在自己主机中的序号,从0开始。
  • RANK:os.environ[“RANK”]进程的序号,一般是1个gpu对应一个进程。标识一个进程的序号,从 0 开始。按照上面例子的配置,第一台机器上的 0, 1, 2, 3 卡对应的进程序号就是 0, 1, 2, 3,第二台机器上 0, 1, 2, 3 对应的进程序号就是 4, 5, 6, 7。需要确保每个进程的序号没有重复。其中 0 号进程为主进程,负责一些同步操作的通信。

二、启动方式说明:

使用 PyTorch 启动工具启动程序

PyTorch 提供了一个 torch.distributed.launch 帮助我们启动进程。

这个工具其实就是帮你计算 WORLD_SIZE = nproc_per_node * nnodes,然后执行一个循环,启动本机进程,利用这种方式,我们就只需要指定 --nproc_per_node 与 --nnodes 即可,就不需要指定WORLD_SIZE了。

单机多卡需要使用下面命令进行运行Python程序:

其中 python -m torch.distributed.launch --nproc_per_node=4 --nnodes=1 --node_rank=1 这一串中的参数不要少任何一个参数

python -m torch.distributed.launch --nproc_per_node=4 --nnodes=1 --node_rank=1  train.py  --args XXX

三、数据加载加速说明

dataloader提速的参数

num_workers: 加载数据的进程数量,默认只有1个,增加该数量能够提升数据的读入速度。(注意:该参数>1,在低版本的pytorch可能会触发python的内存溢出) pin_memory: 锁内存,加快数据在内存上的传递速度。 若数据加载成为训练速度的瓶颈,可以考虑将这两个参数加上。

data_loader_train = torch.utils.data.DataLoader(dataset=data_set, batch_size=32,num_workers=16,pin_memory=True)

PyTorch分布式训练基础--DDP使用 - 知乎

PyTorch 多卡分布式训练 – CodeTalks

【pytorch记录】pytorch的分布式 torch.distributed.launch 命令在做什么呢-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1615644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis中的慢查询日志和监视器

慢查询 添加新日志 在每次执行命令的之前和之后&#xff0c;程序都会记录微妙格式的当前UNIX时间戳&#xff0c;这两个时间戳之间的差就是服务器执行命令所耗费的时长&#xff0c;服务器会将这个时长作为参数之一传给slowlogPushEntryIfNeeded函数&#xff0c;而slowlogPushE…

【Git】生成patch和应用patch

生成patch 将本地所有修改打成补丁 git diff > /tmp/xxx.patch将本地对某个文件的修改打成补丁 git diff test/1.txt > /tmp/1.patch将某一次提交的修改内容打成补丁 -1表示只为单个提交创建patch&#xff0c;-o表示输出patch的文件夹路径&#xff0c;默认是用提交的…

[LitCTF 2023]PHP是世界上最好的语言!!、 [LitCTF 2023]Vim yyds、 [羊城杯 2020]easycon

目录 [LitCTF 2023]PHP是世界上最好的语言&#xff01;&#xff01; [LitCTF 2023]Vim yyds [羊城杯 2020]easycon [LitCTF 2023]PHP是世界上最好的语言&#xff01;&#xff01; 无参&#xff0c;根据题目提示看看php能否执行——返回1执行成功 用system()函数调用、执行ls …

【每周精选资讯 | 第 6 期】2024-04-15 ~ 2024-04-21

目录 前言内容国家天文台推出新一代天文大模型“星语3.0”李飞飞团队发布《2024年人工智能指数报告》&#xff0c;揭示AI十大趋势百度发布新一代智能计算操作系统“万源”刘强东AI数字人“采销东哥”亮相直播抖音与美团在AI赋能本地生活服务领域的竞争与合作联想发布AI PC系列产…

说话的艺术

目录&#xff1a; 1、询问术 2、说话的逻辑性 1、询问术 询问类似于从对方检索出你想要得到的事情&#xff0c;做好笔记也是很有必要的&#xff0c;故将“询问术”放于此处。 把握&#xff1a;26/F*4超级询问 2&#xff1a;带着两岁孩童的好奇心去提问 6&#xff1a;使用…

SpringCloud系列(9)--将服务消费者Consumer注册进Eureka Server

前言&#xff1a;上一章节我们介绍了如何将服务提供者注册进Eureka服务里&#xff0c;本章节则介绍如何将服务消费者Consumer注册进Eureka服务里 Eureka架构原理图 1、修改consumer-order80子模块的pom.xml文件&#xff0c;引入Eureka Clinet的依赖&#xff0c;然后reolad一下&…

Springboot 初始化操作

文章目录 程序启动后的初始化ApplicationRunner 接口CommandLineRunner 接口ApplicationRunner 和CommandLineRunner 的区别 Bean的实例化InitializingBean 接口PostConstruct注解BeanInitializingBean 接口、PostConstruct注解、Bean注解区别 总结 前些天发现了一个巨牛的人工…

晨控电子纸,工业无纸化新方案

一款好的产品&#xff0c;应该用心的去介绍。随着工业科技不断的迭代&#xff0c;生产车间自动化程度越来越高&#xff0c;但很多工序还是需要人员去更换&#xff0c;确认生产流程单。由于人员确认流程单的不确定性&#xff0c;很有可能出现流程单信息错误&#xff0c;下一工序…

Excel文件解析--超大Excel文件读写

使用POI写入 当我们想在Excel文件中写入100w条数据时&#xff0c;我们用普通的XSSFWorkbook对象写入时会发现&#xff0c;只有在将100w条数据全部加载入内存后才会用write()方法统一写入&#xff0c;这样效率很低&#xff0c;所以我们引入了SXSSFWorkbook进行超大Excel文件的读…

《ElementUI 基础知识》png 图片扩展 icon用法

前言 UI 设计给的切图是 .png 格式。但想与 Element UI icon 用法类似&#xff0c;方案如下。 实现 步骤一 准备图片 步骤二 新建文件&#xff0c;可使用 CSS 预处理语言 styl 或 scss。 stylus 方式 文件 icon.styl /* 定义一个混合 */ cfgIcon(w, h) {display: inlin…

二叉搜索树中的搜索(力扣700)

解题思路&#xff1a;因为二叉搜索树的左小右大特点&#xff0c;中只是寻找比较目标&#xff0c;怎么序遍历都可以&#xff0c;终止条件就是遍历完毕和找到了&#xff0c;然后就遍历左右子树开始寻找就好了 具体代码如下: class Solution { public: TreeNode* searchBST(Tre…

Java入门四步走

1. 简单的入门语法&#xff1a; 1.1 数据类型&#xff1a; 基本数据类型&#xff1a; 整数类型 —— byte、short、int、long, 浮点类型 —— float、double 字符类型 —— char 布尔类型 —— boolean 引用数据类型&#xff1a; 接口&#xff08;interface&#xff09;、数…

上市公司-企业数据要素利用水平数据集及参考文献(2010-2022年)

01、数据介绍 企业数据要素利用水平是指企业在其生产经营活动中&#xff0c;对数据的收集、处理、分析和应用的能力及效果。这种利用水平的高低直接反映了企业在数字化时代中的竞争力和创新能力。 本数据参考《中央财经大学学报》史青春&#xff08;2023&#xff09;老师的研…

芒果超媒的“乘风破浪”,差了一点市场海浪的反馈

4月21日晚间&#xff0c;芒果超媒发布了2023年度&2024一季度报告。 芒果超媒2023年实现营业收入146.28亿元&#xff0c;同比增长4.66%&#xff1b;净利润35.56亿元&#xff0c;同比增长90.73%&#xff1b;基本每股收益1.90元。公司拟每10股派发现金红利1.8元。2024年第一季…

使用gdal均匀筛选点矢量

使用gdal均匀筛选点矢量 作用&#xff1a; 通过计算各点之间的欧式距离&#xff0c;筛选出符合目标的、均匀发布在空间中的N个数据点。 效果示意图 运行环境 python 3.10 安装&#xff1a;tqdm、numpy和tqdm这三个库 完整代码 import numpy as np from osgeo import ogr,…

291个地级市资源错配指数、劳动和资本相对扭曲指数(2006-2021年)

01、数据介绍 资源错配指数&#xff08;Misallocation Index&#xff09;是一个用于衡量资源配置效率的指标&#xff0c;它衡量的是生产要素的配置是否合理&#xff0c;是否达到了最优的状态。资源错配指数越高&#xff0c;资源的利用效率越低。资源错配指数主要用于衡量各种生…

没想到打脸这么快,AI程序员已经出发了!

大家好啊&#xff0c;我是豆小匠。 先介绍一下本期的主角&#xff1a;Devin&#xff0c;世界上第一位AI程序员&#xff0c;由2023年11月成立的10人初创公司Cognition AI开发。 1. AI程序员已经能做到什么程度 3月13日&#xff0c;Cognition AI公司在X平台&#xff08;原推特&…

监控员工上网记录软件 三款超好用监控员工上网的软件

监控员工上网记录软件 三款超好用监控员工上网的软件 监控员工上网聊天、打游戏、看小说等特定行为的软件通常属于员工监控或上网行为管理软件类别。这类软件旨在帮助企业或组织管理者监督员工在工作时间内对计算机及互联网资源的使用情况&#xff0c;确保工作效率&#xff0c;…

进阶C语言-文件操作

文件操作 &#x1f388;1.为什么使用文件&#x1f388;2.什么是文件&#x1f52d;2.1程序文件&#x1f52d;2.2数据文件&#x1f52d;2.3文件名 &#x1f388;3.文件的打开和关闭&#x1f52d;3.1文件指针&#x1f52d;3.2文件的打开和关闭 &#x1f388;1.为什么使用文件 ✅ 我…

vue的学习之用vue写一个hello,vue

根据以下步骤下载vue.js 介绍 — Vue.js 创建一个damo.html &#xff0c;引入vue.js即可 <body><div id"app">{{ message }}</div><!-- Vue --><!-- 开发环境版本&#xff0c;包含了有帮助的命令行警告 --><script src"js/vu…