0

我使用 starcluster 在 ec2 上设置了一个集群,并设置了 scipy 堆栈(包括 mpi4py)。我被告知要发布一个 mpi 作业,其处理器数量与集群中的处理器数量相匹配。例如,如果我创建一个实例类型的 4 节点集群,其中每个集群有 2 个 vcpu,我是否发出:

mpiexec -n 4 python mytestfile.py

或者

mpiexec -np 8 python mytestfile.py

此外,我如何确定每个节点实际上处理 2 个问题实例,而不是一个节点处理所有 8 个?换句话说,是否会mpiexec自动解决所有这些问题?

4

1 回答 1

1

mpiexec需要启动 MPI 进程的节点列表。一般来说,它可以通过两种方式获取列表。

第一种方法是通过与某种分布式资源管理器集成,例如 SGE、Torque、LSF 等。它们通常为每个作业提供授予节点的列表,然后 MPI 启动器可以解析该列表并提取必要的信息。在这种情况下,通常只需运行即可mpiexec -n #procs ./executable

第二种方法是手动提供列表。这通常通过命令行选项(如-H在 Open MPI 中)或通过所谓的主机文件来完成。主机文件通常会列出作业应执行的节点的主机名以及每个节点上的插槽数。Open MPI 的一个示例主机文件是:

node0001 slots=2
node0002 slots=2
node0003 slots=2
node0004 slots=2

slots=2在这种情况下,告诉库每个节点提供两个插槽,这意味着最多可以在该节点上启动两个 MPI 进程。插槽数是一个任意值,不需要与 CPU/内核数匹配,但在大多数情况下,插槽数将与内核数匹配(尽管对于混合 MPI+线程作业可能并非如此)。

给定上述主机文件,可以像这样启动 MPI 作业:

mpiexec --hostfile /path/to/hostfile -n 8 ...

在远程节点上启动作业通常要求当前用户能够使用一些无密码机制登录到这些节点,例如公钥认证。

于 2014-05-02T00:11:16.670 回答