гибрид распределенного обучения tensorflow с методологией с несколькими графическими процессорами

Поиграв некоторое время с текущей реализацией распределенного обучения, я думаю, что каждый графический процессор рассматривается как отдельный рабочий процесс. Однако сейчас принято иметь 2–4 графических процессора в одном блоке. Не лучше ли использовать методологию одного блока с несколькими графическими процессорами, чтобы сначала вычислить средние градиенты в одном блоке, а затем синхронизировать его на нескольких узлах? Таким образом, он значительно облегчает трафик ввода-вывода, который всегда является узким местом в параллелизме данных.

Мне сказали, что это возможно с текущей реализацией, когда все графические процессоры находятся в одном блоке в качестве рабочего, но я не могу понять, как связать средние градиенты с SyncReplicasOptimizer, поскольку SyncReplicasOptimizer напрямую использует оптимизатор в качестве входных данных.

Любые идеи от кого-нибудь?


person user3742402    schedule 20.09.2016    source источник


Ответы (1)


Распределенный TensorFlow поддерживает несколько графических процессоров в одной рабочей задаче. Одним из распространенных способов распределенного обучения моделей изображений является выполнение синхронного обучения на нескольких графических процессорах в одном рабочем потоке и асинхронного обучения между рабочими процессами (хотя возможны и другие конфигурации). Таким образом, вы передаете параметры модели рабочему процессу только один раз, и они распределяются между локальными графическими процессорами, облегчая использование пропускной способности сети.

Для такого обучения многие пользователи выполняют «репликацию в графе» между графическими процессорами в одном воркере. Это может использовать явный цикл для локальных устройств GPU, как в пример модели CIFAR-10; или поддержка библиотеки более высокого уровня, как в model_deploy() утилита от TF-Slim.

person mrry    schedule 24.09.2016