gpt4 book ai didi

python - 对于大型数组,MPI.Gather 调用挂起

转载 作者:行者123 更新时间:2023-12-01 08:18:47 26 4
gpt4 key购买 nike

我使用 mpi4py 并行化我的 Python 应用程序。我注意到,每当我将进程数量或涉及的数组大小增加太多时,我都会在 MPI.Gather 期间遇到死锁。

示例:

from mpi4py import MPI

import numpy as np

COMM = MPI.COMM_WORLD
RANK = COMM.Get_rank()
SIZE = COMM.Get_size()


def test():
arr = RANK * np.ones((100, 400, 15), dtype='int64')

recvbuf = None
if RANK == 0:
recvbuf = np.empty((SIZE,) + arr.shape, dtype=arr.dtype)

print("%s gathering" % RANK)
COMM.Gather([arr, arr.size, MPI.LONG], recvbuf, root=0)
print("%s done" % RANK)

if RANK == 0:
for i in range(SIZE):
assert np.all(recvbuf[i] == i)


if __name__ == '__main__':
test()

执行此命令会给出:

$ mpirun -n 4 python bug.py 
1 gathering
2 gathering
3 gathering
0 gathering
1 done
2 done

而进程 0 和 3 无限期挂起。但是,如果我将数组维度更改为 (10, 400, 15),或使用 -n 2 运行脚本,一切都会按预期运行。

我错过了什么吗?这是 OpenMPI 或 mpi4py 中的错误吗?

平台:

  • OSX Mojave
  • OpenMPI 4.0.0(通过 Homebrew)
  • mpi4py 3.0.1
  • Python 3.7

最佳答案

我刚刚注意到通过 Homebrew 与 MPICH 一切正常。因此,如果有人在 OSX 上遇到类似的情况,解决方法是

$ brew unlink open-mpi
$ brew install mpich
$ pip uninstall mpi4py
$ pip install mpi4py --no-cache-dir

然后,我必须编辑 /etc/hosts 并添加行

127.0.0.1     <mycomputername>

为了 MPICH 正常工作。

更新:

现在,这个问题应该已经解决了。 The bug was reported并将 OpenMPI 更新到 4.0.1 为我解决了这个问题。

关于python - 对于大型数组,MPI.Gather 调用挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54811518/

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