运行 slurm 中的并行作业
Running parallel jobs in slurm
我想知道我是否可以同时询问一些关于 运行 slurm 作业的问题。(请注意,我是 slurm 和 linux 的新手,并且 2 天前才开始使用它.. .)
根据下图说明(来源:https://hpc.nmsu.edu/discovery/slurm/serial-parallel-jobs/),
我设计了以下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 test_bash
但是,当我查看输出时,很明显 bash 脚本中只有一个 sruns
正在执行...谁能告诉我我哪里出错了以及如何出错我可以修好吗?
**更新:当我查看错误文件时,我得到以下信息:srun: Job 43969 step creation temporarily disabled, retrying
。我在网上搜索了一下,它说这可能是由于没有指定内存造成的,因此没有足够的内存来进行第二份工作..但我认为我在做 --mem_per_cpu=300MB
?[=19 时已经指定了内存=]
**更新:我已尝试按照此处所述更改代码:,但是..仍然没有用
** 可能相关的信息:我们的节点大约有 96 个核心,与教程中说一个节点有 4 个核心或其他东西相比,这似乎很奇怪
谢谢!!
尝试将 --exclusive
添加到 srun
命令行:
srun --exclusive --ntasks=1 python FINAL_ARGPARSE_RUN.py --n_division 30 --start_num ${num} &
这将指示 srun
使用 sub-allocation 并按您的预期工作。
请注意,--exclusive
选项在此上下文中的含义与与 sbatch
一起使用时的含义不同。
另请注意,不同版本的 Slurm 有不同的规范方式来执行此操作,但使用 --exclusive
应该适用于大多数版本。
即使你已经解决了你的问题,但结果是其他问题,并且你已经在你的 sbatch
脚本中指定了 --mem_per_cpu=300MB
,我想在我的例子中补充一点,我的 Slurm 设置不允许 sbatch
中的 --mem_per_cpu
,仅 --mem
。所以 srun
命令仍然会分配所有内存并阻塞后续步骤。对我来说,关键是在 srun
命令中指定 --mem_per_cpu
(或 --mem
)。
我想知道我是否可以同时询问一些关于 运行 slurm 作业的问题。(请注意,我是 slurm 和 linux 的新手,并且 2 天前才开始使用它.. .)
根据下图说明(来源:https://hpc.nmsu.edu/discovery/slurm/serial-parallel-jobs/),
我设计了以下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 test_bash
但是,当我查看输出时,很明显 bash 脚本中只有一个 sruns
正在执行...谁能告诉我我哪里出错了以及如何出错我可以修好吗?
**更新:当我查看错误文件时,我得到以下信息:srun: Job 43969 step creation temporarily disabled, retrying
。我在网上搜索了一下,它说这可能是由于没有指定内存造成的,因此没有足够的内存来进行第二份工作..但我认为我在做 --mem_per_cpu=300MB
?[=19 时已经指定了内存=]
**更新:我已尝试按照此处所述更改代码:
** 可能相关的信息:我们的节点大约有 96 个核心,与教程中说一个节点有 4 个核心或其他东西相比,这似乎很奇怪
谢谢!!
尝试将 --exclusive
添加到 srun
命令行:
srun --exclusive --ntasks=1 python FINAL_ARGPARSE_RUN.py --n_division 30 --start_num ${num} &
这将指示 srun
使用 sub-allocation 并按您的预期工作。
请注意,--exclusive
选项在此上下文中的含义与与 sbatch
一起使用时的含义不同。
另请注意,不同版本的 Slurm 有不同的规范方式来执行此操作,但使用 --exclusive
应该适用于大多数版本。
即使你已经解决了你的问题,但结果是其他问题,并且你已经在你的 sbatch
脚本中指定了 --mem_per_cpu=300MB
,我想在我的例子中补充一点,我的 Slurm 设置不允许 sbatch
中的 --mem_per_cpu
,仅 --mem
。所以 srun
命令仍然会分配所有内存并阻塞后续步骤。对我来说,关键是在 srun
命令中指定 --mem_per_cpu
(或 --mem
)。