Centos环境下使用tensorflow2.0分布式训练

Centos环境下使用tensorflow2.0分布式训练

单机多卡训练

由于一台服务器上配置多个显卡,而在运行tensorflow代码时默认调用第一张显卡,使得其余显卡处于空闲状态,无法充分利用显卡造成速度过慢,内存过小等问题。
在tensorflow2.0中tf.distribute.MirroredStrategy可支持多个 GPU 在同一台主机上训练,使用这种策略时,我们只需实例化一个 MirroredStrategy 策略:

batch_size_per_replica = 16
strategy = tf.distribute.MirroredStrategy()
print('Number of devices: %d' % strategy.num_replicas_in_sync)  # 输出设备数量
batch_size = batch_size_per_replica * strategy.num_replicas_in_sync

虽然机器依然具有 2 块显卡,但程序不使用分布式的设置,直接进行训练,Batch Size 设置为 32。使用单机四卡时,测试总 Batch Size 为 32(分发到单台机器的 Batch Size 为 16)和总 Batch Size 为 64(分发到单台机器的 Batch Size 为 32)两种情况。
MirroredStrategy 过程简介

  • 训练开始前,该策略在所有 N 个计算设备上均各复制一份完整的模型;
    每次训练传入一个批次的数据时,将数据分成 N 份,分别传入 N 个计算设备(即数据并行);
  • N 个计算设备使用本地变量(镜像变量)分别计算自己所获得的部分数据的梯度;
  • 使用分布式计算的 All-reduce 操作,在计算设备间高效交换梯度数据并进行求和,使得最终每个设备都有了所有设备的梯度之和;
  • 使用梯度求和的结果更新本地变量(镜像变量);
  • 当所有设备均更新本地变量后,进行下一轮训练(即该并行策略是同步的)。
  • 默认情况下,TensorFlow 中的 MirroredStrategy 策略使用 NVIDIA NCCL 进行 All-reduce 操作。
    总的来说:数据并行,模型并行
发布了56 篇原创文章 · 获赞 1 · 访问量 1681

猜你喜欢

转载自blog.csdn.net/weixin_44549556/article/details/105084519
今日推荐