如何解决作业数组和Shell脚本仅需几个并行步骤
我正在使用我使用sbatch提交的以下.sh脚本。 Pairwise_3_P_a.do和Pairwise_3_P_c.do是只应运行一次的线性步骤,而Pairwise_3_P_b.do使用数组。我在完成数组之前正在运行Pairwise_3_P_c.do时遇到问题。
是否有使用--wait或wait bash命令修复此脚本的方法?我是否需要使用srun,如以下答案所示:How to hold up a script until a slurm job (start with srun) is completely finished??我不完全了解如何实现那里和文档中提到的wait and --wait。
#!/bin/bash
#SBATCH --array=1-248
module load stata
stata-mp Pairwise_3_P_a.do
stata-mp Pairwise_3_P_b.do $SLURM_ARRAY_TASK_ID
stata-mp Pairwise_3_P_c.do
到目前为止,我一直在尝试将并行步骤拆分成一个单独的.sh脚本,但这很烦人。
谢谢。
解决方法
提交脚本的编写方式将创建248个作业,每个作业的第一步和最后一步都完全相同,而第二步只是不同。这可能不是您想要的。
您应该将三行拆分为三个不同的作业,只有第二个应该是作业数组。我认为订单在这里很重要。
Job1.sh:
#!/bin/bash
module load stata
stata-mp Pairwise_3_P_a.do
Job2.sh:
#!/bin/bash
#SBATCH --array=1-248
module load stata
stata-mp Pairwise_3_P_b.do $SLURM_ARRAY_TASK_ID
Job3.sh:
#!/bin/bash
module load stata
stata-mp Pairwise_3_P_c.do
设置好这些文件后,运行以下命令:
FIRSTJOBID=$(sbatch --parsable Job1.sh)
SECONDJOBID=$(sbatch --parsable --dependendcy=afterok:$FIRSTJOBID Job2.sh)
sbatch --parsable --dependendcy=afterany:$SECONDJOBID Job3.sh
另外,在开始stata-mp
时,请求至少一个以上的内核以使Stata能够使用其多线程功能是有意义的,例如:
--cpus-per-task=8
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。