2016-09-18 10 views
5

Краткая версия: Нельзя ли хранить переменные в одном из рабочих и не использовать серверы параметров?В чем причина использования сервера параметров в распределенном обучении с тензорным потоком?

Длинная версия: Я хочу реализовать синхронное распределенное обучение нейронной сети в тензорном потоке. Я хочу, чтобы у каждого работника была полная копия модели во время обучения.

Я читал distributed tensorflow tutorial и code of distributed training imagenet и не понял, зачем нам нужны серверы параметров.

Я вижу, что они используются для хранения значений переменных, а replica_device_setter заботится о равномерном распределении переменных между серверами параметров (возможно, это делает что-то еще, я не смог полностью понять код).

Вопрос в том, почему мы не используем одного из рабочих для хранения переменных? Смогу ли я добиться того, что если я использую

with tf.device('/job:worker/task:0/cpu:0'): 

вместо

with tf.device(tf.train.replica_device_setter(cluster=cluster_spec)): 

для Variaibles? Если это работает, это недостаток по сравнению с решением с серверами параметров?

ответ

14

Использование сервера параметров может дать вам лучшее использование сети и позволяет масштабировать модели до большего количества машин.

Конкретный пример, предположим, что у вас есть параметры 250M, для вычисления градиента требуется 1 секунда, а 10 рабочих. Это означает, что каждый работник должен отправлять/получать 1 ГБ данных 9 другим рабочим каждую секунду, для каждой рабочей станции которой требуется полная пропускная способность по дуплексной сети 72 Гбит/с, что нецелесообразно.

Более реалистично, вы могли бы 10 Gbps пропускной способности сети на одного работника. Вы предотвращаете узкие места в сети, используя сервер параметров, разделенный на 8 машин. Каждый рабочий компьютер связывается с каждой машиной параметров для 1/8 параметров.

0

Другая возможность состоит в том, чтобы использовать распределенную версию TensorFlow, которая автоматически обрабатывает распределение данных и выполнение на нескольких узлах с использованием MPI во внутреннем интерфейсе.

Недавно мы разработали одну такую ​​версию на MATEX: https://github.com/matex-org/matex, а также документ, описывающий https://arxiv.org/abs/1704.04560

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

Мы будем рады помочь вам, если вам нужна дополнительная помощь!

 Смежные вопросы

  • Нет связанных вопросов^_^