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

Setting PBS/Torque/qsub parameters in script via command line arguments

我希望能够通过脚本轻松更改提交给 qsubnodesppn 等数量。也就是说,我想要 运行 像这样的东西:

qsub script.sh --name=test_job --nodes=2 --ppn=2 --arg1=2

使用如下脚本:

#/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}

所以,我希望能够传递既能改变 PBS 环境又能改变可执行文件本身的参数。

我试过使用 qsub-v 参数:

qsub script.sh -v NAME=test_job,NODES=16,PPN=16,ARG1=2

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

有什么解决方案吗?

在 Torque 中,当在命令行上指定匹配参数时,所有 #PBS 参数都会被覆盖。例如,如果您的脚本具有:

#PBS -l nodes=2

您可以提交:

qsub script.sh -l nodes=4

并且命令行将优先于脚本。文档有 complete list 个命令行参数。

@dbeer 的回答让我有了更多的了解。我的问题解决方法如下:

#PBS 参数被命令行覆盖。在这种情况下,PBS 的参数和脚本本身必须分开。因此,与其尝试做类似的事情:

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

/some/command ${ARG1}

在脚本中 运行 喜欢

qsub script.sh -v NODES=2,PPN=2,WALLTIME=160:00:00,ARG1=2

这些都可以用 args 设置为 qsub 本身:

qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00

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

qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00 -v ARGS1=2