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

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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Centos7虚拟机与真机乎ping以及虚拟机ping不通的原因

以下是本机的网络地址 首先我在这两天的学习中遇到了以下种种问题&#xff1a; 本机与虚拟机互相ping不通虚拟机无法连接网络访问互联网本机可以ping通虚拟机 但是虚拟机不能ping本机 解决方法&#xff1a; 我在这里把dhcp改成了静态ip地址 这样以后不管怎么变化IP地址都没…

# 从浅入深 学习 SpringCloud 微服务架构(四)Ribbon

从浅入深 学习 SpringCloud 微服务架构&#xff08;四&#xff09;Ribbon 段子手168 一、ribbon 概述以及基于 ribbon 的远程调用。 1、ribbon 概述&#xff1a; Ribbon 是 Netflixfa 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。 在 SpringCloud 中 Eureka …

汽车摄像头匿名化处理解决方案,保护信息的安全性和隐私性

随着智能交通和自动驾驶技术的迅猛发展&#xff0c;汽车摄像头已成为现代汽车不可或缺的一部分&#xff0c;摄像头所捕捉的图像信息也引发了日益严峻的信息安全问题。如何在充分利用摄像头功能的同时&#xff0c;保障个人隐私和信息安全&#xff0c;已成为企业亟待解决的问题。…

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

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

创建虚拟环境(记录一下)

conda create -n name python3.8版本高于11.7&#xff1a; pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117 --force-reinstall --user 检验是否为true import torch print(torch.cuda.is_available()) stable diff…

AI应用开发:pgvector能帮你解决什么问题

在这篇博客文章中&#xff0c;我们将探讨pgvector如何帮助PostgreSQL中的基于AI的工作负载&#xff0c;使您的数据库向量操作更快、更高效。 pgvector&#xff1a;在PostgreSQL中存储和查询向量 pgvector 是一个PostgreSQL扩展&#xff0c;允许您存储、查询和索引向量。 截至…

MTK6775/MT6775/曦力P70联发科处理器性能参数资料

联发科MT6775(曦力P70)芯片搭载强大的Arm Cortex-A73/A53八核CPU&#xff0c;并采用台积电12纳米FinFET制程工艺&#xff0c;相较于其他14纳米级别产品&#xff0c;功耗节省达到了15%。此外&#xff0c;曦力P70还配备了高效能的Arm Mali-G72 GPU&#xff0c;相比上一代产品曦力…

《QT实用小工具·三十六》metro风格的主界面

1、概述 源码放在文章末尾 该项目实现了metro风格的主界面&#xff0c;包含访客登记&#xff0c;记录查询&#xff0c;证件扫描&#xff0c;信息打印&#xff0c;系统设置&#xff0c;系统重启等功能&#xff0c;项目demo演示如下所示&#xff1a; 源码下载

JDK 11下载、安装、配置

下载 到Oracle管网下载JDK 11&#xff0c;下载前需要登录&#xff0c;否则直接点下载会出现502 bad gateway。 下载页面链接 https://www.oracle.com/hk/java/technologies/downloads/#java11-windows 登录 有些人可能没有Oracle账号&#xff0c;注册也比较慢&#xff0c;有需…

Springboot 初始化操作

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

探索以太坊世界:使用Geth打造你的私人网络

文章目录 概要名词解释Geth&#xff08;Go Ethereum&#xff09;区块链网络种类 具体流程下载geth客户端配置私链新建创世区块启动私链 连接MetaMask钱包小结 概要 在区块链领域&#xff0c;以太坊私链的搭建是学习和开发智能合约的重要一步。私链允许开发者在独立的环境中进行…

IPD集成产品开发(二)

时间&#xff1a;2024年04月21日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a;IPD集成产品开发&#xff08;二&#xff09;https://www.ximalaya.com/sound/724309598 大家好&#xff0c;欢迎来到小蒋聊技…

前端开发攻略---Vue项目(Vue2和Vue3)引入高德地图,超详细,超简单,保姆级教程。

1、图片演示 2、引入前的准备 1、前往 高德开放平台 进行账号注册。如果手机上有高德地图App并且已经登录过&#xff0c;则可以直接选择登录 2、注册/登录完成后来到应用管理-->我的应用 3、点击创建新应用 4、填写好应用名称和选择应用类型 5、填写好后点击添加Key 6、填写…

直播回顾 | 长安链可验证数据库技术架构和代码解读

3月29日长安链可验证数据库技术架构和代码解读中&#xff0c;北京大学博士后研究员高健博带开发者一起了解了长安链可验证数据库的应用背景、设计实现方式和功能代码结构。 数据存证以及通过智能合约进行数据共享是目前联盟链最直接、最广泛的应用场景。在很多存证场景中&…

计算请假时间,只包含工作时间,不包含中午午休和非工作时间及星期六星期天,结束时间不能小于开始时间

1.计算相差小时&#xff0c;没有休息时间 computed: {// 计算相差小时time() {let time 0;if (this.ruleForm.date1 &&this.ruleForm.date2 &&this.ruleForm.date3 &&this.ruleForm.date4) {// 开始时间let date1 this.ruleForm.date1;let y date…

Mysql学习一

目录 1.启动数据库&#xff1a; 2.命令行连接到MySQL&#xff08;winr输入cmd&#xff09; 3.MySQL的三重结构&#xff1a; 4.SQL语句分类&#xff1a; 1.启动数据库&#xff1a; winr——输入services.msc进入本地服务 2.命令行连接到MySQL&#xff08;winr输入cmd&#x…

pyCharm导入pyspark中的sparkconf和sparkcontext错误

背景&#xff1a;学习黑马程序员python课程的pyspark实战部分时按照下图导入pysark包时发现sparkconf和sparkcontext无法导入和运行。 首先想到是不是在CMD窗口下载的pySpark路径及安装是否正确&#xff1f; 通过下图发现第三方库都安装正确&#xff0c;然后就考虑库的路径&a…

【Axure教程0基础入门】05动态面板

05动态面板 1.动态面板是什么&#xff1f; 一个用来存放多个元件的容器&#xff08;container&#xff09; 其中包含多个状态&#xff08;state&#xff09;&#xff0c;但同时只能显示一个 状态之间&#xff0c;可以通过交互动作&#xff08;action&#xff09;控制切换和动…

[激光原理与应用-88]:图解激光在工业加工领域的应用大全以及激光加工的优势

目录 前言&#xff1a; 激光加工分类 一、材料清除 1.1 激光清洗&#xff1a;去除污垢 1.2 激光雕刻&#xff1a;去除多余 1.3 激光划线 1.4 激光切割 1.5 激光打标 1.6 激光打孔 1.7 激光雕刻 二、材料增强 2.1 激光淬火&#xff1a;增加强度 2.2 激光退火&#…

企业常用Linux正则表达式与三剑客/企业生产环境及知识/企业中远程连接ssh工具(为什么连接有时慢?)

企业高薪思维: 1.学习去抓重点有价值知识 2.猛劲学&#xff0c;使劲学&#xff08;能否给别人将会&#xff0c;讲明白&#xff0c;写明白&#xff0c;练习明白&#xff09;&#xff0c;在学习过程中你觉得学会了60-80%&#xff0c;其实你只会了40-50%&#xff0c;你要讲明白会操…