Запустить два скрипта на одном узле
У меня есть узел с 20 ядрами, и я хотел бы знать, как сделать так, чтобы две работы занимали каждые 10 ядер этого узла. (Оба jobs.sh одинаковы, после запуска job.sh я изменяю параметры main.R, затем снова запускаю job.sh.)
#!/bin/bash
#SBATCH --job-name=main
#SBATCH --mail-use=abc@gmail.com
#SBATCH --mail-type=ALL
#SBATCH --nodes=1 # number of nodes
#SBATCH --ntasks-per-node=10 # number of cores
#SBATCH --time=24:00:00 # walltime
#SBATCH --output=sortie/job.out
#SBATCH --error=sortie/error.err
module load python
module load R
# module load openmpi
R CMD BATCH '--args ../../' main.R sortie/main.Rout
1 ответ
Один из способов сделать это - запросить все 20 ядер:
#SBATCH --ntasks-per-node=20
А затем вызовите оба сценария R и запустите их в фоновом режиме. Каждое из них не должно использовать более 10 ядер. Поэтому не используйте функцию DetectionCores() или аналогичную для установки количества ядер в R, а вместо этого установите число ядер равным 10:
R CMD BATCH '--args ../../' main1.R sortie/main1.Rout &
R CMD BATCH '--args ../../' main2.R sortie/main2.Rout &
wait
В то же время неясно, зачем вам нужно запускать 2 скрипта в одном пакетном скрипте. Более оптимальным способом было бы отправить 2 задания с 10 ядрами, на которых по одному R-скрипту. Вы можете передать параметры в сценарий оболочки, который вы отправляете, а затем использовать их для передачи в ваш сценарий R. Например,
Если вы запускаете сценарий R main.R и хотите передать 2 значения, вы можете сделать это в своем сценарии отправки:
module load R
Rscript main.R $1 $2
А затем дважды вызовите этот скрипт:
sbatch myscript.sh 3.14 outfile1.csv
sbatch myscript.sh 1.57 outfile2.csv
Тогда первая работа будет выполняться так:
Rscript main.R 3.14 outfile1.csv
И второе: Rscript main.R 1.57 outfile1.csv
Если вы предпочитаете формат R CMD BATCH лучше, чем Rscript, вы также можете использовать его. Просто используйте $1, $2 и т. Д. В качестве аргументов для вашего R-скрипта.