【问题标题】:got mpi errors when run openmdao v2.2.0 in parallel并行运行 openmdao v2.2.0 时出现 mpi 错误
【发布时间】:2018-02-19 13:15:42
【问题描述】:

我们已经使用 Ananconda python 环境安装了 mpi4py 和 petsc。 mpi4py 和 petsc 喜欢的测试代码运行 mpi 效果很好

$ mpirun -n 4 python ./test.py

但是当我们运行OpenMdao v2.2.0的测试mpi代码的时候,总是报错likes

$ mpirun -n 4 python ./test_proc_alloc.py

ERROR: test_4_subs_max2 (__main__.ProcTestCase5)

----------------------------------------------------------------------
Traceback (most recent call last):
File "./test_proc_alloc.py", line 186, in test_4_subs_max2 p = _build_model(nsubs=4, max_procs=[2,2,2,2])  File "./test_proc_alloc.py", line 47, in _build_model p.setup(vector_class=vector_class, mode=mode, check=False)
File "anaconda2/5.0.0/lib/python2.7/site-packages/openmdao/core/problem.py", line 409, in setup model._setup(comm, 'full', mode)
File "anaconda2/5.0.0/lib/python2.7/site-packages/openmdao/core/system.py", line 714, in _setup.self._setup_var_sizes(recurse=recurse)
File "anaconda2/5.0.0/lib/python2.7/site-packages/openmdao/core/group.py", line 466, in _setup_var_sizes subsys._setup_var_sizes(recurse)
File "anaconda2/5.0.0/lib/python2.7/site-packages/openmda /core/component.py", line 233, in _setup_var_sizes    self.comm.Allgather(sizes[type_][iproc, :], sizes[type_])
File "MPI/Comm.pyx", line 640, in mpi4py.MPI.Comm.Allgather (src/mpi4py.MPI.c:98562) Exception: Invalid buffer pointer, error stack: PMPI_Allgather(1093): MPI_Allgather(sbuf=0x5629c3c809e8, scount=1, MPI_LONG, rbuf=0x5629c3c809e0, rcount=1, MPI_LONG, MPI_COMM_WORLD) failed

PMPI_Allgather(1026):缓冲区不能有别名

什么是错误?谢谢。

【问题讨论】:

  • 能把test.py文件的内容贴出来吗?
  • test.py 只是从 petsc4py-3.8.0/demo like kspsolve/test_mat_cg.py 复制而来。我可以使用 mpi 和 serial 获得相同的迭代和残差。
  • 有可能但不太可能,petsc3.8 中存在当前与 OpenMDAO 不兼容的更改。你可以尝试使用 3.7 吗?

标签: openmdao


【解决方案1】:

我在使用 OpenMDAO v2.6 和 MPI4py v3.0.0、PETSc v3.8.1 运行时遇到了完全相同的错误,这些错误是基于 Intel MPI 构建的。问题似乎是在较新版本的 MPI4py 上,不允许在同一个缓冲区中发送和接收数据(在本例中为 AllGather 函数)。简单的解决方法是深度复制 snd 缓冲区,这似乎可以解决问题。我已经在我们自己的一个工作流程中对此进行了测试,并尝试并行运行一些 OpenMDAO 测试脚本,这些脚本现在似乎可以工作。

您可以在此处查看 MR:https://github.com/OpenMDAO/OpenMDAO/pull/904。请尝试检查我 fork 上的分支,看看它是否也解决了您的问题。

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 2011-07-11
    • 1970-01-01
    • 2016-12-30
    • 2022-10-23
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多