#parallel-processing #process #subprocess #parent-child #slurm
#параллельная обработка #процесс #подпроцесс #родитель-потомок #slurm
Вопрос:
Я хочу запустить код fortran, вызываемый orbits_01
в SLURM. Я хочу запускать несколько заданий одновременно (т.Е. распараллеливать по нескольким ядрам). После запуска нескольких заданий каждая orbits_01
программа будет вызывать другой исполняемый optimizer
файл, и optimizer
он будет постоянно вызывать другой вызываемый скрипт Python relax.py
. Когда я отправлял задания в SLURM by sbatch python main1.py
, заданиям не удалось даже вызвать optimizer
. Однако вся схема работает нормально, когда я запускаю локально. Состояние локального процесса показано ниже:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
shuha 39395 0.0 0.0 161540 3064 ? S Oct22 0:19 sshd: shuha@pts/72
shuha 39396 0.0 0.0 118252 5020 pts/72 Ss Oct22 0:11 _ -bash
shuha 32351 0.3 0.0 318648 27840 pts/72 S 02:08 0:00 _ python3 main1.py
shuha 32968 0.0 0.0 149404 1920 pts/72 R 02:10 0:00 _ ps uxf
shuha 32446 0.0 0.0 10636 1392 pts/72 S 02:08 0:00 ../orbits_01.x
shuha 32951 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 _ sh -c ./optimizer >amp; log
shuha 32954 0.0 0.0 1716076 1376 pts/72 S 02:10 0:00 _ ./optimizer
shuha 32955 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 _ sh -c python relax.py > relax.out
shuha 32956 99.6 0.0 749900 101944 pts/72 R 02:10 0:02 _ python relax.py
shuha 32410 0.0 0.0 10636 1388 pts/72 S 02:08 0:00 ../orbits_01.x
shuha 32963 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 _ sh -c ./optimizer >amp; log
shuha 32964 0.0 0.0 1716076 1376 pts/72 S 02:10 0:00 _ ./optimizer
shuha 32965 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 _ sh -c python relax.py > relax.out
shuha 32966 149 0.0 760316 111992 pts/72 R 02:10 0:01 _ python relax.py
shuha 32372 0.0 0.0 10636 1388 pts/72 S 02:08 0:00 ../orbits_01.x
shuha 32949 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 _ sh -c ./optimizer >amp; log
shuha 32950 0.0 0.0 1716076 1376 pts/72 S 02:10 0:00 _ ./optimizer
shuha 32952 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 _ sh -c python relax.py > relax.out
shuha 32953 100 0.0 749892 101936 pts/72 R 02:10 0:03 _ python relax.py
У меня есть основной вызываемый скрипт Python main1.py
, который выполняет цикл for для одновременного выполнения нескольких orbits_01
заданий. Затем основной скрипт будет ждать завершения всех заданий. Здесь orbits_01
параллельно выполняются 3 родительских задания, и каждое родительское задание имеет несколько дочерних заданий. Тяжелые вычисления выполняются кодом python relax.py
, поэтому каждое задание должно быть способно выполняться только с использованием одного ядра. Я хочу знать, каков наилучший способ отправки и распараллеливания нескольких родительских заданий с несколькими дочерними заданиями по всем ядрам в одном узле SLURM?
Комментарии:
1. Как отправляются задания? С помощью скрипта отправки или с помощью пакета Python?
2. Задания отправляются путем простой отправки скрипта Python
main1.py
, который создает несколько каталогов и вызываетos.system('./orbits_01.x < input.dat amp;')
в каждом из них.