PyTorch单机多卡训练(无废话)

news2024/10/9 15:52:41

目前大家基本都在使用DistributedDataParallel(简称DDP)用来训练,该方法主要用于分布式训练,但也可以用在单机多卡。

第一步:初始化分布式环境,主要用来帮助进程间通信

torch.distributed.init_process_group(backend='nccl')

第二步:负责创建 args.local_rank 变量,并接受 torch.distributed.launch 注入的值

归根到底是创建一个变量,来接收torch.distributed.launch 注入。
目前代码中常见的两种方式:

local_rank = int(os.environ["LOCAL_RANK"])   # 这种是从自定义config文件中获取LOCAL_RANK

另外一种是parser:

parser = argparse.ArgumentParser()
parser.add_argument("--local_rank", type=int, default=-1)
args = parser.parse_args()

第三步:每个进程根据自己的local_rank设置应该使用的GPU

torch.cuda.set_device(args.local_rank)
torch.manual_seed(hps.train.seed)   # 非必要,尽可能固定种子

第四步:分布式数据和模型

# 分布式数据
train_sampler = DistributedSampler(train_dataset)
train_loader = torch.utils.data.DataLoader(train_dataset, sampler=train_sampler, batch_size=batch_size) 
# 分布式模型
model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.local_rank], output_device=args.local_rank)

第五步:运行

nproc_per_node表示每个node有多少个进程,每个GPU对应一个进程。
nnodes表示使用几个节点,一个节点对应一台电脑。

python -m torch.distributed.launch --nproc_per_node=2 --nnodes=1 train.py 

解释

  1. 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 ...
  • nnodes:节点的数量,通常一个节点对应一个主机,方便记忆,直接表述为主机
  • node_rank:节点的序号,从0开始
  • nproc_per_node:一个节点中显卡的数量
  • master_addr:master节点的ip地址,也就是0号主机的IP地址,该参数是为了让 其他节点 知道0号节点的位,来将自己训练的参数传送过去处理
  • master_port:master节点的port号,在不同的节点上master_addr和master_port的设置是一样的,用来进行通信
  1. torch.ditributed.launch相关环境变量解析(代码中os.environ中的参数)
  • WORLD_SIZE:os.environ[“WORLD_SIZE”]所有进程的数量
  • LOCAL_RANK:os.environ[“LOCAL_RANK”]每张显卡在自己主机中的序号,从0开始
  • RANK:os.environ[“RANK”]进程的序号,一般是1个gpu对应一个进程
    在这里插入图片描述
  1. 一般WORLD_SIZE和RANK和LOCAL_RANK在一起声明
rank = dist.get_rank()
local_rank = int(os.environ["LOCAL_RANK"])
n_gpus = dist.get_world_size()
  1. 多机和单机的一些概念问题
  • rank
    多机多卡:代表某一台机器
    单机多卡:代表某一块GPU
  • world_size
    多机多卡:代表有几台机器
    单机多卡:代表有几块GPU
  • local_rank
    多机多卡:代表某一块GPU的编号
    单机多卡:代表某一块GPU的编号

参考文献

1.https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html#torch.nn.parallel.DistributedDataParallel
2. https://github.com/jia-zhuang/pytorch-multi-gpu-training
3. https://blog.csdn.net/weixin_44966641/article/details/121872773
4. https://blog.csdn.net/magic_ll/article/details/122359490

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

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

相关文章

Notepad-- 程序员日常用法

一、快速查找标记,提取指定的字符串 1.使用正则表达式查找并标记,将标记的内容复制到新文本中 标记中输入:.*"staffNo": "([^"])".* 这个正则表达式可以匹配整个行,并将 staffNo 后面的内容标记出来。…

修复WordPress .htaccess文件中的常见问题

在搭建WordPress网站时,.htaccess文件非常重要。它可以帮助我们管理网站的重定向、优化URL结构、提高网站安全性等。然而,有时可能会出现由.htaccess文件引起的问题,比如500内部服务器错误、重定向次数过多和文章返回404错误等。本文将详细介…

Hadoop---概念篇

一、Hadoop的组成 二、HDFS架构概述 **1.NameNode(nn): **存储文件的元数据,例如:文件名、文件目录结构、文件属性(生成时间、副本数、文件权限)以及每个文件的块列表和块所在的DateNode等。 **2.DateNode(dn): **在本地文件系统中存储的文件块数据,以及块数据的校验和。 **3.…

后端必备技巧之SQL优化

日常开发中,几乎都免不了和数据库打交道,说到数据库,我们也需要联想这几个问题:我们写的SQL性能怎么样?有没有优化的空间?如何优化?下面我们来介绍关于SQL性能的命令EXPLAIN 什么是EXPLAIN命令&…

智融SW3536DC/DC+快充协议二合一IC

