如何解决如何将脚本部分提交为数组
我在实验室的服务器上使用 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
,不过我更喜欢在 Slurm 工作中使用 parallel
。
以下是运行 8 路 sbatch
的 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(我相信)在多台计算机上运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。