Как SLURM и Pytorch вместе работают над многоузловым обучением нескольких графических процессоров - PullRequest
0 голосов
/ 21 октября 2019

Я хотел бы спросить, как агрегируются градиенты при обучении многоузловому multi-gpu в кластере с использованием Slurm для управления рабочей нагрузкой. Код написан с использованием Pytorch.

Например, при запуске скрипта train.py в Slurm для обучения модели на 4 узлах с 4GPU на узел, как показано ниже, что именно делает команда srun?

srun python train.py

В документации написано, что srun используется для запуска параллельного задания в кластере, управляемом Slurm. Тем не менее, я хотел бы знать, какие шаги он выполняет. Я предполагаю, что он копирует сценарий в 16 графических процессоров, и каждый графический процессор будет запускать сценарий одновременно. Это правильно?

Если я использую torch.distributed.init_process_group() в своем скрипте для обучения нескольких графических процессоров, как Slurm будет обрабатывать градиенты, собранные с каждого графического процессора вместе с Pytorch? Я предполагаю, что есть главный порт (который является устройством графического процессора в узле, назначенном Slurm), который собирает градиенты. И все 16 графических процессоров в 4 узлах будут передавать градиенты в этот мастер-порт благодаря пакету torch.distributed? Slurm помогает распределять ресурсы, но он не играет никакой роли в агрегировании градиентов?

Я также не уверен, должен ли я запускать скрипт, используя srun, как указано выше, или я должен указать torch.distributed.launch в моей команде, как показано ниже. Я хочу убедиться, что градиенты собраны правильно.

# NGPU equals to number of GPUs/node
export NGPU=4
srun python -m torch.distributed.launch --nproc_per_node=$NGPU train.py

Заранее благодарю за помощь!

...