Как распределить цикл для запуска одной итерации на ядро - PullRequest
1 голос
/ 14 июня 2019

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

python sim_fine.py model1 слабая истина -> на ядре 1,
python sim_fine.py model1 слабый b true -> на ядре 2
и т.д ...

Я бы хотел использовать 20 из 30 ядер для его процесса. По сути, я хочу, чтобы итерация не дожидалась окончания предыдущего, прежде чем начинать следующую. Это может случиться только 20 раз, конечно. Я искал в Интернете, но не мог найти никакой помощи по этой теме.

for m in model1 model2;
    do
    for s in weak strong;
        do
        for opt_dict in a b c d;
            do
                python sim_fine.py $m $s $opt_dict true
            done
        done
    done

1 Ответ

1 голос
/ 14 июня 2019

Я бы использовал GNU Parallel для этого, хотя кажется, что он генерирует только 16 заданий, а не 20, которые вы указываете:

parallel --dry-run python sim.py ::: model{1,2} ::: weak strong ::: {a..d}

Пример вывода

python sim.py model1 weak a
python sim.py model1 weak b
python sim.py model1 weak c
python sim.py model1 weak d
python sim.py model1 strong a
python sim.py model1 strong b
python sim.py model1 strong c
python sim.py model1 strong d
python sim.py model2 weak a
python sim.py model2 weak b
python sim.py model2 weak c
python sim.py model2 weak d
python sim.py model2 strong a
python sim.py model2 strong b
python sim.py model2 strong c
python sim.py model2 strong d

Если это выглядит хорошо, запустите его всерьез без --dry-run.Если вы действительно хотите ограничить число параллельных заданий до 20, используйте:

parallel -j 20 ...

Существует множество очень гибких опций для обработки журналов, отчетов и обработки ошибок, если вы запускаете man parallel.

Я немного ленив / лаконичен с обработкой параметров, вы можете быть более точным с:

parallel --dry-run python sim.py {1} something {2} somethingelse {3} true ::: model{1,2} ::: weak strong ::: {a..d}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...