torch.distributed.launch多卡多机

news/2024/11/19 7:30:48/

torch.distributed.launch命令介绍
我们在训练分布式时候,会使用到 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”]所有进程的数量
LOCAL_RANK:os.environ[“LOCAL_RANK”]每张显卡在自己主机中的序号,从0开始
RANK:os.environ[“RANK”]进程的序号,一般是1个gpu对应一个进程

单机多卡 的分布式

python -m torch.distributed.launch --nproc_per_node 4 --master_port='29500' train.py
 

多机多卡 的分布式
在0号机器上调用
python -m torch.distributed.launch --nproc_per_node 4 --nnodes 2 --node_rank 0 --master_addr='172.18.39.122' --master_port='29500' train.py
在1号机器上调用
python -m torch.distributed.launch --nproc_per_node 4 --nnodes 2 --node_rank 1 --master_addr='172.18.39.122' --master_port='29500' train.py
注意:

命令中的【–master_addr=‘172.18.39.122’】指的是0号机器的IP,在0号机器上运行的命令中【node_rank】必须为0
只有当【nnodes】个机器全部运行,代码才会进行分布式的训练操作,否则一直处于等待状态

单机多卡 训练
只需要说明 想要使用GPU的[编号]、[数量]即可。由于不需要不同机器之间的通信,就少了其余4个参数的设定
export CUDA_VISIBLE_DEVICES=0,1
python -m torch.distributed.launch --nproc_per_node=2 train.py

单机单卡训练
当工程提供的是分布式训练代码,但我们只想用单张显卡运行。
机器上只有一张显卡:
python -m torch.distributed.launch train.py
机器上有多张显卡:
export CUDA_VISIBLE_DEVICES=1
python -m torch.distributed.launch train.py

 


http://www.ppmy.cn/news/89204.html

相关文章

SpringMVC详情

JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring是业务层的框架,Hibernate和MyBatis是持久层的框架。 为什么要使用SpringMVC? 很多应用程序的问题在于处理业务数…

Spring Cloud Feign 是什么?如何使用它来简化 RESTful 调用?

Spring Cloud Feign 是什么?如何使用它来简化 RESTful 调用? 在分布式系统中,服务之间的通信是非常常见的场景。通常情况下,服务之间的通信是通过 RESTful API 实现的。但是,手动编写 RESTful 调用代码非常繁琐&#…

云渲染平台为什么越来越多的效果图公司开始使用?

随着3dmax版本的不断更迭,包括常用的V-Ray渲染器和Corona渲染器的不断更新,室内设计行业对于 效果图的渲染要求越来越高。而要求更高的渲染精度和更真实的渲染效果,所需要付出的代价则是不断增长的参数,这会使渲染一张效果图的时间…

vscode插件推荐

Vuter vue代码高亮区分VueHelper 代码提示vue3-snippets-for-vscode 生成vue3模板vue3-snippets 生成vue模板Vue VSCode Snippets 生成vue模板Vue Language Features (Volar) vue高亮区分Vue 3 Support - All In One 生成vue模板Vue 2 Snippets 生成vue模板vscode-icons 文件图…

2023-05-26 mysql列存储引擎-外连接相比内连接过于耗时-分析

摘要: 外连接相比内连接过于耗时,本文记录其分析过程 参考: https://en.wikipedia.org/wiki/Venn_diagram 查询SQL 外连接: SELECTa.ROW_IDFROMc1md_bank_acct aLEFT JOIN (SELECTxx.account_id,xx.fiscal_date,xx.balanceFROM(SELECTaccount_id,MAX(fiscal_date) fiscal_da…

C++ 代码整洁之道

NOTICE: 这篇文章的框架条目来自《C代码整洁之道:C17可持续软件开发模式实践》,作者: [德] 斯提芬罗特。书籍原名"Clean C: Sustainable Software Development Patterns and Best Practices with C 17"。 文章目录 编码基本原则保持简单和直接…

三网91话费API接口源码分享

今天给大家分享一个小项目:话费CPS,也就是代充服务。 与我们日常的充值方式(快充)不同,今天要讲的这种充值方式属于“慢充”。 我们平时需要充值的时候,大都是通过微信、支付宝、营业厅等官方渠道进行充值…

虹科干货|创新求变:虹科Redis企业版数据库驱动金融实时业务

BDO调查显示,43%的金融企业正计划全力加速数字化转型,互联网巨头与金融科技初创公司正在颠覆传统。”与此同时,客户行为、消费习惯和期望持续变化,以客户为中心的快速金融服务已成趋势,企业微服务、云原生应用亟需一组…