Как отправить петлю на несколько узлов с помощью Slurm? - PullRequest
0 голосов
/ 20 мая 2019

У меня есть R-скрипт, который я хотел бы выполнить на нескольких узлах. Я показываю цикл моего кода грязи:

Редактировать

#!/bin/bash
#SBATCH -o job-%A_task.out
#SBATCH --job-name=paral_cor
#SBATCH --partition=normal
#SBATCH --time=1-00:00:00
#SBATCH --mem=124G                #I want to use 124Go / node
#SBATCH --cpus-per-task=32        #and 32CPUs / node 
#SBATCH --exclude=hpcsmp01


module load gcc/8.1.0 openblas/0.3.3 R

OUTPUT="$HOME"/PROJET_M2/data/$(date +"%Y%m%d")_parallel_nodes_test
mkdir -p "$OUTPUT"

export FILENAME=~/PROJET_M2/bin/RHO_COR.R

echo "Start job :"`date`

for i in $(seq 100)
do
   srun Rscript my_scrit.R --subset $i  
done

echo "Stop job :"`date`

Я выполняю это в основном

sbatch my_script.sh 

Это цикл в моем коде R, где появляется --subset $i:

res <- foreach(i = opt$subset) %dopar% {      #without argument, that gives
 G1 <- split[[combs[i,1]]]                    i=seq_len(nrow(combs))
 G2 <- split[[combs[i,2]]]                    combs is a vector with several
 dat.i <- cbind(data[,G1], data[,G2])         rows, according to my input 
 rho.i <- cor_rho(dat.i)                      file
}

Я хочу выполнить другое значение i на нескольких узлах. Этот код выполняется только на одном узле. У вас есть проблема для запуска этого кода на нескольких узлах?

Спасибо

1 Ответ

0 голосов
/ 23 мая 2019

В вашем текущем состоянии вы запрашиваете SLURM для одного узла, одной задачи и 32 ядер для этой задачи. Если вы хотите использовать более одного узла, вы должны сказать SLURM:

#SBATCH --nodes=10

Позже, при фактическом запуске скрипта, вы должны указать srun запустить этот скрипт в одном узле:

srun --nodes 1 --exclusive Rscript my_scrit.R --subset $i &

Вам нужно поместить скрипт в фоновый режим, если вы хотите запустить следующую итерацию, пока первая еще работает. Вам также необходим флаг --exclusive, чтобы избежать запуска дополнительного сценария на уже выделенных ресурсах.

...