在 SHELL 脚本中提交大量作业

Submit lots of jobs in a SHELL script

我正在使用一个简单的 shell 脚本在 HPC 中读取和写入大量文件(超过 300 个文件),我想使用 slurm 提交它。

脚本如下所示:

#!/bin/bash
#SBATCH -n 1
#SBATCH --ntasks-per-node=40
#SBATCH --exclusive

for in_file in ${in_files}; do
    # do something with ${in_file} and ${out_file}
    echo ${in_file} ${out_file}
done

我可能无法一次提交所有任务,因为文件数量超过了我可以使用的节点数。那么有没有更好的方法来处理大量的文件呢?

文件是完全独立的吗?听起来你可以制作一个 bash 脚本来为每个文件安排一个作业并将其传递给每个作业。一种方法是作为环境变量。

类似

#!/bin/bash
for in_file in ${in_files}; do
    export in_file=${in_file}
    sbatch slurmjob.sh
done

你的 slurmjob.sh 是这样的

#!/bin/bash
#SBATCH -n 1
#SBATCH --ntasks-per-node=1
 
do something with ${in_file} and ${out_file}
echo ${in_file} ${out_file} > somefile.txt
``