3

我正在尝试使用 MPI 在多个 CPU 上运行一些代码。

我运行使用:

$ mpirun -np 24 python mycode.py

我在一个有 8 个节点的集群上运行,每个节点有 12 个 CPU。我的 24 个进程分散在所有节点上。

让我们将节点称为 node1、node2、...、node8 并假设主进程在 node1 上,并且我的作业是唯一运行的。所以node1有主进程和几个从进程,其余节点只有从进程。

仅使用具有主进程的节点(即 node1)。我可以说出来,因为节点 2-8 的负载约为 0,节点 1 的负载约为 24(而我希望每个节点上的负载大约等于从该节点分配给我的作业的 CPU 数量)。此外,每次评估一个函数时,我都会让它打印出运行它的主机的名称,并且每次都会打印出“node1”。我不知道主进程是否是唯一做任何事情的进程,或者是否也在使用与主进程相同的节点上的从进程。

我正在运行的集群最近升级了。在升级之前,我使用相同的代码并且它的行为完全符合预期(即,当我要求 24 个 CPU 时,它给了我 24 个 CPU,然后使用了所有 24 个 CPU)。此问题仅在升级后出现,因此我假设某处的设置已更改或重置。有没有人以前见过这个问题并且知道我可以如何解决它?

编辑:这是作为作业提交给调度程序,使用:

#!/bin/bash
#
#$ -cwd
#$ -pe * 24
#$ -o $JOB_ID.out
#$ -e $JOB_ID.err
#$ -r no
#$ -m n
#$ -l h_rt=24:00:00

echo job_id $JOB_ID
echo hostname $HOSTNAME

mpirun -np $NSLOTS python mycode.py

集群正在运行 SGE,我使用以下命令提交此作业:

qsub myjob
4

2 回答 2

2

也可以使用主机文件指定您希望作业在哪里运行。主机文件的格式和使用方式因 MPI 实现而异,因此您需要查阅已安装文件的文档 ( man mpiexec) 以了解如何使用它。

基本思想是,在该文件中,您可以定义要使用的节点以及在这些节点上需要多少等级。这可能需要使用其他标志来指定进程如何映射到您的节点,但最后,您通常可以自己控制所有内容的布局方式。

如果您使用 PBS、TORQUE、LoadLeveler 等调度程序,所有这一切都会有所不同,因为它们有时可以为您完成其中的一些工作,或者有不同的方式来映射作业本身。您必须单独查阅这些文档,或者在此处使用适当的标签询问有关它们的另一个问题。

于 2013-07-10T17:57:25.743 回答
1

集群通常有一个批处理调度程序,如 PBS、TORQUE、LoadLeveler 等。这些通常有一个 shell 脚本,其中包含您的mpirun命令以及调度程序所需的环境变量。您应该询问集群管理员提交批处理 MPI 作业的流程。

于 2013-07-10T16:43:56.133 回答