DataParallel下的Batch Normalization

DP简介

在训练模型的时候,nn.DataParallel函数可以用多个GPU实现加速训练,它基于单进程多卡,所有的卡都参与并行运算,其中主卡device[0]负责整合梯度、更新参数。

DataParallel简称DP,它不支持SyncBN(即同步BN),同步BN只在DataDistributedParallel(DDP)中才支持。具体有没有必要使用SyncBN,要看单卡batch size的数量大小:如果单卡batch size太小,使用SyncBN可以提高性能;如果batch size较大的时候不需要使用SyncBN,因为同步时GPU之间的通信会导致训练速度变慢。

DP中的BN与DDP支持的SyncBN

当使用 torch.nn.DataParallel 将代码运行在多张 GPU 卡上时,PyTorch 的 BN 层是非同步的,默认操作是各卡上数据独立地计算均值和标准差,并在单卡上维护自己的参数,只在每一个GPU上对样本进行归一化,相当于减少了batch size的大小,训练的时候实际的 BN 层的 batch-size 为 B a t c h S i z e G P U 数 量 \frac{BatchSize}{GPU数量} GPUBatchSize

SyncBN的意思是每张卡上使用相同的统计量:均值( μ \mu μ)和方差( σ 2 \sigma^2 σ2)。同步 BN 使用所有卡上的数据(全局样本数据)一起计算 BN 层的均值和标准差,缓解了当批量大小(batch size)比较小时对均值和标准差估计不准的情况,是在目标检测等任务中一个有效的提升性能的技巧。
本段参考链接

Pytorch多GPU的计算和Sync BatchNorm
同步BN数学计算方法参考
github上实现的适用于DP的SyncBN代码参考
PyTorch 源码解读之 DP & DDP:模型并行和分布式训练解析
[原创][深度][PyTorch] DDP系列第三篇:实战与技巧
PyTorch 单机多卡操作总结:分布式DataParallel,混合精度,Horovod)
PyTorch DistributedDataParallel 单机多卡训练 踩坑记录
神器:多卡同步的Batch Normalization

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值