mapillary/inplace_abn

In-Place Activated BatchNorm for Memory-Optimized Training of DNNs

What it solves

InPlace-ABN 减少了训练深层神经网络所需的 GPU 显存。

在标准训练中,框架必须为 Batch Normalization (BN) 的输入以及后续卷积层(Convolution layer)的输入存储大型缓冲区,以便在反向传播过程中计算梯度。InPlace-ABN 消除因此需要存储 BN 输入缓冲区的需求,潜在적으로 可节省高达 memory 50% 的训练显存。

How it works

它将 Batch Normalization 和非线性激活序列重新定义为单个原地操作(in-place operation)。为了避免存储输入缓冲区,BN 的反向传播被重写为使用其输出,该输出是通过通过反转激活函数从后续层的输入中重建的。这需要对 BN 缩放因子的参数化进行特定更改,以确保转换过程是可逆的。

Who it’s for

对于受限于 GPU 显存或希望通过增加批次大小(batch size)来提高性能的研究人员和开发者(例如训练 ResNet、ResNeXt 和 Wide ResNet 等大规模深层学习模型时)。

Highlights

  • Significant Memory Savings: 在现代架构中减少高达 50% 的训练显存使用量。
  • Implied Performance: 使得更大的批次大小成为可能,有助于在 ImageNet、Cityscapes 和 Mapillary Vistas 等基准测试中取得顶尖结果。
  • PyTorch Implementation: 提供高效能的原生 C++/CUDA 实现。
  • Broad Architecture Support: 兼容于各种模型,包括 ResNet、ResNeXt、DenseNet 和 WideResNet。

相关