Я хочу распараллелить сценарий R на HPC с планировщиком Slurm.
SLURM настроен на SelectType: CR_Core_Memory
.
Каждый вычислительный узел имеет 16 ядер (32 потока).
Я передаю R-скрипт в SLURM со следующей конфигурацией, используя clustermq в качестве интерфейса к Slurm.
#!/bin/sh
#SBATCH --job-name={{ job_name }}
#SBATCH --partition=normal
#SBATCH --output={{ log_file | /dev/null }} # you can add .%a for array index
#SBATCH --error={{ log_file | /dev/null }}
#SBATCH --mem-per-cpu={{ memory | 2048 }}
#SBATCH --cpus-per-task={{ n_cpus }}
#SBATCH --array=1-{{ n_jobs }}
#SBATCH --ntasks={{ n_tasks }}
#SBATCH --nodes={{ n_nodes }}
#ulimit -v $(( 1024 * {{ memory | 4096 }} ))
R --no-save --no-restore -e 'clustermq:::worker("{{ master }}")'
В R-скрипте я делаю «многоядерное» распараллеливаниес 30 ядрами.Я хотел бы использовать ядра из нескольких узлов, чтобы удовлетворить требования 30 процессоров, то есть 16 ядер из узла 1, 14 из узла 2.
Я пытался использовать n_tasks = 2
и cpus-per-task=16
.При этом задание назначается двум узлам.Однако только один узел выполняет вычисления (на 16 ядрах).Второй узел назначен заданию, но ничего не делает.
В этот вопрос srun
используется для разделения параллелизма между узлами с foreach
и идентификаторами Slurm.Я не использую ни srun
, ни foreach
.Есть ли способ добиться того, чего я хочу, с параллелизмом SBATCH
и multicore
?
(я знаю, что мог бы использовать SelectType=CR_CPU_Memory
и иметь 32 потока, доступных на узел. Однако вопрос в том, какиспользуйте ядра / потоки от нескольких узлов в целом, чтобы иметь возможность увеличить параллелизм).