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