Spec-Zone.ru › TensorFlow 1.15

Модуль: tf.distribute

Библиотека для выполнения вычислений на нескольких устройствах.

См. руководство для обзора и примеров: TensorFlow v1.x, TensorFlow v2.x.

Цель этой библиотеки — позволить вам стилизованно писать алгоритм, который будет работать с различными tf.distribute.Strategy реализациями. Каждый потомок будет реализовывать различную стратегию распределения алгоритма по нескольким устройствам/машинам. Кроме того, эти изменения могут быть скрыты внутри конкретных слоёв и других классов библиотеки, которые нуждаются в особой обработке для выполнения в распределённой среде, так что код определения модели большинства пользователей может работать без изменений. API tf.distribute.Strategy работает одинаково с выполнением в режиме 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, который дублирует переменные на нескольких устройствах (см. ниже).
  • Зеркальные переменные: это переменные, которые копируются на несколько устройств, где мы поддерживаем синхронизацию копий, применяя одни и те же обновления к каждой копии. Обычно используется только с синхронным обучением.
  • Суммирование и все-в-один: Суммирование — это какой-либо метод агрегирования нескольких значений в одно значение, например, «сумма» или «среднее значение». Если стратегия выполняет синхронное обучение, мы выполним суммирование градиентов параметра со всех реплик перед применением обновления. Все-в-один — это алгоритм для выполнения суммирования значений с нескольких устройств и предоставления результата на всех этих устройствах.

Обратите внимание, что мы предоставляем версию по умолчанию tf.distribute.Strategy, которая используется, когда никакая другая стратегия не находится в области действия, обеспечивая тот же API с разумным поведением по умолчанию.

Модули

cluster_resolver модуль: импорт библиотек для ClusterResolvers.

experimental модуль: экспериментальная библиотека стратегий распределения.

Классы

class CrossDeviceOps: Базовый класс для кросс-устройство суммирования и трансляции алгоритмов.

class HierarchicalCopyAllReduce: Суммирование с помощью иерархического копирования и все-в-один.

class InputContext: Класс, оборачивающий информацию, необходимую для функции ввода.

class InputReplicationMode: Режим репликации для функции ввода.

class MirroredStrategy: Зеркалирует переменные для распределения по нескольким устройствам и машинам.

class NcclAllReduce: Суммирование с использованием NCCL все-в-один.

class OneDeviceStrategy: Стратегия распределения для работы на одном устройстве.

class ReduceOp: Указывает, как набор значений должен быть суммирован.

class ReductionToOneDevice: Всегда сначала выполняется суммирование на одном устройстве, а затем трансляция.

class ReplicaContext: API tf.distribute.Strategy при работе в контексте реплики.

class Server: Внутрипроцессорный сервер TensorFlow для использования в распределённом обучении.

class Strategy: Список устройств с политикой состояния и распределения вычислений.

class StrategyExtended: Дополнительные API для алгоритмов, которые нуждаются в осознании распределения.

Функции

experimental_set_strategy(...): Установка tf.distribute.Strategy в качестве текущей без with strategy.scope().

get_loss_reduction(...): tf.distribute.ReduceOp, соответствующая последнему суммированию потерь.

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/distribute

Spec-Zone.ru

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