根据集群负载动态提交SGE集群上的Qsub作业
-
21-12-2019 - |
题
我正在尝试在最多支持 688 个作业的 SGE(Sun Grid Engine)集群上运行 qsub 作业。我想知道是否有任何方法可以找出集群上当前正在运行的作业总数,以便我可以根据当前集群负载提交作业。
我计划做类似的事情:休眠1分钟,再次检查集群中的作业数量是否< 688,然后进一步提交作业。
只是为了澄清我的问题涉及了解集群上提交的作业总数,而不仅仅是我当前提交的作业。
提前致谢。
解决方案
可以使用qstat
列出所有用户的作业;具有awk
和wc
的功能可用于在群集中查找群集的总数:
qstat -u "*" | awk '{if ($5 == "r" || $5 == "qw") print $0;}' | wc -l
.
上面的命令还考虑了排队的作业,并等待在计算节点上安排。
但是,群集sysadmins可能禁止用户检查不属于它们的作业。您可以通过运行来验证您是否可以查看其他用户的作业:qstat -u "*"
.
如果您知道另一个用户正在运行作业,但在运行上面的命令时无法看到它,那么它很可能是sys管理员禁用该选项。
事后:从我的理解中,你只是一个常规的集群用户 - 你为什么甚至打扰这种方式就会提交工作。为什么不刚提交所需的所有作业,如果群集无法安排工作,则将它们放在qw
状态下,并在SGE感觉是最合适的时间时安排它们。
其他提示
根据集群的配置方式,使用作业数组(-t
选项 qsub
)将绕过这个限制。
我对单个用户可以提交的最大作业数设置了类似的限制。此限制适用于个别实例 qsub
并且不是单个作业数组提交可能有许多任务(该限制是通过另一个配置变量设置的, max_aj_tasks
).
不隶属于 StackOverflow