PBS 扭矩:如何解决并行任务中的核心浪费问题,这些任务彼此花费的时间非常不同?

PBS torque: how to solve cores waste problem in parallel tasks that spend very different time from each other?

我在由 PBS 扭矩管理的集群中 运行 宁并行 MATLAB 或 python 任务。现在尴尬的情况是 PBS 认为我使用的是 56 个内核,但那是第一个,最终我只有 7 个最困难的任务 运行ning。现在浪费了49个核心。

我的并行任务花费的时间非常不同,因为它们在不同的模型参数中进行搜索,在我尝试之前我不知道哪个任务会花费多少时间。一开始使用了所有内核,但很快就只使用了最困难的任务 运行。由于整个任务尚未完成,PBS 扭矩仍然认为我正在使用完整的 56 个内核并阻止新任务 运行 但实际上大多数内核都处于空闲状态。我希望 PBS 检测到这一点并使用空闲内核来执行 运行 新任务。

所以我的问题是PBS torque中是否有一些设置可以自动检测任务中使用的真实核心,并将真正空闲的核心分配给新任务?

#PBS -S /bin/sh
#PBS -N alps_task
#PBS -o stdout
#PBS -e stderr
#PBS -l nodes=1:ppn=56
#PBS -q batch
#PBS -l walltime=1000:00:00
#HPC -x local
cd /tmp/$PBS_O_WORKDIR
alpspython spin_half_correlation.py 2>&1 > tasklog.log

对您的问题的简短回答是:PBS 无法回收分配给作业的未使用资源。

由于你的计算本质上是一堆独立的任务,你可以而且可能应该做的是尝试将你的工作分成 56 个独立的工作,每个 运行 宁一个单独的模型参数组合,当所有作业已完成,您可以 运行 额外的作业来收集和汇总结果。这是一种得到很好支持的做事方式。 PBS 为此类作业提供了一些有用的功能,例如 array jobsjob dependencies.