PBS批处理系统是否跨节点移动多个串行作业?

Lt *_*Dax 5 pbs torque

如果我需要"并行"运行许多串行程序(因为问题很简单但很耗时 - 我需要为同一个程序读取许多不同的数据集),如果我只使用一个节点,解决方案很简单.我所做的就是在每个命令之后继续使用&符号提交串行作业,例如在作业脚本中:

./program1 &
./program2 &
./program3 &
./program4
Run Code Online (Sandbox Code Playgroud)

这将自然地在不同的处理器上运行每个串行程序.这在登录服务器或独立工作站上运行良好,当然也适用于只需要一个节点的批处理作业.

但是,如果我需要运行同一程序的110个不同实例来读取110个不同的数据集呢?如果我使用提交110 ./program#命令的脚本提交到多个节点(比如14),批处理系统是否会在不同节点上的不同处理器上运行每个作业,或者它是否会尝试在同一个节点上运行它们, 8个核心节点?

我曾尝试使用简单的MPI代码来读取不同的数据,但会产生各种错误,110个流程中有大约100个成功,其他流程崩溃.我也考虑了作业数组,但我不确定我的系统是否支持它.

我已经在各个数据集上广泛测试了串行程序 - 没有运行时错误,并且我没有超过每个节点上的可用内存.

Jon*_*rsi 5

不,PBS不会为您自动在节点之间分配作业.但这是一个常见的事情,你有几个选择.

  • 最简单且在某些方面最有利于您的是将任务分成1节点大小的块,并将这些捆绑包作为单独的作业提交.这将使您的工作更快地开始; 单节点作业通常会比(比方说)14节点作业更快地进行调度,因为调度表中的单节点大小比14更多.如果所有作业花费大致相同的时间,则效果特别好因为那时做分工非常简单.

  • 如果您确实希望在一个作业中完成所有操作(例如,为了简化簿记),您可能有也可能无法访问pbsdsh命令; 有它的一个很好的讨论在这里.这使您可以在作业中的所有处理器上运行单个脚本.然后编写一个查询$ PBS_VNODENUM的脚本,找出它所在的nnodes*ppn作业,然后运行相应的任务.

  • 如果不是pbsdsh,Gnu parallel是另一种可以极大地简化这些任务的工具.它就像xargs,如果你熟悉它,但会并行运行命令,包括多个节点.所以你提交你的(比方说)14节点作业并让第一个节点运行gnu并行脚本.好处是,即使作业长度不同,这也会为您安排.我们给我们的用户的系统上使用GNU平行于这些事情的建议是在这里.请注意,如果您的系统上没有安装gnu parallel,并且由于某种原因您的系统管理员不会这样做,您可以在主目录中进行设置,这不是一个复杂的构建.