我必须使用sbatch在集群上运行多个模拟。在一个文件夹中,我有要运行的Python脚本和一个与sbatch一起使用的文件:
#!/bin/bash -l
#SBATCH --time=04:00:00
#SBATCH --nodes=32
#SBATCH --ntasks-per-core=1
#SBATCH --ntasks-per-node=36
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal
#SBATCH --constraint=mc
module load Python
source /scratch/.../env/bin/activate
srun python3 script.py
deactivate
我要做的是运行相同的Python脚本,但为--nodes使用不同的值。我怎样才能做到这一点?此外,我想为每个运行创建一个文件夹,其中将保存slurm文件(输出),名称类似于" nodes_xy"。
答案 0 :(得分:3)
假设您的脚本名为submit.sh
,您可以从脚本中删除--nodes
并运行:
for i in 2 4 8 16 32 64; do sbatch --nodes $i --output nodes_$i.txt, submit.sh; done
这将提交submit.sh
脚本,其中包含两个附加参数--nodes
和--output
,第一个用于控制使用的节点数,第二个用于指定名称输出文件,对于每个值2,4,8等。请注意,所有输出文件都将在当前目录中,如果您确实需要在单独的目录中,则需要开发一行内容。
如果允许的最大允许运行时间允许,您可以在单个作业中执行所有运行,如下所示:
#!/bin/bash -l
#SBATCH --time=04:00:00
#SBATCH --nodes=32
#SBATCH --ntasks-per-core=1
#SBATCH --ntasks-per-node=36
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal
#SBATCH --constraint=mc
module load Python
source /scratch/.../env/bin/activate
for i in 2 4 8 16 32 64;
do
srun --nodes $i python3 script.py > nodes_$i
done
deactivate