【问题标题】:Torque nested/successive qsub call扭矩嵌套/连续 qsub 调用
【发布时间】:2013-07-19 21:15:09
【问题描述】:

我有一个作业脚本compile.pbs,它在单个 CPU 上运行并编译源代码以创建可执行文件。然后我有一个第二个作业脚本jobscript.pbs,我使用 32 个 CPU 调用它来使用 MPI 运行新创建的可执行文件。当我连续手动调用它们时,它们都可以完美地工作,但我想通过让第一个脚本在它结束之前调用第二个作业脚本来自动化这个过程。 有没有办法正确嵌套 qsub 调用或让它们被连续调用?

目前我的尝试是让第一个脚本在它结束之前调用第二个脚本,但是当我尝试时,我从第二个(嵌套)qsub 收到一条奇怪的错误消息:

qsub: Bad UID for job execution MSG=ruserok failed validating masterhd/masterhd from s59-16.local

我认为第二个脚本被正确调用,但权限可能与我调用原始脚本时不同。显然我的用户名masterhd 被允许运行作业脚本,因为当我手动调用作业脚本时它工作正常。有没有办法完成我想做的事情?

这里有一个更详细的过程示例。首先,我调用第一个作业脚本并使用-v 指定一个变量:

qsub -v outpath='/home/dest_folder/' compile.pbs

outpath 变量只是指定将新可执行文件复制到哪里,然后第二个作业脚本更改到该输出目录并尝试运行 jobscript.pbs

编译.pbs:

#!/bin/bash
#PBS -N compile
#PBS -l walltime=0:05:00
#PBS -j oe
#PBS -o ocompile.txt

#Perform compiling stuff:
module load gcc-openmpi-1.2.7
rm *.o
make -f Makefile
#Copy the executable to the destination:
cp visct ${outpath}/visct
#Change to the output path before calling the next jobscript:
cd ${outpath}
qsub jobscript

jobscript.pbs:

#!/bin/bash
#PBS -N run_exe
#PBS -l nodes=32
#PBS -l walltime=96:00:00
#PBS -j oe
#PBS -o results.txt

cd $PBS_O_WORKDIR
module load gcc-openmpi-1.2.7
time mpiexec visct

【问题讨论】:

    标签: linux mpi cluster-computing qsub torque


    【解决方案1】:

    您可以创建一个提交脚本,对两个作业进行 qsubs 处理,但仅当第一个作业完成且没有错误之后才执行第二个作业:

    JOB1CMD="qsub -v outpath='/home/dest_folder/' compile.pbs -t"  # -t for terse output
    JOB1OUT=$(eval $JOB1CMD)
    JOB1ID=${JOB1OUT%%.*}  # parse to get job id, change accordingly
    
    JOB2CMD="qsub jobscript.pbs -W depend=afterok:$JOB1ID"
    eval $JOB2CMD
    

    【讨论】:

    • JOB0.walltime应该如何设置,即提交脚本的walltime? JOB0.walltime = JOB1.walltime + JOB2.walltime ? JOB0.walltime = error_margin(JOB1.walltime + JOB2.walltime) ,其中 1
    【解决方案2】:

    您的系统可能存在限制,无法在脚本中运行脚本。您的第一个作业只运行 5 分钟,然后第二个作业需要 96 小时。如果在第一个工作中请求第二个工作,那将违反第一个工作的时间限制。

    为什么不能把编译部分放在第二个脚本的开头?

    【讨论】:

    • 最初这行不通,因为我不知道如何更改 PBS 文件中 CPU 的硬编码数量,根据我是否要编译来请求 1 或 32 个 CPU -仅或编译并运行。但显然我可以通过在必要时将-l nodes=32 传递给 qsub 调用来覆盖 PBS 文件中的值。
    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多