Я хочу использовать параллельную модель и параллельную передачу данных, и прочитал множество документов и учебных пособий с официального сайта.
Одна сбивающая с толку проблема, с которой я столкнулся, заключается в том, как собрать все виды значений счетчиков в каждом процессе?
Вопрос1 : В официальном руководстве они просто записывают значение счетчиков в каждом процессе.
Но в моем коде я печатаю значения потерь в каждом процессе, они разные. Итак, я думаю, что стоимость других метров также отличается.
Является ли это руководство неправильным? По моему мнению, правильный путь должен сначала синхронизировать потери, акк и другие счетчики, затем все процессы сохраняют одинаковые значения, после этого мне просто нужно распечатать информацию счетчиков в одном процессе. .
Вопрос2 : в официальном учебнике говорится, что модуль DistributedDataParallel также обрабатывает усреднение градиентов по всему миру, поэтому нам не нужно явно усреднять градиенты в тренировочный шаг ».
Но из-за вопроса 1 действительно ли API работает так, как сказал учебник? Поскольку каждый из процессов имеет различное значение потерь, хотя они начинаются с одинаковых весов инициализации, будет моделировать веса в каждый процесс оптимизировать в разных направлениях?