我想知道是否可以询问有关并行运行 slurm 作业的问题。(请注意,我是 slurm 和 linux 的新手,两天前才开始使用它......)
按照下图的说明(来源:https://hpc.nmsu.edu/discovery/slurm/tasks/serial-execution/),
我设计了以下bash脚本
#!/bin/bash
#SBATCH --job-name fmriGLM #job name을 다르게 하기 위해서
#SBATCH --nodes=1
#SBATCH -t 16:00:00 # Time for running job
#SBATCH -o /scratch/connectome/dyhan316/fmri_preprocessing/FINAL_loop_over_all/output_fmri_glm.o%j #%j : job id 가 [>
#SBATCH -e /scratch/connectome/dyhan316/fmri_preprocessing/FINAL_loop_over_all/error_fmri_glm.e%j
pwd; hostname; date
#SBATCH --ntasks=30
#SBATCH --mem-per-cpu=3000MB
#SBATCH --cpus-per-task=1
for num in {0..29}
do
srun --ntasks=1 python FINAL_ARGPARSE_RUN.py --n_division 30 --start_num ${num} &
done
wait
我按如下方式运行了 sbatch:
sbatch test_bash
但是,当我查看输出时,很明显,bash 脚本中只执行了其中一个
sruns
...谁能告诉我哪里出了问题以及如何修复它?
**更新:当我查看错误文件时,我得到以下信息:
srun: Job 43969 step creation temporarily disabled, retrying
。我在网上搜索了一下,它说这可能是由于没有指定内存而导致没有足够的内存来进行第二项工作..但我认为我在执行时已经指定了内存--mem_per_cpu=300MB
?
**更新:我已尝试按照此处所述更改代码:为什么我的 slurm 作业步骤没有并行启动?,但是..仍然不起作用
**潜在相关信息:我们的节点大约有 96 个核心,与教程中说一个节点有 4 个核心或其他东西相比,这似乎很奇怪
谢谢!!
尝试将
--exclusive
添加到 srun
命令行:
srun --exclusive --ntasks=1 python FINAL_ARGPARSE_RUN.py --n_division 30 --start_num ${num} &
这将指示
srun
使用子分配并按您的预期工作。
请注意,
--exclusive
选项在此上下文中与与sbatch
一起使用时具有不同的含义。
另请注意,不同版本的 Slurm 有不同的规范方法来执行此操作,但使用
--exclusive
应该适用于大多数版本。
即使您已经解决了问题,但结果是其他问题,并且您已经在
--mem_per_cpu=300MB
脚本中指定了 sbatch
,我想补充一点,就我而言,我的 Slurm 设置不允许 --mem_per_cpu
中的sbatch
,只有--mem
。所以srun
命令仍然会分配所有内存并阻塞后续步骤。对我来说,关键是在 --mem_per_cpu
命令中指定 --mem
(或 srun
)。