如何在HPC中批量运行多个基于Python的Slurm任务
批量提交Slurm任务的高效方法
你完全可以不用单独编写100个Slurm脚本,就能批量提交这些任务,不过要避开你示例里的串行执行问题——直接在一个脚本里挨个写python命令会让任务按顺序跑完一个再跑下一个,完全浪费HPC的并行能力。下面是两种更高效的方案:
方案一:批量提交独立Slurm作业(推荐)
这种方式会为每个年份任务创建独立的Slurm作业,能被集群并行调度,充分利用资源。
方法1:模板脚本+循环提交
先写一个通用的Slurm模板脚本job_template.sh:
#!/bin/bash #SBATCH -n 2 #SBATCH -p main #SBATCH --qos main #SBATCH -N 1 #SBATCH -J process_%1 python process%1.py
然后在终端用bash循环批量提交:
for i in {1..100}; do sbatch --job-name=process_$i job_template.sh $i done
方法2:循环内直接生成Slurm脚本
不用单独写模板,直接通过Here Document在循环里生成每个任务的Slurm配置:
for i in {1..100}; do sbatch << EOF #!/bin/bash #SBATCH -n 2 #SBATCH -p main #SBATCH --qos main #SBATCH -N 1 #SBATCH -J process_$i python process$i.py EOF done
方案二:单Slurm作业内并行执行所有任务
如果想把所有任务放在同一个Slurm作业里并行跑,需要调整资源分配参数,用srun启动每个任务:
#!/bin/bash #SBATCH -n 200 # 100个任务×每个任务2核 #SBATCH -p main #SBATCH --qos main #SBATCH -N 1 #SBATCH -J batch_process # 循环启动所有任务,后台运行 for i in {1..100}; do srun --exclusive -n 2 python process$i.py & done wait # 等待所有后台任务完成
这里--exclusive确保每个任务能独占分配的2核资源,&让任务后台并行执行,wait保证脚本在所有任务完成后再退出。
注意:你示例里的写法是串行执行,100个任务会依次运行,效率极低,不建议使用。
内容的提问来源于stack exchange,提问作者lsr729
相关产品推荐
相关产品推荐

