SLURM выполняет параллельную обработку нескольких родительских заданий, каждое с несколькими дочерними заданиями

#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;') в каждом из них.