pytorch支持单机多卡和多机多卡

本文介绍了PyTorch中两种实现单机多卡和多机多卡训练的方法。nn.DataParallel适用于简单并行,但存在GPU利用率低和负载不均衡的问题。而DistributedDataParallel通过多进程解决了这些问题,提供了更同步的分布式运算,避免了超时问题,适合大规模分布式训练。
摘要由CSDN通过智能技术生成

1.单机多卡(单进程多线程)
第一种方法是nn.DataParallel(model, device_ids=devices, output_device=devices[0])

伪代码
devices = cudeviceutil.auto_alloc_device()
nn.DataParallel(model, device_ids=devices, output_device=devices[0])

将模型在devices中的所有GPU卡上进行模型训练,并在ouput_device上进行模型平均操作。

本方法的优缺点是:在各个GPU卡上的权重更新是相互独立的,需要等所有卡上的任务都完成后才能在output_device上进行模型平均操作。优点是:操作简单;缺点是:GPU卡之间需要相互等待,所以训练速度不快,GPU利用率比较低

这种方法在实现时是将模型放置在主GPU上,然后对它进行复制到其他GPU卡上,同时也是在主GPU上将数据拆分成多分,分发到其他GPU卡上,最终待这个batch的数据在各个GPU卡上都处理完之后,在主GPU卡上进行模型更新。因此需要将单机单卡的batchsize放大为n倍(n为使用的卡数),同时由于batchsize增大后模型收敛速度会变慢,需要将学习率适当调整放大一些

在训练过程中,一直是在主GPU卡上进行loss反向回传更新模型参数,之后将新的模型参数再分发到各个GPU卡上,继续进行下一个batch的forward,然后将所有机器上的loss汇总到主GPU卡上进行参数更新。即多个GPU卡只是加速了forward计算,模型迭代更新还是在一张卡上进行的。还是一组模型参数

由于数据分发和模型参数更新均在主GPU卡上进行,因此

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值