Запуск нескольких экземпляров файла python с двумя входными файлами с использованием GNU Parallel в системе HP C с SLURM - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь запустить один файл python 240 раз параллельно (поскольку запуск каждого отдельного файла занимает около 9 минут) в системе HP C. В идеале каждый файл python должен работать на одном ядре. На каждый узел приходится 24 ядра. Файл python принимает два входных файла, по одному из каждого набора:

  • CN_ONLY0.pdb до CN_ONLY239.pdb
  • I_ONLY0.pdb до I_ONLY239.pdb.

Когда я запускаю указанный ниже код:

parallel="parallel --delay .2         \
                    -j $SLURM_NTASKS   \
                   --joblog runtask.log \
                   --resume              \
                   --max-args=2"

srun="srun --exclusive -N1 -n1 --cpus-per-task=1 --cpu-bind=cores"

find . -type f \( -name "CN_ONLY*.pdb" -o -name "I_ONLY*.pdb" \) |
        sort -t Y -k 2 -g     |
        TMPDIR=$SLURM_SCRATCH \
        $parallel python python_test.py

Программа Python выполняется правильно, но не распространяется на все запрошенные ЦП.

Кто-нибудь знает, как исправить эту проблему?

1 Ответ

0 голосов
/ 07 мая 2020

Нет необходимости использовать параллельный GNU, если SLURM сам предоставляет эту функциональность через массив заданий (или массивы заданий). Просто добавьте --array=1-240 к команде srun, а затем отправьте следующий сценарий:

#!/bin/sh

id=$(expr ${SLURM_ARRAY_TASK_ID} - 1)
python python_test.py CN_ONLY${id}.pdb I_ONLY${id}.pdb

Произойдет то, что SLURM запустит этот сценарий 240 раз и установит для SLURM_ARRAY_TASK_ID другое значение в каждом из них - от 1 до 240. Затем вычесть единицу из этого значения и использовать его для генерации имен аргументов сценария.

...