Spec-Zone.ru › TensorFlow 2.9

tf.compat.v1.distribute.ReplicaContext

Класс с набором API, который можно вызвать в контексте реплики.

tf.compat.v1.distribute.ReplicaContext(
    strategy, replica_id_in_sync_group
)

Вы можете использовать tf.distribute.get_replica_context, чтобы получить экземпляр ReplicaContext, который можно вызвать только внутри функции, переданной в tf.distribute.Strategy.run.

strategy = tf.distribute.MirroredStrategy(['GPU:0', 'GPU:1'])
def func():
  replica_context = tf.distribute.get_replica_context()
  return replica_context.replica_id_in_sync_group
strategy.run(func)
PerReplica:{
  0: <tf.Tensor: shape=(), dtype=int32, numpy=0>,
  1: <tf.Tensor: shape=(), dtype=int32, numpy=1>
}
Аргументы
strategy tf.distribute.Strategy.
replica_id_in_sync_group Целое число, Tensor или None. Предпочтительно использовать целое число, чтобы избежать проблем с вложенными tf.function. Принимает Tensor только для совместимости с tpu.replicate.
Атрибуты
devices Возвращает устройства, на которых должна выполняться эта реплика, в виде кортежа строк. (устарело)
Устарело: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Пожалуйста, избегайте использования свойства devices.
Примечание: Для tf.distribute.MirroredStrategy и tf.distribute.experimental.MultiWorkerMirroredStrategy это возвращает вложенный список строк устройств, например, [["GPU:0"]].
num_replicas_in_sync Возвращает количество реплик, которые синхронизированы.
replica_id_in_sync_group Возвращает идентификатор реплики.

Это идентифицирует реплику среди всех реплик, которые синхронизированы. Значение идентификатора реплики может изменяться от 0 до tf.distribute.ReplicaContext.num_replicas_in_sync - 1.

Примечание: Это не гарантирует, что это будет тот же идентификатор, что и идентификатор реплики XLA, используемый для низкоуровневых операций, таких как collective_permute.
strategy Текущий объект tf.distribute.Strategy.

Методы

all_reduce

Просмотреть исходный код

all_reduce(
    reduce_op, value, options=None
)

Выполняет всеобщее сокращение value по всем репликам.

strategy = tf.distribute.MirroredStrategy(["GPU:0", "GPU:1"])
def step_fn():
  ctx = tf.distribute.get_replica_context()
  value = tf.identity(1.)
  return ctx.all_reduce(tf.distribute.ReduceOp.SUM, value)
strategy.experimental_local_results(strategy.run(step_fn))
(<tf.Tensor: shape=(), dtype=float32, numpy=2.0>,
 <tf.Tensor: shape=(), dtype=float32, numpy=2.0>)

Поддерживает пакетные операции. Вы можете передать список значений, и он попытается их объединить, когда это возможно. Вы также можете указать options для указания желаемого поведения объединения, например, объединить значения в несколько пакетов, чтобы они лучше перекрывались с вычислениями.

strategy = tf.distribute.MirroredStrategy(["GPU:0", "GPU:1"])
def step_fn():
  ctx = tf.distribute.get_replica_context()
  value1 = tf.identity(1.)
  value2 = tf.identity(2.)
  return ctx.all_reduce(tf.distribute.ReduceOp.SUM, [value1, value2])
strategy.experimental_local_results(strategy.run(step_fn))
([<tf.Tensor: shape=(), dtype=float32, numpy=2.0>,
<tf.Tensor: shape=(), dtype=float32, numpy=4.0>],
[<tf.Tensor: shape=(), dtype=float32, numpy=2.0>,
<tf.Tensor: shape=(), dtype=float32, numpy=4.0>])

Обратите внимание, что все реплики должны участвовать в общем сокращении, в противном случае эта операция зависнет. Обратите внимание, что если есть несколько общих сокращений, они должны выполняться в одном и том же порядке на всех репликах. Планирование общих сокращений на основе условий обычно чревато ошибками.

Известное ограничение: если value содержит tf.IndexedSlices, попытка вычислить градиент по value приведет к ошибке.

В настоящее время этот API можно вызывать только в контексте реплики. Другие варианты для уменьшения значений по репликам:

  • tf.distribute.StrategyExtended.reduce_to: API для сокращения и общего сокращения в контексте между репликами.
  • tf.distribute.StrategyExtended.batch_reduce_to: API для пакетного сокращения и общего сокращения в контексте между репликами.
  • tf.distribute.Strategy.reduce: более удобный метод для сокращения до хоста в контексте между репликами.
Аргументы
reduce_op Значение tf.distribute.ReduceOp, определяющее, как следует объединять значения. Допускается использование строкового представления перечисления, например, "SUM", "MEAN".
value Возможно вложенная структура tf.Tensor или tf.IndexedSlices, которую принимает tf.nest.flatten. Структура и формы value должны быть одинаковыми на всех репликах.
options tf.distribute.experimental.CommunicationOptions. Параметры для выполнения коллективных операций. Это переопределяет значения по умолчанию, если tf.distribute.Strategy принимает его в конструкторе. Подробности о параметрах см. в tf.distribute.experimental.CommunicationOptions.
Возвращает
Вложенная структура tf.Tensor со значениями, уменьшенными по всем репликам. Структура совпадает со структурой value.

merge_call

Просмотреть исходный код

merge_call(
    merge_fn, args=(), kwargs=None
)

Объединяет аргументы по репликам и выполняет merge_fn в контексте между репликами.

Это позволяет осуществлять коммуникацию и координацию, когда несколько вызовов step_fn вызваны вызовом strategy.run(step_fn, ...).

См. tf.distribute.Strategy.run для объяснения.

Если не внутри распределённого контекста, эквивалентно:

strategy = tf.distribute.get_strategy()
with cross-replica-context(strategy):
  return merge_fn(strategy, *args, **kwargs)
Аргументы
merge_fn Функция, объединяющая аргументы из потоков, которые передаются как PerReplica. Она принимает объект tf.distribute.Strategy в качестве первого аргумента.
args Список или кортеж позиционных аргументов для merge_fn каждого потока.
kwargs Словарь с ключевыми аргументами для merge_fn каждого потока.
Возвращает
Возвращаемое значение merge_fn, за исключением значений PerReplica которые распаковываются.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/compat/v1/distribute/ReplicaContext

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API