Модуль: tf.compat.v2.distribute
Библиотека для выполнения вычислений на нескольких устройствах.
См. руководство для обзора и примеров: TensorFlow v1.x, TensorFlow v2.x.
Целью этой библиотеки является предоставление возможности писать алгоритмы в стилизованной форме, которые будут совместимы с различными tf.distribute.Strategy реализациями. Каждый потомок будет реализовывать различную стратегию распределения алгоритма по нескольким устройствам/машинам. Кроме того, эти изменения могут быть скрыты внутри конкретных слоёв и других классов библиотеки, которые нуждаются в особом обращении для выполнения в распределённой среде, так что большинство кода определения модели пользователя может работать без изменений. tf.distribute.Strategy API работает одинаково с выполнением eager и в графическом режиме.
Глоссарий
- Параллелизм данных означает, что мы запускаем несколько копий модели на разных фрагментах входных данных. Это в отличие от параллелизма модели, где мы делим одну копию модели между несколькими устройствами. Примечание: в настоящее время мы поддерживаем только параллелизм данных, но надеемся добавить поддержку параллелизма модели в будущем.
- Устройство — это ЦП или ускоритель (например, GPU, TPU) на некоторой машине, на котором TensorFlow может выполнять операции (см., например,
tf.device). Вы можете иметь несколько устройств на одной машине или быть подключены к устройствам на нескольких машинах. Устройства, используемые для выполнения вычислений, называются устройствами рабочих узлов. Устройства, используемые для хранения переменных, — это устройства параметров. В некоторых стратегиях, таких какtf.distribute.MirroredStrategy, устройства рабочих узлов и параметров будут одинаковыми (см. зеркальные переменные ниже). В других они будут разными. Например,tf.distribute.experimental.CentralStorageStrategyразмещает переменные на одном устройстве (которое может быть устройством рабочего узла или ЦП), аtf.distribute.experimental.ParameterServerStrategyразмещает переменные на отдельных машинах, называемых параметрическими серверами (см. ниже). - Реплика — это одна копия модели, работающая на одном фрагменте входных данных. В настоящее время каждая реплика выполняется на своём устройстве рабочего узла, но после добавления поддержки параллелизма модели реплика может охватывать несколько устройств рабочих узлов.
- Хост — это устройство ЦП на машине с устройствами рабочих узлов, обычно используемое для запуска конвейеров ввода.
- Рабочий узел определяется как физическая(ые) машина(ы), содержащая физические устройства (например, GPU, TPU), на которых выполняется дублируемое вычисление. Рабочий узел может содержать одну или несколько реплик, но содержит по крайней мере одну реплику. Обычно один рабочий узел соответствует одной машине, но в случае очень больших моделей с параллелизмом модели один рабочий узел может охватывать несколько машин. Обычно мы запускаем один конвейер ввода на каждый рабочий узел, подключая все реплики на этом рабочем узле.
- Синхронное, или чаще синх обучение — это когда обновления от каждой реплики собираются вместе перед обновлением переменных модели. Это в отличие от асинхронного, или асинх обучения, когда каждая реплика обновляет переменные модели независимо. Также может быть разделение реплик на группы, которые синхронизированы внутри каждой группы, но асинхронны между группами.
-
Параметрические серверы: это машины, которые содержат одну копию параметров/переменных, используемые некоторыми стратегиями (в настоящее время только
tf.distribute.experimental.ParameterServerStrategy). Все реплики, которые хотят работать с переменной, извлекают её в начале шага и отправляют обновление для применения в конце шага. Они в принципе могут поддерживать синхронное или асинхронное обучение, но в настоящее время мы поддерживаем только асинхронное обучение с параметрическими серверами. Сравните сtf.distribute.experimental.CentralStorageStrategy, который размещает все переменные на одном устройстве на одной машине (и выполняет синхронное обучение), иtf.distribute.MirroredStrategy, который дублирует переменные на нескольких устройствах (см. ниже). - Зеркальные переменные: это переменные, которые копируются на несколько устройств, где мы поддерживаем синхронизацию копий, применяя одинаковые обновления к каждой копии. Обычно используется только при синхронном обучении.
- Редукции и all-reduce: Редукция — это способ агрегирования нескольких значений в одно значение, например, «сумма» или «среднее». Если стратегия выполняет синхронное обучение, мы выполним редукцию градиентов параметра со всех реплик перед применением обновления. All-reduce — это алгоритм для выполнения редукции значений с нескольких устройств и обеспечения доступности результата на всех этих устройствах.
Обратите внимание, что мы предоставляем по умолчанию версию tf.distribute.Strategy, которая используется, когда ни одна другая стратегия не активна, и предоставляет тот же API с разумным поведением по умолчанию.
Модули
cluster_resolver модуль: Импорт библиотек для ClusterResolvers.
experimental модуль: Экспериментальная библиотека стратегий распределения.
Классы
class CrossDeviceOps: Базовый класс для межсетевой редукции и алгоритмов широковещательной рассылки.
class HierarchicalCopyAllReduce: Редукция с использованием иерархического копирования all-reduce.
class InputContext: Класс, содержащий информацию, необходимую функции ввода.
class InputReplicationMode: Режим дублирования для функции ввода.
class MirroredStrategy: Зеркалирование переменных для распределения по нескольким устройствам и машинам.
class NcclAllReduce: Редукция с использованием NCCL all-reduce.
class OneDeviceStrategy: Стратегия распределения для работы на одном устройстве.
class ReduceOp: Указывает, как набор значений должен быть уменьшен.
class ReductionToOneDevice: Всегда сначала выполняет редукцию на одно устройство, а затем — широковещательную рассылку.
class ReplicaContext: tf.distribute.Strategy API при работе в контексте реплики.
class Server: Сервер TensorFlow в процессе, для использования в распределённом обучении.
class Strategy: Политика распределения состояния и вычислений для списка устройств.
class StrategyExtended: Дополнительные API для алгоритмов, которые должны быть ориентированы на распределение.
Функции
experimental_set_strategy(...): Установка tf.distribute.Strategy как текущей без with strategy.scope().
get_replica_context(...): Возвращает текущий tf.distribute.ReplicaContext или None.
get_strategy(...): Возвращает текущий объект tf.distribute.Strategy.
has_strategy(...): Возвращает, существует ли текущая не по умолчанию tf.distribute.Strategy.
in_cross_replica_context(...): Возвращает True если находимся в меж-репликационном контексте.
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/compat/v2/distribute