![集群中的扭矩](https://linux22.com/image/1229506/%E9%9B%86%E7%BE%A4%E4%B8%AD%E7%9A%84%E6%89%AD%E7%9F%A9.png)
我正在学习并且对使用 PBS 在集群中提交作业有一些疑问。
(1) 如果一个作业通过 MPI 并行化并通过 mpirun 运行而不使用 qsub,它可以在不同的节点上运行。那么使用 qsub 有什么意义呢?
qsub 未提交的作业是否已排队?
(2)在qsub提交的pbs脚本中,所有命令都是依次执行的吗?
如果我想同时运行多个可执行文件,是否可以通过在末尾添加“&”来使这些调用变为后台调用?
(3) 在 pbs 脚本中,如果运行可执行文件的几个调用通过后台运行同时运行,那么指定的节点数和每个节点的处理器数是否为所有这些调用所需的总数?
如果是,并且指定的节点数和每个节点的处理器数不完全可用但足以运行某些调用,那么其中一些调用是否会首先运行或延迟,直到请求的总资源完全可用?
谢谢!
更新:
为了让您更好地理解我上面的问题,我们的集群是一个带有 Torque 和 Maui 的 Linux 集群。我在网上阅读教程,发现编译只在头节点上进行,通过 qsub 提交作业后,其他节点正在运行在头节点上编译的可执行文件。这就是我的问题出现的原因。
答案1
我已经有一段时间没有使用 PBS 了,只使用 SGE,所以这些答案可能有点以 SGE 为中心。
使用队列系统的原因是为了更好地利用资源。如果您有一个由 1000 个节点和 100 个用户组成的集群,您不希望所有节点都登录,并尝试运行 mpirun 以使用所有 1000 个节点。相反,您可以让他们提交需要资源(例如 10-20 个 CPU、4 GB 内存等)的作业,然后队列系统负责在可用机器上分派作业。此外,如果您没有那么多用户和那么大的集群,您可能需要运行 100 个作业。只需将它们全部提交给队列系统,让它在后台工作,在夜间和周末,您的所有资源都将得到有效利用。您可以做的一件很酷的事情是让队列系统根据需求启动和停止您的机器,这样如果您没有作业,它就会关闭您的节点,而当您提交作业时,它会启动适当数量的机器。可能会节省大量电力!
脚本的运行方式与手动启动时相同,只是它有一个环境,知道要使用哪些节点、在哪个目录中运行等等。如果您确实希望作业在后台运行,您可以在末尾使用 & 来启动它们,但请记住在末尾等待正在运行的作业,否则您的队列系统所知道的资源和实际可用资源可能会不匹配。
答案2
回答您的第一个问题。MPI 应配置可用的节点和可用的处理器核心数,如果编码正确,MPI 应处理所有分布。至少我记得当我使用 MPI 时它就是这样工作的。不过我使用的是 LAM-MPI 分布,所以可能有些事情有所不同。
至于 PBS,我还没有使用过,但我确实发现这个大学页面解释了一些运行和规范的基础知识: