haoyuhu/bert-multi-gpu

请问下,设置总batchsize为 每个机器的batchsize乘以GPU个数 的相关核心代码是哪里?

Closed this issue · 4 comments

@haoyuhu 多谢多谢多谢!

TensorFlow 1.15

包括设置完之后自动分发的逻辑,比如设置batchsize为32,有4个GPU,哪些代码设置自动分发8到每个GPU

@haoyuhu 多谢多谢多谢!

TensorFlow 1.15

包括设置完之后自动分发的逻辑,比如设置batchsize为32,有4个GPU,哪些代码设置自动分发8到每个GPU

不需要手动设置总batch size。只需要在入口脚本指定train_batch_size即可。
比如入口脚本指定train_batch_size为8,GPU总数为4,则总batch size就是32。
参考:https://github.com/HaoyuHu/bert-multi-gpu#features

谢谢,谢谢!
核心是哪些行代码决定有这样的分发机制的?

谢谢,谢谢!
核心是哪些行代码决定有这样的分发机制的?

本质上是利用MirroredStrategy数据并行的同步式分布式策略。

MirroredStrategy的步骤如下:

  • 训练开始前,该策略在所有N个计算设备上均各复制一份完整的模型;
  • 每次训练传入一个批次的数据时,将数据分成N份,分别传入N个计算设备(即数据并行);
  • N个计算设备使用本地变量(镜像变量)分别计算自己所获得的部分数据的梯度;
  • 使用分布式计算的All-reduce操作,在计算设备间高效交换梯度数据并进行求和,使得最终每个设备都有了所有设备的梯度之和;
  • 使用梯度求和的结果更新本地变量(镜像变量);
  • 当所有设备均更新本地变量后,进行下一轮训练(即该并行策略是同步的)。

默认情况下,TensorFlow中的MirroredStrategy策略使用NVIDIA NCCL进行All-reduce操作。

REF: https://tf.wiki/zh_hans/appendix/distributed.html