![](/img/trans.png)
[英]PyTorch: How do the means and stds get calculated in the Transfer Learning tutorial?
[英]How to train PyTorch transfer learning tutorial with more then 1 GPU
我目前在以下网址关注PyTorch转移学习教程: https ://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html
我已经能够完成教程并在CPU和1个GPU上进行培训。
我正在使用Google Cloud Platform Notebook实例,并使用4个NVIDIA Tesla k80 x 4 GPU。 在多于1个GPU上训练网络时,在这里遇到了服务器连接错误(无效响应:504)错误
model_ft = models.resnet18(pretrained=True)
num_ftrs = model_ft.fc.in_features
model_ft.fc = nn.Linear(num_ftrs, 2)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
## Using 4 GPUs
if torch.cuda.device_count() > 1:
model_ft = nn.DataParallel(model_ft)
model_ft = model_ft.to(device)
criterion = nn.CrossEntropyLoss()
optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)
exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)
model_ft = train_model(model_ft, criterion, optimizer_ft, exp_lr_scheduler, num_epochs=25)
想法是利用数据并行性功能来利用所有可用的GPU(为4)来训练网络。
我在实施中缺少什么,请指教。
谢谢
IMO,最简单的方法就是使用Horovod进行多GPU培训。 这是使用Horovod使用GPU的分布式培训脚本的示例: https : //github.com/horovod/horovod/blob/master/examples/pytorch_mnist.py
您将需要安装OpenMPI (可能已经装在盒子上),并且需要在python环境中pip install horovod
( pip install horovod
完整的安装说明位于https://github.com/horovod/horovod#安装 )。
然后,您将使用horovodrun -np 4 python pytorch_mnist.py
开始工作(以下有关如何开始Horovod运行的文档: https ://horovod.readthedocs.io/en/latest/mpirun.html)
这将使您不仅可以在具有多个GPU的一个节点上进行训练,而且还可以在多个节点上进行训练(例如,在每个具有4个GPU的2个节点上)进行训练。
Horovod进行分布式培训的重点是:
# Horovod: pin GPU to local rank.
torch.cuda.set_device(hvd.local_rank())
torch.cuda.manual_seed(args.seed)
DistributedSampler
用于在不同节点之间划分数据。 hvd.rank()
用于确保每个进程使用不同的数据分区,并且hvd.size()
捕获总共有多少个进程。 train_sampler = torch.utils.data.distributed.DistributedSampler(
train_dataset, num_replicas=hvd.size(), rank=hvd.rank())
DistributedOptimizer
包装您的优化器-将在每个最小批处理的末尾处理跨过程的梯度聚合: # Horovod: wrap optimizer with DistributedOptimizer.
optimizer = hvd.DistributedOptimizer(optimizer,
named_parameters=model.named_parameters(),
compression=compression)
样本中还有一些更有趣的事情(例如,通过数量或过程来提高学习率,从一开始就广播您的参数)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.