将 MPI 进程分配给节点
Assign MPI Processes to Nodes
我有一个使用主进程和多个工作进程的 MPI 程序。我想让主进程 运行ning 单独在单个计算节点上,而工作进程 运行 在另一个节点上。工作进程应由套接字分配(例如,使用 --map-by-socket
选项完成)。是否有任何选项可以将主进程和工作进程分配给不同的节点或手动分配,也许可以通过咨询排名?
谢谢
据我所知,最简单的方法是使用 OpenMPI 的 --hostfile 选项。
如果您使用任何体面的批处理系统,您应该在一些简单的文件或环境变量中有一个主机和插槽列表,您可以将其解析为一个主机文件。
如果您 运行 您的应用程序 "by hand" 您可以自己生成这样的列表。
通过使用排名文件,可以在绑定的同时为主机分配排名。在您的情况下,假设每个节点都有两个 4 核 CPU,应该这样做(对于 Open MPI 1.7 和更新版本):
rank 0=host1 slots=0-7
rank 1=host2 slots=0:0-3
rank 2=host2 slots=1:0-3
对于旧版本,应该分别使用 slots=0-3
和 slots=4-7
而不是 slots=0:0-3
和 slots=1:0-3
(假设内核是线性编号的,但情况可能并非如此).然后通过 --rankfile
选项将排名文件提供给 mpiexec
。它取代主机文件。
另一种选择是进行 MIMD 启动。在那种情况下,可以将 MPI 作业分成几个部分,并为每个部分提供不同的分布和绑定参数:
mpiexec -H host1 -n 1 --bind-to none ./program : \
-H host2 -n 2 --bind-to socket --map-by socket ./program
我有一个使用主进程和多个工作进程的 MPI 程序。我想让主进程 运行ning 单独在单个计算节点上,而工作进程 运行 在另一个节点上。工作进程应由套接字分配(例如,使用 --map-by-socket
选项完成)。是否有任何选项可以将主进程和工作进程分配给不同的节点或手动分配,也许可以通过咨询排名?
谢谢
据我所知,最简单的方法是使用 OpenMPI 的 --hostfile 选项。
如果您使用任何体面的批处理系统,您应该在一些简单的文件或环境变量中有一个主机和插槽列表,您可以将其解析为一个主机文件。
如果您 运行 您的应用程序 "by hand" 您可以自己生成这样的列表。
通过使用排名文件,可以在绑定的同时为主机分配排名。在您的情况下,假设每个节点都有两个 4 核 CPU,应该这样做(对于 Open MPI 1.7 和更新版本):
rank 0=host1 slots=0-7
rank 1=host2 slots=0:0-3
rank 2=host2 slots=1:0-3
对于旧版本,应该分别使用 slots=0-3
和 slots=4-7
而不是 slots=0:0-3
和 slots=1:0-3
(假设内核是线性编号的,但情况可能并非如此).然后通过 --rankfile
选项将排名文件提供给 mpiexec
。它取代主机文件。
另一种选择是进行 MIMD 启动。在那种情况下,可以将 MPI 作业分成几个部分,并为每个部分提供不同的分布和绑定参数:
mpiexec -H host1 -n 1 --bind-to none ./program : \
-H host2 -n 2 --bind-to socket --map-by socket ./program