Как я могу отправить данные обучения на узел, который выполняет команду - PullRequest
1 голос
/ 04 мая 2019

Я использую slurm для манипулирования gpus для обучения моей модели. Я настроил среду Python на узле A, где хранятся мой код и данные. Обычная практика такова:

srun -p gpu --ntasks-per-node=1 --gres=gpu:2 python train.py

Это позволит slurm найти для меня узел и запустить мой код на этом узле. Здесь я обнаружил, что мой код работает в 3 раза медленнее, чем на каком-то локальном компьютере с таким же количеством gpus. Я предполагаю, что причина в том, что данные, используемые в коде, хранятся на узле A, в то время как slurm назначил мне узел B для запуска моего кода. Таким образом, данные на узле A должны будут непрерывно передаваться с узла A на узел B, что замедляет процесс.

Вот мой вопрос: есть ли способ, которым я мог бы скопировать свои данные в узел B, чтобы код мог использовать данные, как на локальной машине?

1 Ответ

0 голосов
/ 08 мая 2019

Вы можете заменить часть python train.py в вашей команде скриптом Bash, который сначала передает данные, а затем запускает python train.py.

Еще лучше было бы рассмотреть вопрос о создании правильного сценария отправки и отправить его с sbath вместо использования srun самостоятельно:

#!/bin/bash
#SBATCH -p gpu 
#SBATCH --ntasks-per-node=1
#SBATCH --gres=gpu:2

cp /global/directory/data /local/directory/

python train.py

Вам потребуется заменить строку cp /global/directory/data /local/directory/ правильной командой для копирования файлов. Это может быть scp, а не cp.

...