如何提交部分脚本作为数组
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(我相信)在多台计算机上 运行。
我在实验室的服务器上使用 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(我相信)在多台计算机上 运行。