我正在尝试使用 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