Получил ошибки mpi при параллельном запуске openmdao v2.2.0
Мы установили mpi4py и petsc, используя среду Python Ananconda. Он прекрасно работает для запуска mpi для тестового кода mpi4py и petsc
$ mpirun -n 4 python ./test.py
Но когда мы запускаем тестовый MPI-код OpenMdao v2.2.0, мы всегда получаем ошибки как
$ 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): буферы не должны быть псевдонимами
В чем ошибка? Благодарю.
0 ответов
Я получаю точно такую же ошибку при работе с 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. Пожалуйста, попробуйте проверить ветку на моем форке и посмотрите, исправит ли она и вашу проблему.