Ответ 1
После реализации обоих, в конце концов, я нашел использование потоковой передачи проще, чем распределенный API-интерфейс tensorflow, однако он также работает медленнее. Чем больше процессорных ядер вы используете, тем быстрее распределенный тензорный поток сравнивается с потоками.
Однако это справедливо только для асинхронного обучения. Если доступные ядра процессора ограничены, и вы хотите использовать графический процессор, вы можете использовать синхронное обучение с несколькими рабочими, как это делает OpenAI в A2C. Там только среда распараллеливается (через многопроцессорную обработку), а функция tensorflow использует графический процессор без какой-либо распараллеливания графика. OpenAI сообщила, что их результаты были лучше с синхронным обучением, чем с A3C.
изменить
Вот еще несколько деталей:
Проблема с распределенным тензорным потоком для A3C заключается в том, что перед вызовом этапа обучения вам нужно вызвать несколько проходов forwardorflow forward (чтобы получить действия во время n шагов). Однако, поскольку вы учитесь асинхронно, ваша сеть будет меняться в течение n шагов другими работниками. Таким образом, ваша политика изменится во время n шагов, и шаг обучения будет происходить с неправильными весами. Распределенный тензорный поток не будет препятствовать этому. Поэтому вам нужна глобальная и локальная сеть в распределенном тензорном потоке, что делает реализацию не проще, чем реализацию с потоковой обработкой (и для потоковой передачи вам не нужно учиться, как работать с распределенным тензорным потоком). Runtime разумно, на 8 ядрах процессора или меньше не будет большой разницы.