Способы оптимизации параметров сервера тензорного потока - PullRequest
0 голосов
/ 28 февраля 2020

За последние несколько лет я провел много пользовательских оптимизаций в коде тензорного потока, и теперь кажется, что оставшееся узкое место составляет l ie в параметрическом сервере. В частности, когда я выполняю профилирование распределенного обучения на нескольких машинах, операция RecvTensor оказывается наиболее трудоемкой с большим отрывом. Поэтому, естественно, меня заставляют задуматься о способах оптимизации вызовов параметров сервера grp c. Я знаю, что есть альтернативы grp c, такие как brp c от baidu, хотя кажется, что это гораздо менее хорошо документировано, и в сети также отсутствует полное сравнение производительности. Другая возможность - заменить буфер протокола, используемый для передачи тензоров, на flatbuffer, но это, вероятно, не решает проблему ввода-вывода, и сериализация запроса и ответа может быть не такой уж плохой по сравнению. Наконец, возможно, я могу квантовать float32 в float16 вручную и преобразовать его обратно на стороне приемника, чтобы сократить ввод-вывод примерно вдвое, если последний можно компактно сохранить в памяти, но преобразование может занять некоторое время.

Так Мой вопрос: имеют ли три упомянутых выше подхода смысл в качестве жизнеспособных способов улучшить производительность сервера параметров? Каковы другие пути для рассмотрения? Может быть, это уже слишком оптимизировано, что я не должен даже тратить время в этой области (хотя мне бы очень хотелось понять, как сервер параметров реализован именно под капотом, помимо просто python API распределенной стратегии)? Любая рекомендация для получения подробного понимания ее внутренней работы также будет принята!

...