У меня есть сервер с 8 GPU, и я хотел бы обучить одну нейронную сеть на каждой из них одновременно. У меня есть несколько десятков таких сетей для обучения, и я хотел бы запланировать учебное задание. В настоящее время я пишу свой собственный скрипт bash для этой задачи планирования.
for l1 in {1e-4,2e-4,5e-4,1e-3}; do
python train.py --lr $l1 --attr 0 --device 0 &
python train.py --lr $l1 --attr 1 --device 1 &
python train.py --lr $l1 --attr 2 --device 2 &
python train.py --lr $l1 --attr 3 --device 3 &
python train.py --lr $l1 --attr 4 --device 4 &
python train.py --lr $l1 --attr 5 --device 5 &
python train.py --lr $l1 --attr 6 --device 6 &
python train.py --lr $l1 --attr 7 --device 7
sleep 1
wait
done
В приведенном выше сценарии флаг --device
выбирает графический процессор для использования, в то время как другие флаги просто определяют гиперпараметры моей глубокой нейронной сети. сетей. Этот скрипт выполняет для каждой итерации цикла for один запуск обучающей задачи на каждом графическом процессоре и ожидает завершения всех из них перед началом следующей итерации. Проблема в том, что для выполнения каждой учебной задачи может потребоваться разное время, поэтому я буду использовать значительное количество времени менее чем на 8 графических процессорах одновременно, что удлиняет время для завершения всей задачи.
Мне интересно, есть ли какой-нибудь способ определить, какой графический процессор завершил свою задачу, и запустить на нем новую задачу, чтобы у меня всегда было 8 запущенных графических процессоров.
Спасибомного!