我正在尝试使用MPI在多个CPU上运行一些代码。
我跑步使用:
$ mpirun -np 24 python mycode.py
我正在一个有8个节点的集群上运行,每个节点有12个CPU。我的24个进程分散在所有节点上。
让我们调用节点node1,node2,...,node8,并假设主进程在node1上,我的作业是唯一运行的。因此node1具有主进程和一些从进程,其余节点只有从进程。
仅使用具有主进程的节点(即node1)。我可以告诉因为nodes2-8有load~0而node1有load~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
答案 0 :(得分:2)
还可以使用主机文件指定您希望作业运行的位置。主机文件的格式和使用方式因MPI实现而异,因此您需要查阅已安装文件(man mpiexec
)的文档以了解如何使用它。
基本思想是在该文件中,您可以定义要使用的节点以及在这些节点上需要的等级数。这可能需要使用其他标志来指定进程如何映射到您的节点,但最后,您通常可以控制自己如何布置所有内容。
如果您使用像PBS,TORQUE,LoadLeveler等调度程序,所有这些都是不同的,因为有时这些调度程序可以为您执行某些操作,或者有不同的方式来映射作业本身。您必须单独查阅这些文档,或在此处使用相应的标记询问有关它们的其他问题。
答案 1 :(得分:1)
群集通常有一个批处理调度程序,如PBS,TORQUE,LoadLeveler等。这些通常都有一个shell脚本,其中包含您的mpirun
命令以及调度程序所需的环境变量。您应该询问群集管理员提交批量MPI作业的过程。