此页面由 Cloud Translation API 翻译。
Switch to English

模块:tf.distribute

TensorFlow 1版

库运行在多个设备上的计算。

这样做的目的这个库的是,你可以写在一个程式化的方式的算法,这将是与各种不同的使用tf.distribute.Strategy实现。每个后代将实施不同的策略分发跨多个设备/机器的算法。此外,这些变化可以具体层和需要特殊处理,在分布式环境运行其他类库里面隐藏,使大多数用户的模型定义代码可以运行不变。该tf.distribute.Strategy API的工作充满渴望和图形执行相同的方式。

指南

教程

词汇表

  • 数据并行是我们运行的输入数据的不同切片模型的多个副本。这是相反的,我们在多个设备上划分模型的一个副本模式并行 。注:我们只支持数据并行现在,但希望在未来增加对模型的并行支持。
  • 装置是一些机器上的CPU或促进剂(例如GPU的,热塑性聚氨酯),其TensorFlow可以运行在操作(参见例如tf.device )。你可能有一台机器上的多个设备,或连接到在多台机器设备。用于运行计算设备被称为工人的设备 。用于存储变量设备参数的设备 。对于一些策略,比如tf.distribute.MirroredStrategy ,工人和参数的设备将是相同的(参见下面的镜像变量)。对于其他人,他们会有所不同。例如, tf.distribute.experimental.CentralStorageStrategy使单个设备(其可以是一个工人设备或者可以是CPU)上的变量,并且tf.distribute.experimental.ParameterServerStrategy提出在不同的机器称为参数服务器变量(参见下面)。
  • 复制品是该模型的一个复制,对输入数据的一个切片运行。现在每个副本是自己的工作设备上执行,但是一旦我们增加对模型的并行支持一个副本可以跨越多个工人的设备。
  • 主机是与工人的装置,通常用于运行输入管道的机器上的CPU的设备。
  • 一名工人被定义为是包含在其上执行所述复制计算的物理设备(例如GPU的,热塑性聚氨酯)的物理机(一个或多个)。一个工人可以包含一个或多个副本,但包含至少一个副本。通常,一个工人将对应于一台机器,但在非常大的模型与模型并行的情况下,一个工人可以跨越多台机器。我们通常运行每个工人一个输入管道,喂养对工人的所有副本。
  • 同步 ,或者更常见的同步 ,训练就是从每个副本的更新,更新模型变量之前聚集在一起。这是相对于异步异步培训,其中每个副本独立更新模型变量。您可能还划分成是同步的各组,但两组间的异步中的组副本。
  • 参数服务器 :这些是保存参数/变量的一个副本,通过一些策略(现在只用机器tf.distribute.experimental.ParameterServerStrategy )。希望对一个变量操作的所有副本在步骤开始检索和发送的步骤结束要应用的更新。这些都可以在priniciple支持两种同步或异步的训练,但现在我们只对异步训练参数服务器的支持。比较tf.distribute.experimental.CentralStorageStrategy ,这使所有的变量在单个装置上的同一台计算机上(和不同步训练),并且tf.distribute.MirroredStrategy ,其反射镜的变量到多个设备(见下文)。

  • 副本背景跨副本背景 VS 更新上下文

    当执行一个被称为具有运算功能的副本背景下适用strategy.run 。从概念上讲,你执行的是被复制的计算功能时是在副本方面。

    更新上下文是在进入tf.distribute.StrategyExtended.update电话。

    当你输入一个输入了跨语境副本 strategy.scope 。这是用于调用有用tf.distribute.Strategy横跨副本进行操作的方法(如reduce_to()默认情况下,你在副本上下文 (“默认单个副本上下文 ”)开始,然后一些方法可以切换你来回。

  • 分布值 :分布式值由基类表示tf.distribute.DistributedValuestf.distribute.DistributedValues是表示在多个设备上的值是有用的,并且它包含从复制品ID映射到的值。两个有代表性的各类tf.distribute.DistributedValues是“PerReplica”和“镜像”值。

    “PerReplica”值上的工人设备存在,与对每个副本不同的值。它们是由通过返回的分布式数据集进行迭代产生tf.distribute.Strategy.experimental_distribute_datasettf.distribute.Strategy.experimental_distribute_datasets_from_function 。他们还通过返回的典型结果tf.distribute.Strategy.run

    “镜像”的值,如“PerReplica”的价值观,但我们知道,在所有副本的值是相同的。我们可以通过使用任何复制品的价值安全地读取在跨副本背景下,“镜像”值。

  • 解缠合并 :考虑调用一个函数fn上的多个复制品,像strategy.run(fn, args=[w])用自变量w这是一个tf.distribute.DistributedValues 。这意味着w将有一个地图采取复制品ID 0w0 ,复制品ID 1w1strategy.run()解开w之前调用fn ,所以它调用fn(w0)在设备d0fn(w1)上设备d1等,然后合并来自返回值fn()这导致了一个共同的目的,如果所返回的值是从每个副本相同的对象,或DistributedValues否则对象。

  • 减少全减少 :的减少是聚集多个值成一个值,例如“总和”或“平均”的方法。如果一个策略是做同步训练,我们将在应用更新之前执行的梯度,从所有副本的参数减少。 所有减少-是用于执行从多个设备上的值的降低,使在所有这些装置的可用结果的算法。

  • 镜像变量 :这些是在多个设备上,我们通过将相同的更新,每一个副本保持变量同步创建的变量。反映变量与创建tf.Variable(...synchronization=tf.VariableSynchronization.ON_WRITE...)通常情况下,他们在同步训练才能使用。

  • SyncOnRead变量

    SyncOnRead变量由创建tf.Variable(...synchronization=tf.VariableSynchronization.ON_READ...)并且它们在多个设备上创建的。在复制品上下文中,在本地复制品的每个组件变量可以执行读取和不相互同步写入。当SyncOnRead可变横复制品上下文被读取时,从组件的变量的值被聚集并返回。

    SyncOnRead变量带来大量的自定义配置的难度底层逻辑,所以我们不鼓励用户实例化并使用SyncOnRead可变自己。我们主要使用SyncOnRead变量使用情况,如批量规范和指标。出于性能方面的原因,我们往往不需要保持同步的每一步,这些统计数据,他们可以在每个副本分别进行累积。我们希望同步他们的唯一时间是报告或检查点,这通常发生在跨副本背景。 SyncOnRead变量也经常使用谁想要当变量值合计控制的高级用户。例如,用户有时希望独立维护每个副本对于没有聚集几个步骤梯度。

  • 分发感知层

    层通常被称为在一个复制品上下文,定义Keras功能模型时除外。 tf.distribute.in_cross_replica_context会让你确定你是在这种情况下,如果在副本背景下, tf.distribute.get_replica_context函数会返回一个战略范围之外的默认副本背景下, None一个战略范围之内,并且tf.distribute.ReplicaContext策略范围内和一个内对象tf.distribute.Strategy.run功能。该ReplicaContext对象具有all_reduce的所有副本聚合方法。

请注意,我们提供的默认版本tf.distribute.Strategy如果没有其他策略是在范围上即用,即能以合理的默认行为相同的API。

模块

cluster_resolver模块:库进口ClusterResolvers。

experimental模块:实验分销策略库。

class CrossDeviceOps :用于跨设备减少和广播算法的基类。

class DistributedDataset :代表设备和机器之间分布的数据集。

class DistributedIterator :在一个迭代tf.distribute.DistributedDataset

class DistributedValues :用于表示分布的值的基类。

class HierarchicalCopyAllReduce :采用分层副本还原所有减少。

class InputContext :由输入函数需要一个类包装的信息。

class InputOptions :运行选项experimental_distribute_dataset(s_from_function)

class InputReplicationMode :用于输入功能的复制模式。

class MirroredStrategy :一台机器上跨多个副本同步训练。

class NcclAllReduce :使用NCCL全降低减少。

class OneDeviceStrategy :一台设备上运行的分销策略。

class ReduceOp :指示一组值应减少。

class ReductionToOneDevice :始终做到减少到一台设备,然后再做广播。

class ReplicaContexttf.distribute.Strategy副本中上下文时API。

class RunOptions :用于运行选项strategy.run

class Server :一个进程TensorFlow服务器,用于分布式训练中使用。

class Strategy :状态和计算分配政策的设备列表上。

class StrategyExtended :对于需要为配送感知算法额外的API。

class TPUStrategy :对的TPU和TPU荚同步训练。

功能

experimental_set_strategy(...)设置一个tf.distribute.Strategy作为当前没有with strategy.scope()

get_replica_context(...)返回当前tf.distribute.ReplicaContextNone

get_strategy(...)返回当前tf.distribute.Strategy对象。

has_strategy(...)返回如果当前的非默认tf.distribute.Strategy

in_cross_replica_context(...)返回True如果跨副本背景。