Pytorch: отправляйте один и тот же пакет данных на несколько графических процессоров и выполняйте операции на каждом графическом процессоре по отдельности.

У меня есть один и тот же загрузчик данных для передачи данных в 4 модели, каждая из которых имеет свой гиперпараметр, загруженный на отдельный графический процессор. Я хочу уменьшить узкое место, вызванное загрузкой данных, поэтому я намереваюсь загрузить один и тот же пакет, подготовленный загрузчиком данных, на все графические процессоры, чтобы они могли выполнять вычисления по отдельности и выполнять шаг обратного распространения. Я уже кэширую данные в ОЗУ, чтобы избежать узких мест на диске при создании экземпляра загрузчика данных.

Я пытаюсь:

  1. Отправка/трансляция одного и того же пакета данных на N графических процессоров. Я предполагаю, что это возможно, только если мы можем синхронизировать/ждать, пока все графические процессоры закончат операции для одного пакета, прежде чем мы сможем перейти к следующему.
  2. Бонус: предварительная выборка следующего пакета, как только один пакет будет готов (до пакетов P), может помочь обеспечить непрерывный поток данных на графические процессоры, избегая ожидания.

Я не пытаюсь добиться:

  1. Параллелизм данных — разделите большой пакет на N частей и вычислять каждую часть на одном графическом процессоре
  2. Параллелизм моделей — раздельное вычисление большой модели (которая не помещается на одном графическом процессоре). ) на N (или меньше) частей и поместите каждую часть на один GPU.

Похожие вопросы:

  1. Этот один посвящен выполнению операции Conv2D. охватывать несколько графических процессоров
  2. Этот один посвящен параллельному выполнению различных вычислений GPU, но я не не знаю, можно ли решить мою проблему с помощью torch.cuda.Stream( )
  3. Этот один примерно загрузка разных моделей, но это не касается совместного использования одной и той же партии.
  4. Этот один как раз о том, о чем я спрашиваю, но это CUDA /PCIe и 7 лет назад.

Обновлять:

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


person Saravanabalagi Ramachandran    schedule 08.10.2020    source источник
comment
Если я вас правильно понял, я думаю, что вместо того, чтобы пытаться запускать разные модели на каждом графическом процессоре, более стандартным подходом было бы запустить 4 модели последовательно, каждую на 4 графических процессорах (вот пример настройки гиперпараметров, встроенный в Azure: я думаю, что последний будет намного проще в настройке и может быть даже быстрее.   -  person John    schedule 01.03.2021