在 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
``
我正在使用一个简单的 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
``