Pytorch:多GPU训练网络与单GPU训练网络保存模型的区别

分类专栏: PyTorch

  • 测试环境:Python3.6 + Pytorch1.1

在pytorch中,使用多GPU训练网络需要用到 【nn.DataParallel】:

 
  1. gpu_ids = [0, 1, 2, 3]

  2. device = t.device("cuda:0" if t.cuda.is_available() else "cpu") # 只能单GPU运行

  3. net = LeNet()

  4. if len(gpu_ids) > 1:

  5. net = nn.DataParallel(net, device_ids=gpu_ids)

  6. net = net.to(device)

而使用单GPU训练网络:

 
  1. device = t.device("cuda:0" if t.cuda.is_available() else "cpu") # 只能单GPU运行

  2. net = LeNet().to(device)

由于多GPU训练使用了 nn.DataParallel(net, device_ids=gpu_ids) 对网络进行封装,因此在原始网络结构中添加了一层module。网络结构如下:

 
  1. DataParallel(

  2. (module): LeNet(

  3. (conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))

  4. (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))

  5. (fc1): Linear(in_features=400, out_features=120, bias=True)

  6. (fc2): Linear(in_features=120, out_features=84, bias=True)

  7. (fc3): Linear(in_features=84, out_features=10, bias=True)

  8. )

  9. )

而不使用多GPU训练的网络结构如下:

 
  1. LeNet(

  2. (conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))

  3. (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))

  4. (fc1): Linear(in_features=400, out_features=120, bias=True)

  5. (fc2): Linear(in_features=120, out_features=84, bias=True)

  6. (fc3): Linear(in_features=84, out_features=10, bias=True)

  7. )

由于在测试模型时不需要用到多GPU测试,因此在保存模型时应该把module层去掉。如下:

 
  1. if len(gpu_ids) > 1:

  2. t.save(net.module.state_dict(), "model.pth")

  3. else:

  4. t.save(net.state_dict(), "model.pth")

 

参考 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值