tf.distribute.experimental.CommunicationOptions
Параметры для межпроцессорной коммуникации, например, All-reduce.
tf.distribute.experimental.CommunicationOptions(
bytes_per_pack=0,
timeout_seconds=None,
implementation=tf.distribute.experimental.CollectiveCommunication.AUTO
)
Это можно передать в методы, такие как tf.distribute.get_replica_context().all_reduce() для оптимизации производительности коллективных операций. Обратите внимание, что это только подсказки, которые могут или не могут изменить фактическое поведение. Некоторые параметры применяются только к определённой стратегии и игнорируются другими.
Одной из распространённых оптимизаций является разделение операции all-reduce для градиентов на несколько пакетов, чтобы обновления весов могли перекрываться с all-reduce градиентов.
Примеры:
options = tf.distribute.experimental.CommunicationOptions(
bytes_per_pack=50 * 1024 * 1024,
timeout_seconds=120.0,
implementation=tf.distribute.experimental.CommunicationImplementation.NCCL
)
grads = tf.distribute.get_replica_context().all_reduce(
'sum', grads, options=options)
optimizer.apply_gradients(zip(grads, vars),
experimental_aggregate_gradients=False)
| Аргументы | |
|---|---|
bytes_per_pack | целое число неотрицательное. Разбивает коллективные операции на пакеты определенного размера. Если оно равно нулю, значение определяется автоматически. Эта подсказка учитывается всеми стратегиями с множественными репликами, кроме TPUStrategy. |
timeout_seconds | число с плавающей точкой или None, таймаут в секундах. Если не None, коллектив вызывает tf.errors.DeadlineExceededError, если он занимает больше времени, чем этот таймаут. Ноль отключает таймаут. Это может быть полезно при отладке проблем с зависанием. Это следует использовать только для отладки, поскольку это создаёт новую нить для каждой коллективной операции, т.е. накладные расходы timeout_seconds * num_collectives_per_second дополнительных потоков. Это работает только для tf.distribute.experimental.MultiWorkerMirroredStrategy. |
implementation | tf.distribute.experimental.CommunicationImplementation. Это подсказка о предпочтительной реализации коммуникации. Возможные значения включают AUTO, RING, и NCCL. NCCL, как правило, более производителен для GPU, но не работает для CPU. Это работает только для tf.distribute.experimental.MultiWorkerMirroredStrategy. |
| Исключения | |
|---|---|
ValueError | При недопустимых значениях аргументов. |
© 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/distribute/experimental/CommunicationOptions