pytorch多GPU并行以及注意事项

pytorch多GPU并行方式

1-参数解析

使用argparse进行参数解析,核心参数如下:

import argparse
parser.add_argument("--local_rank", default=0, type=int)
parser.add_argument("--ngpu", default=6, type=int)
args.gpu = args.local_rank
torch.cuda.set_device(args.gpu)
torch.distributed.init_process_group(backend='nccl', init_method='env://')
args.world_size = torch.distributed.get_world_size()

2-使用数据并行

model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.local_rank], output_device= args.local_rank)
# dataset为torch.utils.data.Dataset的实例
train_sampler = torch.utils.data.distributed.DistributedSampler(dataset)
train_loader = torch.utils.data.DataLoader(salobj_dataset, batch_size=batch_size_train, shuffle=(train_sampler is None),
                                           num_workers=4, pin_memory=True, sampler=train_sampler, drop_last=True)

3-保存权重

if args.local_rank == 0:
	torch.save(model.module.state_dict(), 'res.pth')

4-运行程序

pytorch多GPU运行时,有特定的运行命令:

# 6为GPU的总数
python -m torch.distributed.launch --nproc_per_node=6 train.py

5-注意事项

DistributedDataParallel会将model进行封装,容易产生如下两个问题:

  • 在编写GAN模型时,如果要用模型里面的层,需要用model.module.x_layer而不是直接用model.x_layer
  • 想在训练时保存权重,也需要在加载权重时修改权重key的名称,比如将名称由stage1.layer1改为module.stage1.layer1,否则就会出现无法加载的情况(如下图)
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upDiff

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值