Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour with Batch Normalization

2018 多 GPU 稠密训练 被引用 53 次
下载 PDF

Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour with Batch Normalization - 中文验证版

英文原文卡片:sync_batchnorm_2018.md

状态:已翻译。

元数据

  • Slug: sync_batchnorm_2018
  • 年份: 2018
  • 会议: 队列重复/来源覆盖
  • 作者: Priya Goyal et al.
  • 阅读状态: read complete, duplicate source
  • 计算范式: 多 GPU 密集训练
  • 主要来源: PDF抽取文本

计算设置

本卡片是一小时 ImageNet 论文的重复/来源覆盖行,而非独立的 SyncBatchNorm 论文。来源明确描述了硬件:Facebook Big Basin 服务器,每台配备 8 块由 NVIDIA NVLink 连接的 NVIDIA Tesla P100 GPU、3.2TB NVMe SSD 本地存储、一块 Mellanox ConnectX-4 50Gbit 以太网卡和 Wedge100 以太网交换机。主要结果扩展到 256 块 GPU,即 32 台 Big Basin 服务器,论文还报告了 352 块 GPU 的时间点。

训练工作负载是 ImageNet 上的 ResNet-50:约 1.28M 训练图像、50000 张验证图像、90 个 epoch 以及 Nesterov 动量。基线使用一台服务器中的 8 块 GPU,每 GPU 32 张图像,总 minibatch 为 256,参考学习率为 0.1。大规模运行保持每 GPU 32 张图像,将 worker 数量增加到 256,得到总 minibatch 8192 和参考学习率 3.2。

瓶颈

瓶颈是在非常大的 minibatch 规模下的分布式同步 SGD。为扩展数据并行,每个 worker 需要足够的本地计算来隐藏通信;但增加总 batch 可能改变优化行为。论文主张,对于 ImageNet 最高到 8k 图像,主要问题是早期优化而非内在的泛化损失,前提是实现保留了正确的训练目标。

批量归一化是核心。BN 统计量依赖于每 worker 的 minibatch size n,因此改变 n 会改变损失函数。因此论文保持 n = 32 并通过增加 worker 数量来扩展。它明确表示 BN 统计量不应跨所有 worker 计算,这不仅是为了减少通信,也是为了保持相同的底层损失函数。这与全局 SyncBatchNorm 相反:本地 BN 是方法正确性论证的一部分。

通信仍然相当可观。ResNet-50 有约 25M 参数,即 FP32 下 100MB。论文估算单 P100 的反向传播为 120ms,allreduce 大约需要 2 倍字节,导致约 12.8Gbit/s 峰值带宽,或含开销约 15Gbit/s。因此,如果 allreduce 与反向传播做流水化,50Gbit 以太网是足够的。

方法适配

主要的算法适配是线性缩放规则:当总 minibatch 增长 k 倍而每 worker batch 保持固定时,学习率按 k 缩放。对于 8192 张图像,参考学习率为 0.1 乘以 8192/256 = 3.2。第二个适配是渐进预热:从小 batch 学习率开始,在 5 个 epoch 内线性增加到缩放后的学习率。这防止了权重快速变化时的早期不稳定。

实现细节也是计算结构适配。损失归一化必须使用总 minibatch 大小,因为 allreduce 原语默认求和而非平均。如果使用学习率被吸收到动量缓冲区的变体,则需要进行动量校正。数据打乱必须是每 epoch 一个随机顺序在 worker 间划分,否则多 worker 打乱会改变行为。

通信栈使用三个阶段:将本地 8 块 GPU 的梯度归约到一个服务器缓冲区,跨服务器进行 allreduce,然后广播回本地 GPU。NCCL 处理至少 256KB 缓冲区大小的服务器内部集合操作,Gloo 实现服务器间的 allreduce。论文比较了减半/加倍和环形式 allreduce,发现在 32 台服务器上对于相关缓冲区大小,减半/加倍比环形快 3 倍。本地归约、跨服务器 allreduce 和广播在可能的情况下被 pipeline 化。

证据

论文的标题性结果是 ResNet-50 在 256 块 GPU 上以 minibatch 8192 在一小时内完成训练,同时匹配小 batch 准确率。基线 256-minibatch 运行在 5 次运行中 top-1 验证错误率为 23.60%,标准差为 0.12。无预热的 8k 运行较差,为 24.84 +/- 0.37;恒定预热更差,为 25.88 +/- 0.56;渐进预热达到 23.74 +/- 0.09,在基线的 0.14 个百分点以内。

batch size 扫描显示了有用范围。使用线性缩放规则和渐进预热,ImageNet 错误率从 minibatch 64 到 8k 保持稳定,然后上升;超过 64k 时在同一规则下发散。ResNet-101 也可扩展:minibatch 256 给出 22.08 +/- 0.06 top-1 错误率,而 minibatch 8k 给出 22.36 +/- 0.09,增加 0.28 个百分点。ResNet-101 的 8k 运行在 256 块 Tesla P100 GPU 上耗时 92.5 分钟。

迁移证据使用 COCO 上的 Mask R-CNN。使用 minibatch 256、2k、4k 和 8k 的 ResNet-50 ImageNet 预训练均迁移到几乎相同的 box 和 mask AP;16k 模型退化,与其 ImageNet 退化相匹配。Mask R-CNN 训练本身也遵循从 1 到 8 块 GPU 的线性缩放规则,AP 保持稳定。

运行时间证据显示接近线性的扩展。每次迭代的时间仅增加 12%,而总 minibatch 从 256 扩展到 11264,增长 44 倍。每个 ImageNet epoch 的时间从超过 16 分钟降至 352 块 GPU 下约 30 秒。吞吐量扩展效率约为 90%,大部分 allreduce 通信通过 pipeline 化被隐藏,并在商用以太网上实现。

历史影响

本卡片对计算历史有价值,因为它表明大 batch 训练需要硬件、优化和归一化细节协同配合。这不是一个泛泛的"更多 GPU"故事:每 worker batch size、BN 局部性、预热、allreduce 调度和损失归一化都是结果的一部分。对于 SyncBatchNorm 主题而言,这篇论文是一个反例:它保持 BN 本地化而非全局同步。

局限

这不是一个独立的 SyncBatchNorm 来源,应在高层摘要中与 ImageNet 一小时卡片合并。成功的范式在 ResNet-50/ImageNet 上使用此方案时约在 8k-16k 处有断裂点。通信分析特定于 ResNet-50 大小、P100 计算和 50Gbit 以太网;后来的模型和优化器可能改变瓶颈所在。

链接