【问题标题】:Specify on which host (rank) to spawn MPI processes指定在哪个主机(等级)上生成 MPI 进程
【发布时间】:2014-01-11 05:16:46
【问题描述】:

我有某种使用 MPI 的多代理系统。我以mpiexec -np 1 Admin.py : -np 4 Other.py 开头主要演员。每个“other.py”还产生一个多进程。为了计算效率,我真的很想在与父级相同的处理器(等级)上生成生成的进程。我怎样才能做到这一点? (出于好奇:1. 它们默认生成在哪里?2. 有没有办法查看进程在哪里运行?)

我的 Other.py 代码包含以下内容(无 MWE)

from mpi4py import MPI
comm = MPI.COMM_WORLD                  
rank = comm.Get_rank() 
...
icomm = MPI.COMM_SELF.Spawn(sys.executable,args["front_process.py",str(rank)],\
 maxprocs=1)

通过向 Spawn 提供和 info 参数,您通常可以控制将生成的进程放置在何处。

myinfo = MPI.Info.Create()
myinfo.Set("host","%s" % str(rank) )
icomm = MPI.COMM_SELF.Spawn(sys.executable,args=["front_process.py",str(rank)],\
 maxprocs=1,info=myinfo)

但是,当添加此“信息”时,MPI 崩溃:All nodes which are allocated for this job are already filled.

【问题讨论】:

    标签: python mpi spawn


    【解决方案1】:

    根据提供的主机列表中定义的槽(如果没有提供主机列表,则在本地主机上)和分配规则(通常作为mpiexec 的参数提供)生成新进程。如果您的 MPI 作业在资源管理器 (RM) 的监督下运行,例如SGE、LSF 等,如果 MPI 库与 RM 紧密集成,则主机列表和可用插槽由 RM 固定,MPI_Info 对象中的host 键用作 RM 的过滤器- 指定列表(至少对于 Open MPI 如此)。

    如果不使用 RM,您可能应该提供一个主机列表,其中包含为每个主机定义的足够插槽。使用 Open MPI 1.6.x,可以使用 add-host 键将新主机添加到列表中。如果在 RM 下运行,您应该提出适当的请求(这是特定于站点的)。

    要了解您的进程在哪里运行,请使用MPI.Get_processor_name()。在大多数集群系统上,它返回执行调用进程的节点的主机名。

    【讨论】:

    • 目前仅在具有一个处理器的多核系统上进行测试。但我仍然想知道为什么在指定信息(All nodes which are allocated for this job are already filled)时代码会崩溃,但在我不提供信息时不会。所有处理器都应该被占用(mpiexec -n 2 code.py 和 4 个衍生进程)
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 2021-06-07
    • 1970-01-01
    • 2018-04-02
    • 2013-03-24
    • 2014-01-30
    相关资源
    最近更新 更多