深度学习Windows单机多GPU并行

pytorch1.7  win10  两张titan x pascal

一、torch.nn.parallel.DistributedDataParallel
1、接收并行调用传入的参数
    parser = argparse.ArgumentParser()
    parser.add_argument("--local_rank", type=int)
    args = parser.parse_args()
2、设置当前进程GPU
    torch.cuda.set_device(args.local_rank)
3、通讯初始化,Windows pytorch 1.7所用版本不支持NCCL,所以用GLOO,world_size代表进程数量
    torch.distributed.init_process_group(Backend.GLOO, init_method='file:///sharefile', rank=args.local_rank, world_size=2)
4、dataset
    train_dataset = datasets.CIFAR100('./data/CIFAR100', train=True, download=True, transform=transforms.Compose([
        transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]))
    test_dataset = datasets.CIFAR100('./data/CIFAR100', train=False, transform=transforms.Compose([
        transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]))
5、sampler
    train_sampler = torch.utils.data.distributed.DistributedSampler(train_dataset)
    test_sampler = torch.utils.data.distributed.DistributedSampler(test_dataset)
6、loader
    train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=500, shuffle=False, num_workers=2, sampler=train_sampler)
    test_loader = torch.utils.data.DataLoader(test_dataset, 500, shuffle=False, num_workers=2, sampler=test_sampler)
7、device   
device = torch.device("cuda", args.local_rank)
8、model
    model = DigitalNet().to(device)
    model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.local_rank], output_device=args.local_rank)
9、调用,nproc_per_node进程数量,nnodes机子数量
python -m torch.distributed.launch --nproc_per_node=2 --nnodes=1  DigitalNetParallel.py
10、结果

CIFAR100数据集
双卡,batch=500 num_workers=2时,相当于batch=1000,10个epoch用时123.25秒
单卡,batch=1000 num_workers=0时,10个epoch用时174.05秒
双卡,GPU1占用显存6939MB,GPU2占用显存5006MB。
单卡,GPU占用显存8703MB。
双卡速度比单卡快速了41%。

二、torch.nn.DataParallel

CIFAR100数据集
在使用更简单数据并行torch.nn.DataParallel,速度没有提升,小批量还会慢几秒。
if torch.cuda.device_count() > 1:
    model = torch.nn.DataParallel(model, device_ids=[0, 1])

ubuntu 18.4同样硬件条件

通讯使用NCCL

双卡,batch=500 num_workers=2时,相当于batch=1000,10个epoch用时63.33秒

单卡,batch=1000 num_workers=0时,10个epoch用时136.43秒

linux下速度更快。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值