如何在CentOS 7.7超算服务器批量提交指定范围的SLURM任务
批量提交SLURM任务的实用方案
我经常在CentOS超算集群上处理这类批量计算任务,针对你的需求,我准备了两种解决方案——优先满足你要的Python脚本实现,同时也提供一个更轻量的Shell脚本选项,都能快速完成78到151号任务的批量提交。
一、Python脚本实现
这个方案适合习惯用Python的用户,逻辑清晰,容易扩展修改:
import subprocess # 设置任务的起始和结束编号 start_task = 78 end_task = 151 # 定义SLURM命令模板,所有需要替换的数字用{task_num}占位 sbatch_command_template = """module load GPAW && sbatch --job-name=job_{task_num} -e error_{task_num}.err -o output_{task_num}.out -n 16 -N 1 -p xeon16 -t 80:00:00 --mail-type=END,FAIL --mail-user=xxxxx@xxx.xx calc.py tmp_folder/input_{task_num}.traj""" # 循环提交每个任务 for task_num in range(start_task, end_task + 1): # 替换模板中的占位符,生成当前任务的提交命令 current_cmd = sbatch_command_template.format(task_num=task_num) print(f"正在提交任务 {task_num}...") # 执行提交命令,check=True会在命令执行失败时终止并报错,方便排查问题 subprocess.run(current_cmd, shell=True, check=True)
注意事项:
- 请根据你的实际文件名调整模板中的
input_{task_num}.traj:如果你的文件是input78.traj(无下划线),就改成input{task_num}.traj - 记得把
xxxxx@xxx.xx替换成你自己的邮箱地址 - 可以先把
end_task改成79,测试提交一两个任务,确认生成的错误文件、输出文件路径和任务名称都正确后,再全量提交
二、Shell脚本实现
如果不想写Python,这个Shell脚本更轻量,直接在超算终端就能运行:
#!/bin/bash # 设置任务起始和结束编号 START=78 END=151 # 循环遍历每个任务编号 for ((NUM=START; NUM<=END; NUM++)) do echo "提交任务 ${NUM}..." module load GPAW && sbatch --job-name=job_${NUM} -e error_${NUM}.err -o output_${NUM}.out -n 16 -N 1 -p xeon16 -t 80:00:00 --mail-type=END,FAIL --mail-user=xxxxx@xxx.xx calc.py tmp_folder/input_${NUM}.traj done
使用方法:
- 把上面的内容保存为
submit_jobs.sh - 给脚本添加执行权限:
chmod +x submit_jobs.sh - 运行脚本:
./submit_jobs.sh
同样要注意文件名格式和邮箱地址的替换,测试一两个任务没问题再全量提交。
内容的提问来源于stack exchange,提问作者user11914512
相关产品推荐
相关产品推荐

