【tensorflow2.0】48.分布式训练

    在训练神经网络模型时,我们更偏爱大规模的数据集和复杂的网络结构。更大规模的数据集和更复杂的网络结构可以让我们的模型表征能力更强,但同时也对计算的时间和空间提出了挑战。如果我们只用单机单GPU来跑,则会出现一卡有难(运行时间长、显存不足等),十卡围观的状态。很多神经网络库都提供了分布式训练的API,但是如果不了解内在机理,我们仍然很难得到满意的效率和效果。于是,就有了分布式训练。
    tf.distribute.Strategy 是一个用于分布式训练的TensorFlow API ,横跨多GPU、多机器或TPU. 通过这个API,经过少量改造,就可以让现存的模型和训练代码支持分布式训练。他可以被用于高级API如Keras,也可以用于自定义训练循环。
    tf.distribute.Strategy 打算涵盖不同方面的许多用例。目前支持其中一些组合,将来还会添加其他组合。

同步训练与异步训练:这是通过数据并行性分配训练的两种常用方法。在同步训练中,所有工作节点都同步地对输入数据的不同片段进行训练,并在每个步骤中汇总梯度。在异步训练中,所有工作节点都在独立训练输入数据并异步更新变量。通常情况下,同步训练通过全归约(all-reduce)实现,异步训练通过参数服务实现

硬件平台:您可能希望将训练扩展到一台计算机上的多个GPU或网络中的多台计算机(每个具有0个或多个GPU)或Cloud TPU上。

在这里插入图片描述
镜像策略 MirroredStrategy
tf.distribute.MirroredStrategy 支持在单机多GPU上的同步分布式训练. 它在每个GPU设备上创建一个副本. 模型中的每个变量都将在所有副本之间进行镜像。这些变量一起形成一个称为MirroredVariable的概念上的变量。通过应用相同的更新,这些变量彼此保持同步。

高效的归约算法用于在设备之间传递变量更新。全归约通过对不同设备上的张量相加进行聚合, 并使他们在所有设备上可用。这是一种融合算法,非常有效,可以大大减少同步的开销。根据设备之间可用的通信类型,有许多归约算法和实现可用,默认使用NVIDIA NCCL。您可以从我们提供的其他选项中进行选择,也可以自己编写。

#创建MirroredStrategy的最简单的方法
mirrored_strategy = tf.distribute.MirroredStrategy()

#如果只想使用某些GPU,可以这样做
mirrored_strategy = tf.distribute.MirroredStrategy(devices=["/gpu:0", "/gpu:1"])


中央存储策略 CentralStorageStrategy
tf.distribute.experimental.CentralStorageStrategy也执行同步训练,但是变量不会被镜像,而是放在CPU上。各操作(operation)在本地GPU之间复制进行。如果只有一个GPU,变量和操作都会放在GPU上。

#创建一个 CentralStorageStrategy 实例
central_storage_strategy = tf.distribute.experimental.CentralStorageStrategy()

多节点镜像策略 MultiWorkerMirroredStrategy
tf.distribute.experimental.MultiWorkerMirroredStrategy 实现了跨节点(worker)的同步分布式训练,每个节点可能有多个GPU。 类似于 MirroredStrategy, 它会在所有节点的每个设备(CPU/GPU)上的模型中创建所有变量的副本。

它使用集合运算(CollectiveOps)作为多节点的全归约通信方法,用于使变量保持同步。集合运算是TensorFlow图中的单个运算,它可以根据硬件、网络拓扑和张量大小在TensorFlow运行时中自动选择归约算法。

它还实现了其他性能优化。例如静态优化:该将小张量的多个全归约,转换为大张量的较少的全归约。另外,我们正在为它设计插件架构——以便将来您将能够为您的硬件调整更好的插件算法。集合运算还实现了其它并行算法需要的操作,比如广播和all-gather。

#创建 MultiWorkerMirroredStrategy 最简单的办法
multiworker_strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值