我正在尝试使用MPI跨多个CPU运行一些代码。
我使用以下命令运行:
$ mpirun -np 24 python mycode.py我在一个有8个节点的集群上运行,每个节点有12个CPU。我的24个进程分散在所有节点上。
让我们将节点命名为node1、node2、...、node8,并假设主进程在node1上,而我的作业是唯一运行的。所以node1有主进程和一些从进程,其余的节点只有从进程。
只使用具有主进程(即node1)的节点。我可以断定,因为节点2-8的负载为~0,而node1的负载为~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发布于 2013-07-11 01:57:26
还可以使用hostfile指定您希望作业运行的位置。主机文件的格式和使用方式因MPI实现的不同而有所不同,因此您需要参考已安装的主文件(man mpiexec)的文档来了解如何使用它。
基本思想是,在该文件中,您可以定义要使用的节点以及在这些节点上的排名。这可能需要使用其他标志来指定进程如何映射到您的节点,但最终,您通常可以自己控制所有内容的布局。
如果您使用的是PBS、TORQUE、LoadLeveler等调度器,那么所有这些都是不同的,因为这些调度器有时可以为您完成一些任务,或者具有不同的映射作业本身的方式。您必须分别查阅文档,或者在此处使用适当的标签询问另一个问题。
发布于 2013-07-11 00:43:56
集群通常有一个批处理调度器,如PBS、TORQUE、LoadLeveler等。通常会为这些批处理调度器提供一个shell脚本,其中包含mpirun命令以及调度器需要的环境变量。您应该询问群集管理员提交批处理MPI作业的流程。
https://stackoverflow.com/questions/17576206
复制相似问题