多GPU分布式训练笔记

关于pytorch多GPU分布式训练

数据并行:把数据分成不同份数放在不同的GPU上面去跑:


单机单卡:

torch.cuda.is_avliable()
    模型拷贝:model.cuda --->原地操作不用赋值,data = data.cuda()
    torch.save 模型、优化器、其他变量

#单机多卡:

torch.nn.DataParallel 单进程 直接包裹model
model = DataParallel(model.cuda(),device_ids=[0,1,2])
data = data.cuda
缺点单进程,效率低不支持多机的情况,不支持模型并行

#torch.nn.parallel.DistributedDataParallel()
多进程多卡训练,效率高

 加载torch.load(file.pt,map_location =     torch.divice("cuda"/"cuda:0"/"cpu") --->当有多个gpu时可以指定在哪个GPU上运行
 检测电脑GPU的个数:torch.cuda.device_count() 可以通过命令行来限制显卡的使用个数 CUDA_VIDSIBLE_DEVICES=“” 
也可以调用库函数:os.environ["CUDA_VIDSIBLE_DEVICES"]="0" 表示只在0号GPU跑
在train函数里面 model.cuda


代码流程:
torch.distirbuted.init_process_group(“nccl“,word_size=n_gpus,rank = args.local_rank)

torch.cuda.set_device(args.loacl_rank)改语句作用相当于CUDA_VISIBLE_DEVICES环境变量
model= DistributedDataParallel(model.cuda(args.local_rank),device_ids=[args.local_rank])

train_sampler = DistributedSampler(train_dataset) 源码位于torch/utils/data/distributed.py

trian_dataloader = DataLoader(...sampler=train_sampler)
data = data.cuda(args.local_rank)

在训练和预测的时候,我们将一小批量计算切分到多个gpu上来达到加速目的

数据并行:将小批量分成n块每份gpu拿到完整的参数计算一块数据的梯度

模型并行:当模型很大时单GPU放不下时 缺点当GPU0计算时GPU1处于空闲状态
通道并行

当一个模型能单卡计算时,通常用数据并行拓展到多卡上
模型并行一般使用在大模型,模型并行程度很低
要是用多GPU实现训练,需要将参数放在GPU上

多机多卡(一般数据量特别大的时候使用)

模型并行:不同模块放在不同的GPU上跑 跑完在去另外一个GPU跑

train_sampler的作用:将dataset种不同的样本分配到不同的GPU上
sampler和shufflu是冲突的
world_size表示当前节点需要用到几个GPU
argparse这个库可以从命令行接受参数

要是用多GPU实现训练,需要将参数放在GPU上

allreduce(data) 在所有的gpu上有梯度 将所有梯度相加,再将结果发送回去 --》data是一个list

分配小批量 : nn.parallel.scatter(data,device)这里会将数据均匀的分配到每一个设备上

split_batch(x,y,device) 
将x,y拆分不到不同的设备上
backward 对每一个GPU都做 通讯之后每个gpu上的梯度是总和

正则理论上能够提升精度

分布式训练:
    多个服务器多个worker
     每个服务器对梯度求和,并更新参数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值