在SLURM脚本中循环

时间:2017-12-13 16:41:41

标签: python cluster-computing slurm

我第一次使用群集进行计算,结果首次使用SLURM脚本。

我正在迭代我正在使用的数字列表中的python代码。我之前在自己的机器上使用bash脚本中的简单while循环执行了此操作。

我认为这会直接转换为SLURM脚本。但是,在执行时,只读取并执行列表的第一个数字,然后执行停止。因此,大约200个数字的其余部分被忽略。 有什么想法会导致这种情况吗?

这是SLURM脚本,供参考:

#!/bin/bash -l

#SBATCH -o ./job.out.%j
#SBATCH -e ./job.err.%j
#SBATCH -D ./
#SBATCH -J NAME
#SBATCH --nodes=2
#SBATCH --tasks-per-node=40
#SBATCH --cpus-per-task=1
#SBATCH --time=06:59:00

module load anaconda

while read IDX; do
    echo $PWD
    cd "model_"$IDX
    srun python ../mcmc.py 
    cd ".."
done <sample.txt

1 个答案:

答案 0 :(得分:1)

如果&#34; model_ $ IDX&#34;如果不存在,则以下cd ..将打破以下迭代。

一个简单的解决方法是

while read IDX; do
    echo $PWD
    if cd "model_"$IDX; then
        srun python ../mcmc.py 
        cd ".."
    fi
done <sample.txt

如果IDX是正整数且运行之间没有依赖关系,则更多SLURM&#39; ish方式是使用Job Array(只要您的系统限制允许您提交作业足以满足您需求的数组

你的工作脚本将是

#!/bin/bash -l

#SBATCH -o ./job.out.%j
#SBATCH -e ./job.err.%j
#SBATCH -D ./
#SBATCH -J NAME
#SBATCH --nodes=2
#SBATCH --tasks-per-node=40
#SBATCH --cpus-per-task=1
#SBATCH --time=06:59:00

module load anaconda

echo $PWD
cd "model_"$SLURM_ARRAY_TASK_ID
srun python ../mcmc.py 

然后使用解析sample.txt的外部脚本,并创建一个逗号分隔的索引字符串和

sbatch --array=<comma separated list of indexes> <slurm script>