如何提交部分脚本作为数组

How to submit a script partly as array

我在实验室的服务器上使用 Slurm,我想提交如下所示的作业:

#SBATCH ...

mkdir my/file/architecture
echo "#HEADER" > my/file/architecture/output_summary.txt

for f in my/dir/*.csv; do
    python3 myscript.py $f
done

有什么方法可以 运行 这样它可以完成第一条指令,然后 运行 for 并行循环?每一步都是独立的,所以他们可以同时运行。

最初的步骤不是很复杂,所以如果需要我可以将它分成一个单独的 SBATCH 脚本。 my/dir/ 但是包含大约 7000 个要处理的 csv 文件,因此手动将它们全部输入会很痛苦。

GNU Parallel 可能很适合这里,或者 xargs,尽管我更喜欢 parallel 在 Slurm 工作中。

这是一个 sbatch 脚本的示例 运行 8 路 parallel:

#!/bin/sh

#SBATCH ...
#SBATCH --nodes=1
#SBATCH --ntasks=

srun="srun --exclusive -N1 -n1"

# -j is the number of tasks parallel runs so we set it to $SLURM_NTASKS
# Note that --ntasks=1 and --cpus-per-task=8 will have srun start one copy of the program at a time. We use "find" to generate a list of files to operate on.

find /my/dir/*.csv -type f | parallel -j $SLURM_NTASKS "$srun python3 myscript.py {}"

最简单的方法是在单个节点上 运行,尽管 parallel 可以使用 SSH(我相信)在多台计算机上 运行。