语义分割分布式训练小结

借鉴文档

https://blog.csdn.net/weixin_44966641/article/details/121872773
https://zhuanlan.zhihu.com/p/373395654

基础概念

group: 进程组,大部分情况下,ddp的各个进程都是在一个group下面。
world_size:总的进程数量,一般一个进程占用一个GPU。
rank: 当前进程的序号,用于进程之间的通信,rank=0的主机为master节点。
local_rank:当前进程对应的gpu号。

例如:
单机8卡分布式训练,worldsize=8,rank和localrank分别都是0-7。
双机16卡分布式训练,每台机器8卡,worldsize=16,rank编号为0-15,但是localrank还是0-7(对应的是单个gpu上)。

实操第一步

1.1 初始化进程组

rank = int(os.environ['RANK'])
local_rank =  int(os.environ['LOCAL_RANK'])
args.world_size =  int(os.environ['WORLD_SIZE'])
torch.cuda.set_device(local_rank)
torch.distributed.init_process_group(backend="nccl",world_size=args.world_size,rank=rank)

1.2:打印信息太多太乱,只打印主进程信息
增加函数

def setup_for_distributed(is_master):
	import builtins as __builtin__
	builtin_print = __builtin__.print
def print(*args,**kwargs):
	if is_master:
		builtin_print (*args,**kwargs)
		torch.distributed.barrier()
		setup_for_distributed(rank==0)

第二步
###修改model和dataloader的设置

from torch.utils.data.distributed import DistributedSampler
from torch.nn.parallel import DistributedDataParallel

###模型修改

model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model)#不转换的话测试时会产生4个模型和结果
model.to(local_rank)
model=torch.nn.parallel.DistributedDataParallel(model)

###采样修改

train_sampler = DistributedSampler(train_dataset) # 这个sampler会自动分配数据到各个gpu上
train_loader = DataLoader(train_dataset, batch_size=batch_size, sampler=train_sampler)#如果原始DataLoader里面有shuffle=True的话改成False,应为distributed——sample默认为True,导致冲突。

###记得在训练过程中加入set_epoch

for epoch in range(start_epoch,max_epoch):
    train_sample = set_epoch(epoch)

第三步:运行:
在运行中需要用torch.distributed.launch为每台主机上创建多进程,例如

python -m torch.distributed.launch --nproc_per_node=8 --use_env trian.py**
  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值