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

标签 pbs torque

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

./program1 &
./program2 &
./program3 &
./program4

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

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

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

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

最佳答案

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

  • 最简单且在某些方面对您来说最有利的是将任务打包成 1 节点大小的 block ,并将这些任务包作为单独的作业提交。这将使您的工作更快开始; 1 节点作业通常比 14 节点作业调度得更快,只是因为调度中单节点大小的漏洞多于 14 个节点。如果所有作业花费的时间大致相同,那么这种方法效果特别好,因为这样除法就非常简单了。

  • 如果您确实想在一项工作中完成所有工作(例如,为了简化簿记),您可能有权也可能没有访问 pbsdsh 命令;有一个很好的讨论here 。这使您可以在作业中的所有处理器上运行单个脚本。然后,您编写一个脚本来查询 $PBS_VNODENUM 以找出它是哪个 nnodes*ppn 作业,并运行相应的任务。

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

关于pbs - PBS 批处理系统是否跨节点移动多个串行作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5453427/

相关文章:

output - MPI pbs 输出文件在运行时可用吗?

jobs - 从 qstat 列表中删除已退出的作业

linux - 如何以正确的方式向 PBS 系统提交工作列表?

python - 以令人尴尬的并行方式运行 MPI 代码(在 PBS-Torque 集群上)

iphone - 普通 iPhone 应用程序的游戏引擎使用情况

session - Ubuntu:远程登录 (SSHD) - 在超时时终止 session 和作业

pbs - PBS_NODEFILE在pbs中是如何工作的?

bash - 扭矩的 job_state 值列表

linux - pbsnodes 输出 - 'status' 中的项目是什么?

matlab - 连接笔记本电脑/台式机以形成 MATLAB 计算集群?