如何让Slurm脚本读取文件名列表并批量提交数组任务
实现Slurm数组任务读取外部文件名列表
步骤1:创建文件名列表文件
先把所有要处理的文件名按顺序写入一个文本文件,比如命名为file_list.txt,每行一个文件名,对应数组任务的序号:
file_a.txt file_b.txt file_c.txt file_d.txt file_e.txt file_f.txt file_g.txt file_h.txt file_i.txt file_j.txt
(注意:第1行对应数组任务ID=1,第2行对应ID=2,以此类推,确保顺序和你需要的任务对应关系一致)
步骤2:修改Slurm脚本
更新你的Slurm脚本,添加数组任务配置,并通过任务ID读取对应文件名。以下是完整示例:
#!/bin/bash #SBATCH --job-name=python_array_job #SBATCH --array=1-10 # 启动10个任务,ID从1到10 #SBATCH --output=job_%A_%a.out # 每个任务生成独立日志,%A是主任务ID,%a是数组任务ID #SBATCH --error=job_%A_%a.err # 从file_list.txt中读取对应行的文件名 INPUT_FILE=$(sed -n "${SLURM_ARRAY_TASK_ID}p" file_list.txt) # 运行你的Python脚本,传入文件名参数 python your_script.py "$INPUT_FILE"
关键细节说明
$SLURM_ARRAY_TASK_ID是Slurm自动为每个数组任务分配的唯一ID,范围就是你设置的1-10- 使用
sed -n "${SLURM_ARRAY_TASK_ID}p"可以精准提取file_list.txt中第N行的内容,N就是当前任务的ID - 日志文件用
%A_%a命名,能避免不同任务的日志互相覆盖,方便后续排查问题
提交脚本的命令还是和之前一样:sbatch your_slurm_script.sh
内容的提问来源于stack exchange,提问作者user1551817
相关产品推荐
相关产品推荐

