Как ограничить количество распараллеливания из тега -n в SLURM - PullRequest
0 голосов
/ 07 мая 2019

Я выполняю задание в SLURM, которое выполняет поиск гиперпараметров для модели ML.

Поиск гиперпараметров кодируется с помощью bash-скрипта.Скрипт bash запускает цикл for, который выполняет n (обычно n = 15) число экспериментов.Теперь у меня недостаточно памяти в GPU для параллельного запуска всего эксперимента с python, поэтому я выполняю параллелизацию с тегом slurm by -n лишь несколько раз.

скрипт выглядит следующим образом:

#!/bin/sh
#SBATCH -o trans-%j.out
#SBATCH -p PV1002q
#SBATCH -n 5
#SBATCH --gres=gpu:1
#SBATCH --nodelist=node16

module load cuda90/toolkit
module load cuda90/blas/9.0.176

source /home/sbmaruf/.bashrc
source ~/anaconda3/bin/activate sbmaruf

/cm/shared/apps/cuda90/sdk/9.0.176/7_CUDALibraries/simpleCUBLAS/simpleCUBLAS

for seed in 1234 1000 2000 3000 4000 5000 6000 7000 8000; do
    python -u experiment.py --seed $seed

при -n равно 5, SLURM запустит 5 заданий эксперимент.пи .Теперь вот осложнение.Внутри файла Python эксперимент.py есть сценарий perl, выполняемый для оценки модели.Как я уже выделил максимальное распараллеливание в скрипте bash.эксперимент.py не может запустить скрипт perl из файла python.Скрипт perl запускается в python с помощью следующей команды:

 subprcess.check_output("perl eval.pl > output.txt",shell=True)  

По сути, мне нужно прочитать выходной файл, чтобы получить значение метрики.Итак, как решить эту проблему?

Мое наблюдение состоит в том, чтобы ограничить сценарий bash изначально максимальным числом распараллеливания, чтобы позже файл python мог инициировать новый процесс.Но я не знаю, как это сделать.

Примечание: цикл внутри bash-скрипта довольно сложный.Я дал простой пример для лучшего понимания.Это не цикл for, для которого я могу выполнить несколько ручных запусков sbatch.

...