请问下,设置总batchsize为 每个机器的batchsize乘以GPU个数 的相关核心代码是哪里?
Closed this issue · 4 comments
guotong1988 commented
haoyuhu commented
@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
guotong1988 commented
谢谢,谢谢!
核心是哪些行代码决定有这样的分发机制的?
haoyuhu commented
谢谢,谢谢!
核心是哪些行代码决定有这样的分发机制的?
本质上是利用MirroredStrategy
数据并行的同步式分布式策略。
MirroredStrategy
的步骤如下:
- 训练开始前,该策略在所有N个计算设备上均各复制一份完整的模型;
- 每次训练传入一个批次的数据时,将数据分成N份,分别传入N个计算设备(即数据并行);
- N个计算设备使用本地变量(镜像变量)分别计算自己所获得的部分数据的梯度;
- 使用分布式计算的All-reduce操作,在计算设备间高效交换梯度数据并进行求和,使得最终每个设备都有了所有设备的梯度之和;
- 使用梯度求和的结果更新本地变量(镜像变量);
- 当所有设备均更新本地变量后,进行下一轮训练(即该并行策略是同步的)。
默认情况下,TensorFlow中的MirroredStrategy
策略使用NVIDIA NCCL进行All-reduce操作。
guotong1988 commented
THX