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 | Возвращает устройства, на которых будет выполняться эта реплика, в виде кортежа строк. (устарело) Примечание: Для |
num_replicas_in_sync | Возвращает количество реплик, синхронизируемых между собой. |
replica_id_in_sync_group | Возвращает идентификатор реплики. Он определяет реплику среди всех реплик, синхронизируемых между собой. Значение идентификатора реплики находится в диапазоне от 0 до Примечание: Не гарантируется, что этот идентификатор совпадает с идентификатором реплики XLA, используемым для низкоуровневых операций, таких как collective_permute. |
strategy | Текущий объект tf.distribute.Strategy. |
Методы
all_reduce
all_reduce(
reduce_op, value, options=None
)
Выполняет all-reduce для 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>])
Обратите внимание, что все реплики должны участвовать в all-reduce, иначе операция зависнет. Если выполняется несколько операций all-reduce, они должны выполняться на всех репликах в одинаковом порядке. Запуск all-reduce в зависимости от условий обычно чреват ошибками.
Известное ограничение: если value содержит tf.IndexedSlices, попытка вычислить градиент по value приведёт к ошибке.
В настоящее время этот API можно вызывать только в контексте реплики. Другие варианты сведения значений между репликами:
-
tf.distribute.StrategyExtended.reduce_to: API reduce и all-reduce в контексте между репликами. -
tf.distribute.StrategyExtended.batch_reduce_to: пакетный API reduce и all-reduce в контексте между репликами. -
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 в контексте между репликами.
Это позволяет организовать обмен данными и координацию, когда вызов strategy.run(step_fn, ...) приводит к нескольким вызовам 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/api_docs/python/tf/compat/v1/distribute/ReplicaContext