有一份工作取决于 SLURM 中的数组作业
Having a job depend on an array job in SLURM
我有两个作业脚本要提交给 SLURM,jobA.sh 和 jobB.sh。 jobA 是一个数组作业,我希望 jobB 仅在所有 jobA 完成后才开始。我的 jobA.sh 脚本是:
#!/bin/bash
#SBATCH -A TRIGWMS
#SBATCH --mail-type=FAIL
# cores per task
#SBATCH -c 11
#
#SBATCH --array=%#combo#%%100
#SBATCH -J %#profile#%_%#freq#%
#
# number of nodes
#SBATCH -N 1
#
#SBATCH -t 0-2:00:00
# Standard output is saved in this file
#SBATCH -o myjob_%A_%a.out
#
# Standard error messages are saved in this file
#SBATCH -e myjob_%A_%a.err
#
# set the $OMP_NUM_THREADS variable
export OMP_NUM_THREADS=12
./myjobA_$SLURM_ARRAY_TASK_ID
这个作业脚本 运行 很好,但我似乎无法在它完成后将作业 B 转到 运行。 jobB 有以下脚本:
#!/bin/bash
#SBATCH -A TRIGWMS
#SBATCH --mail-type=FAIL
# cores per task
#SBATCH -c 11
#
# number of nodes
#SBATCH -N 1
#SBATCH --ntasks=1
#SBATCH -J MESA
#SBATCH -t 0-2:00:00
# Standard output is saved in this file
#SBATCH -o myjob_%A_%a.out
#
# Standard error messages are saved in this file
#SBATCH -e myjob_%A_%a.err
#
# set the $OMP_NUM_THREADS variable
ompthreads=$SLURM_JOB_CPUS_PER_NODE
export OMP_NUM_THREADS=$ompthreads
./myjobB
此脚本也可以正常工作,但前提是 jobA 是 运行 第一个。为了尝试提交这两个作业,jobB 依赖于 jobA,我使用了以下脚本:
#!/bin/bash
FIRST=$(sbatch -p bigmem --mail-user=$USER@something.ac.uk jobA.sh)
echo $FIRST
SECOND=$(sbatch --dependency=afterany:$FIRST jobB.sh)
echo $SECOND
exit 0
但这只提交了第一个并带有错误 'sbatch: error: Unable to open file batch'(我最初在那里有 -p bigmem --mail 等,但为了检查而把它拿出来)。问题出在 --dependency 部分,一旦我删除所有这些部分都已提交,但我需要 jobB 在 jobA 完成后开始。
您应该使用 --parsable
选项提交您的第一份工作。
FIRST=$(sbatch -p bigmem --mail-user=$USER@something.ac.uk --parsable jobA.sh)
否则,FIRST
变量包含类似于以下内容的字符串:
Submitted batch job 123456789
所以你的第二行在 Bash 的变量扩展后看起来像这样:
SECOND=$(sbatch --dependency=afterany:Submitted batch job 123456789 jobB.sh)
所以 sbatch
实际上是试图找到一个名为 batch
的脚本,并且 运行 它带有参数 job 123456789 jobB.sh
。使用 --parsable
选项,sbatch
将仅使用作业 ID 进行响应,您的线路应按原样工作。
如果您的集群运行的 Slurm 版本太旧,--parsable
选项可能不可用,在这种情况下您可以按照 this advice.
我有两个作业脚本要提交给 SLURM,jobA.sh 和 jobB.sh。 jobA 是一个数组作业,我希望 jobB 仅在所有 jobA 完成后才开始。我的 jobA.sh 脚本是:
#!/bin/bash
#SBATCH -A TRIGWMS
#SBATCH --mail-type=FAIL
# cores per task
#SBATCH -c 11
#
#SBATCH --array=%#combo#%%100
#SBATCH -J %#profile#%_%#freq#%
#
# number of nodes
#SBATCH -N 1
#
#SBATCH -t 0-2:00:00
# Standard output is saved in this file
#SBATCH -o myjob_%A_%a.out
#
# Standard error messages are saved in this file
#SBATCH -e myjob_%A_%a.err
#
# set the $OMP_NUM_THREADS variable
export OMP_NUM_THREADS=12
./myjobA_$SLURM_ARRAY_TASK_ID
这个作业脚本 运行 很好,但我似乎无法在它完成后将作业 B 转到 运行。 jobB 有以下脚本:
#!/bin/bash
#SBATCH -A TRIGWMS
#SBATCH --mail-type=FAIL
# cores per task
#SBATCH -c 11
#
# number of nodes
#SBATCH -N 1
#SBATCH --ntasks=1
#SBATCH -J MESA
#SBATCH -t 0-2:00:00
# Standard output is saved in this file
#SBATCH -o myjob_%A_%a.out
#
# Standard error messages are saved in this file
#SBATCH -e myjob_%A_%a.err
#
# set the $OMP_NUM_THREADS variable
ompthreads=$SLURM_JOB_CPUS_PER_NODE
export OMP_NUM_THREADS=$ompthreads
./myjobB
此脚本也可以正常工作,但前提是 jobA 是 运行 第一个。为了尝试提交这两个作业,jobB 依赖于 jobA,我使用了以下脚本:
#!/bin/bash
FIRST=$(sbatch -p bigmem --mail-user=$USER@something.ac.uk jobA.sh)
echo $FIRST
SECOND=$(sbatch --dependency=afterany:$FIRST jobB.sh)
echo $SECOND
exit 0
但这只提交了第一个并带有错误 'sbatch: error: Unable to open file batch'(我最初在那里有 -p bigmem --mail 等,但为了检查而把它拿出来)。问题出在 --dependency 部分,一旦我删除所有这些部分都已提交,但我需要 jobB 在 jobA 完成后开始。
您应该使用 --parsable
选项提交您的第一份工作。
FIRST=$(sbatch -p bigmem --mail-user=$USER@something.ac.uk --parsable jobA.sh)
否则,FIRST
变量包含类似于以下内容的字符串:
Submitted batch job 123456789
所以你的第二行在 Bash 的变量扩展后看起来像这样:
SECOND=$(sbatch --dependency=afterany:Submitted batch job 123456789 jobB.sh)
所以 sbatch
实际上是试图找到一个名为 batch
的脚本,并且 运行 它带有参数 job 123456789 jobB.sh
。使用 --parsable
选项,sbatch
将仅使用作业 ID 进行响应,您的线路应按原样工作。
如果您的集群运行的 Slurm 版本太旧,--parsable
选项可能不可用,在这种情况下您可以按照 this advice.