gpt4 book ai didi

python - mpi4py : close MPI Spawn?

转载 作者:行者123 更新时间:2023-11-28 18:45:36 29 4
gpt4 key购买 nike

我有一些 python 代码,我经常在其中生成多个进程。我得到一个错误:

ORTE_ERROR_LOG:在文件 odls_default_module.c 的第 809 行达到系统对一个进程可以打开的管道数量的限制

我的代码大概是这样的

import mpi4py
comm = MPI.COMM_WORLD
...
icomm = MPI.COMM_SELF.Spawn(sys.executable,args=["front_process.py",str(rank)],maxprocs=no_fronts)
...
message = icomm.recv(source=MPI.ANY_SOURCE,tag=21)
...
icomm.Free()

Spawn 命令经常被调用,我认为尽管给出了 icomm.Free() 命令,但在我完成后它们仍然“打开”。如何正确“关闭”生成的进程?

最佳答案

MPI_COMM_FREE 的 MPI 规范声明“...只有在没有其他事件引用对象时才会实际释放该对象。”您可以通过以下方式断开进程在链接它们的所有内部通信器的两端调用 MPI_COMM_DISCONNECT。等效的 mpi4py 调用可能是 icomm.Disconnect()

您看到的错误仍然可能来自 orterun(符号链接(symbolic link)为 mpirunmpiexec),而不是来自 master rank。 orterun 启动所有 MPI 进程(初始进程和后来生成的进程),然后将它们的标准输出重定向到它自己的标准输出,以便您可以看到每个级别的输出。当进程在本地主机上启动时,orterun 使用简单的 fork()/exec() 机制作为 odls< 的一部分 框架来产生新的等级,并使用管道来检测成功启动和 IO 转发。启动检测管道仅在很短的时间内打开,但 IO 转发管道在 rank 运行时保持打开状态。如果同时运行多个队列,许多管道将保持打开状态,因此会出现错误消息。

错误消息有点误导,因为有两种“描述符过多”的情况,而 Open MPI 不区分它们。第一种情况是达到硬内核限制,但这通常是一个很大的值。第二种情况是达到文件描述符数量的每个进程限制。后者可以用 ulimit 命令控制。您应该使用 ulimit -n 检查您的情况下的值并最终增加它。例如:

user@host$ ulimit -n 123456
user@host$ mpiexec -n 1 ... ./spawning_code.py arg1 arg2 ...

此处 123456 是描述符数量的理想限制,它不能超过可以使用 ulimit -nH 获得的硬限制。如果您从脚本运行程序(为了方便或因为您将作业提交到某个批处理队列系统),您应该在调用 之前将 ulimit -n 行放在脚本中mpirun/mpiexec.

同样在上面的文字中,rankprocess 指的是同一件事。

关于python - mpi4py : close MPI Spawn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20698712/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com