如何解决TensorFlow的镜像策略,批量大小和反向传播
我正在处理多GPU服务器上的神经网络训练。我正在使用TensorFlow 2.1中的MirroredStrategy API,但感到有点困惑。
我有8个GPU(Nvidia V100 32GB)
- 我指定的批处理大小为32(如何管理?每个gpu将有一批32个样本?我应该将256指定为批处理大小-32x8-吗?)
- 何时以及如何应用反向传播?我已经了解到MirroredStrategy是同步的:这是否意味着在向前执行步骤之后,所有批次都被分组为一个大小为32x8的批次,并且在应用了反向传播之后?还是按顺序将Back-prop应用于每批大小为32的批次?
我真的想确定我要提交给服务器的哪种实验,因为每项训练工作实际上都很耗时,并且根据可用GPU的数量更改批处理大小(以及反向支持)会影响结果的正确性
感谢您提供的任何帮助。
解决方法
使用MirroredStrategy时,批次大小是指全局批次大小。 You can see in the docs here
例如,如果将MirroredStrategy与2个GPU一起使用,则每批大小为10的批处理将分配给2个GPU,每个步骤在每个步骤中接收5个输入示例。
因此,如果您希望每个GPU每步处理32个样本,则可以将批处理大小设置为32 * strategy.num_replicas_in_sync
。
每个GPU都会在输入数据的不同切片上计算通过模型的正向和反向传递。然后,将这些切片中每个切片计算出的梯度汇总到所有设备上,并以称为AllReduce的过程进行缩减(通常是平均)。然后,优化程序以这些减小的梯度执行参数更新,从而使设备保持同步。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。