只有一些并行步骤的作业数组和 shell 脚本

Job arrays and shell script with only some parallel steps

我正在使用我使用 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 命令修复此脚本?我是否需要使用 s运行,如此回答:?我不完全理解如何实现那里和文档中提到的 wait 和 --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