通过命令行参数在脚本中设置 PBS/Torque/qsub 参数

D-W*_*D-W 3 bash qsub pbs torque

我希望能够轻易改变多少nodesppn等我向qsub通过脚本。也就是说,我想运行这样的东西:

qsub script.sh --name=test_job --nodes=2 --ppn=2 --arg1=2
Run Code Online (Sandbox Code Playgroud)

使用如下脚本:

#/bin/bash
#PBS -N ${NAME}
#PBS -l nodes=${NODES}:ppn=${PPN},walltime=${WALLTIME}
#PBS -q ${QUEUE}
#PBS -m ${MAILOPTS}
#PBS -M ${EMAIL}

/some/command ${ARG1}
Run Code Online (Sandbox Code Playgroud)

因此,我希望能够传入既会改变 PBS 环境又会影响可执行文件本身的参数。

我试过使用以下-v参数qsub

qsub script.sh -v NAME=test_job,NODES=16,PPN=16,ARG1=2
Run Code Online (Sandbox Code Playgroud)

但是提交的作业名称为script.sh1 node, 1 ppn

关于解决这个问题的任何想法?

D-W*_*D-W 5

@dbeer 的回答给了我更多的见识。我的问题的解决方案如下:

#PBSargs 被命令行覆盖。在这种情况下,必须将 PBS 的 args 和脚本本身分开。因此,而不是尝试执行以下操作:

#PBS -l nodes=${NODES}:ppn=${PPN},walltime=${WALLTIME}

/some/command ${ARG1}
Run Code Online (Sandbox Code Playgroud)

在脚本内部并运行

qsub script.sh -v NODES=2,PPN=2,WALLTIME=160:00:00,ARG1=2
Run Code Online (Sandbox Code Playgroud)

这些都可以通过 args 设置为qsub自身:

qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00
Run Code Online (Sandbox Code Playgroud)

然后,任何需要传递给可执行文件的-v参数都可以通过参数传递给qsub

qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00 -v ARGS1=2
Run Code Online (Sandbox Code Playgroud)