描述 SW3536 是一款高集成度的多快充协议双口充电芯片,支持 AC 口任意口快充输出,支持双口独立限流。其集成了 7A 高效率同步降压变换器,支持 PPS/ PD/ QC/ AFC/ FCP/ SCP/ PE/ SFCP/TFCP 等多种快充协议,支持 140W 输出功率&…

SGDC复位约束找不到信号问题

在使用spyglass编写sgdc时,对一个内部复位信号约束的时候,报信号找不到。 reset -name TOP.BLOCK3.U_TOP2.BLOCK1.U_TOP1.rst -value 0 但是明明get_pins 可以找到此信号。 由于存在generate命令,导致生成的路径比较奇怪,甚至存…

.NET 一款提权工具:Sharp4PetitPotato

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

深入浅出MongoDB(六)

深入浅出MongoDB(六) 文章目录 深入浅出MongoDB(六)分析查询性能原子性和事务字段名称带句点和美元符号查询计划 分析查询性能 mongodb compass提供解释计划标签页,其中显示有关查询性能的统计信息。这些统计信息可用…

简历修订与求职经历 - Chap02.

最新的简历: 1.基本信息 姓名 ---- 学历 学位 本科 理学学士 专业 应用物理 智能仪器仪表 性别 男 出生年月 1976/7 电话 ---- 年龄 48 毕业时间 1998/6 电邮 ---- 籍贯 河南洛阳宜阳 居住地 河南郑州高新区 1.1 期望从事职业信息 机械仪器…

泡沫背后:人工智能的虚幻与现实

人工智能的盛世与泡沫 现今,人工智能热潮席卷科技行业,投资者、创业者和用户都被其光环吸引。然而,深入探讨这种现象,人工智能的泡沫正在形成,乃至具备崩溃的潜质。我们看到的,无非是一场由资本推动的狂欢…

双11大促最值得入手的好物是哪些?双11好物种草清单大全分享!

在这个全民狂欢的购物盛宴中,每个人都希望能以最优惠的价格买到心仪已久的好物,随着科技的飞速发展和生活品质的提升,市场上的产品琳琅满目,让人目不暇接,为了帮助大家在这个双11找到真正值得入手的好物,我…

chatGPT模型接口分享

前言: 仅供学习和交流,请合理使用。 API:https://api.gptnet.org key:sk-x9Rmq3HeHh5z9EIi8wFaXCl02OfxRSk5UAFodYm1o4zo5X3i 支持模型:gpt-3.5-turbo、gpt-3.5-turbo-16k、gpt-4o-mini、llama-3.1-405b 暂时支持以上四个模型…

一键生成PPT在线使用的保姆级教程:告别加班就靠它

已经过完24年所有的法定节假日的你,上班状态还好吗? 小编人倒是挺飘忽的,就那种人在工位,魂仍在青青大草原的感觉,都是牛马却失去了自由奔跑的权利...... 尤其是还要面对节前一堆没完成的工作,手动完成不…

基于Jenkins+K8S构建DevOps自动化运维管理平台

目录 1.k8s助力DevOps在企业落地实践 1.1 传统方式部署项目为什么发布慢,效率低? 1.2 上线一个功能,有多少时间被浪费了? 1.3 如何解决发布慢,效率低的问题呢? 1.5 什么是DevOps? 1.5.1 敏…

买电容笔需要注意什么?2024平替电容笔推荐清单,小白必看!

在当今数字化快速发展的时代,电容笔作为一种重要的数字书写和创作工具,正日益受到人们的青睐。然而现在市场上的电容笔品牌繁多,我们还是需要提前了解产品的情况,避免进入到商家的陷阱中。下面我会介绍电容笔的一些避坑知识&#…

关于常见数据库中SQL分页语法整理

标题 MySQL分页查询常规版升级版 Oracle分页查询常规版升级版 PostgreSQL分页查询常规版升级版 SQL Server分页查询常规版升级版 MySQL分页查询 在MySQL中,分页查询通常使用 LIMIT 关键字来实现。 LIMIT [offset,] rows 其中,offset表示偏移量&#xff…

LLMUnity:在Unity 3D中使用大模型

在本文中,我们将展示如何在 Unity 引擎中使用 LLM(大型语言模型)🎮。我们将使用 LLMUnity 包,并查看一些示例,了解如何仅用几行代码设置对话交互! 免责声明:我是 LLMUnity 的作者。…

STM32通用定时器TIM3的PWM输出实验配置步骤

通用定时器 PWM 输出实验 本小节我们来学习使用通用定时器的 PWM 输出模式。 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。我们可以让定时…

Linux 命令 netstat 的 10 个基本用法

Netstat 简介 Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来…

(RAG)技术结合了大模型(LLM)与内部数据,从而实现更智能且相关性更高的 AI 应用

利用先进的生成式 AI 技术(如 RAG),释放数据的潜力,推动创新并获取战略优势 主要功能 使用向量数据库优化数据检索和生成 通过 AI 代理提升决策效率并自动化工作流程 克服实施真实 RAG 系统中的常见挑战 购买印刷版或 Kindle …