求助:用Python自动化生成/修改SLURM脚本实现HPC批量任务提交
用Python批量生成带自定义变量的SLURM脚本
嘿,这个需求完全可行,而且实现起来特别简单!作为Python新手也能快速上手,我来给你拆解一下步骤:
第一步:创建SLURM模板文件
先写一个通用的SLURM脚本模板,把需要替换的变量用占位符标记出来(比如{{VAR_VALUE}}),这样Python就能精准替换。举个例子,保存为slurm_template.sh:
#!/bin/bash #SBATCH --job-name=matlab_task_{{VAR_VALUE}} #SBATCH --partition=your_partition #SBATCH --nodes=1 #SBATCH --ntasks-per-node=1 #SBATCH --output=task_{{VAR_VALUE}}_output.txt #SBATCH --error=task_{{VAR_VALUE}}_error.txt # 运行你的Matlab函数,传入变量 matlab -nodisplay -r "your_matlab_function({{VAR_VALUE}}); exit;"
注意:把上面的
your_partition和your_matlab_function换成你实际用的分区和函数名哦!
第二步:写Python脚本批量生成SLURM文件
这个脚本的逻辑很简单:读取模板→循环替换变量→生成每个任务的脚本。代码如下,保存为generate_slurm_jobs.py:
# 读取SLURM模板内容 with open('slurm_template.sh', 'r') as template_file: template_content = template_file.read() # 定义你需要的10个变量值,这里用1到10举例,你可以换成任意数值/字符串 variable_list = range(1, 11) for var in variable_list: # 替换模板里的占位符 job_content = template_content.replace('{{VAR_VALUE}}', str(var)) # 生成每个任务的脚本文件名 job_filename = f"slurm_job_{var}.sh" # 写入文件 with open(job_filename, 'w') as job_file: job_file.write(job_content) print(f"✅ 已生成脚本: {job_filename}")
进阶:生成后直接批量提交任务
如果想省事儿,生成脚本后直接用Python调用sbatch提交,只需要在上面的脚本里加几行:
import subprocess # 循环生成并提交 for var in variable_list: job_filename = f"slurm_job_{var}.sh" # 替换并写入脚本(和上面一样的代码) job_content = template_content.replace('{{VAR_VALUE}}', str(var)) with open(job_filename, 'w') as job_file: job_file.write(job_content) # 提交任务 try: subprocess.run(['sbatch', job_filename], check=True) print(f"✅ 已提交任务: {job_filename}") except subprocess.CalledProcessError: print(f"❌ 提交任务失败: {job_filename}")
怎么运行?
- 把模板文件和Python脚本放在同一个文件夹里
- 在终端里运行:
python generate_slurm_jobs.py - 等着脚本生成/提交10个任务就好啦!
这个方法特别灵活,以后要改变量或者SLURM参数,只需要修改模板或者variable_list就行,再也不用手动改10个文件啦~
内容的提问来源于stack exchange,提问作者Dan Goldwater
相关产品推荐
相关产品推荐

