python -m torch.distributed.launch --nproc_per_node=8

一、

多GPU启动指令:python -m torch.distributed.launch --nproc_per_node=8 --use_env train_multi_gpu_using_launch.py,指令,nproc_per_node参数为使用GPU数量 。我们使用了use_env传入了这个参数,它就会在环境变量中存入一系列参数,包括RANK,WORLD_SIZE,LOCAL_RANK

二、

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对应一个进程

 三、

多机多卡 的分布式
在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
 

五、

大家使用的服务器中有多个GPU,而这个大服务器又在被很多人使用,比如你的课题组的同学。

为了资源合理分配,不占用别人正在使用的GPU,我们可以指定自己要使用的GPU组(也就是在你的代码中使用的某一个或某几个GPU),这样就很有效的避免了GPU的资源占用,实现资源的最大化,也不用因为占用特别大的GPU被课题组的“拉黑举报”了!HHH~~~

选择特定的GPU组运行程序可在程序运行命令前,如【train.py】开头部分使用如下命令:

CUDA_VISIBLE_DEVICES=0
0为服务器中的GPU编号,可以为0, 1, 2, 3等,表明对该程序LInux服务器可见的GPU编号。
 

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值