Параллельный HDF5: make check зависает при запуске t_mpi

Я пытался заставить параллельный HDF5 работать в кластере целую неделю, но без какого-либо прогресса. Я хотел бы, если бы кто-нибудь мог помочь мне с этим. Спасибо!

Я собираю Parallel HDF5 (hdf5-1.8.15-patch1) в файловой системе lustre с ОС RedHat Enterprise Linux 5.5 x86_64. Я попытался скомпилировать его как с impi 4.0.2, так и с openmpi 1.8, и это удалось без каких-либо ошибок. Когда я "делаю проверку", оба они прошли последовательные тесты, но зависли сразу после входа в параллельные тесты (в частности, t_mpi). В конце концов, мне пришлось нажать ctrl+C, чтобы завершить его. Вот результат:

lijm@c01b03:~/yuan/hdf5-1.8.15-patch1/testpar$ make check
  CC       t_mpi.o
t_mpi.c: In function ‘test_mpio_gb_file’:
t_mpi.c:284: warning: passing argument 1 of ‘malloc’ with different width due to prototype
t_mpi.c:284: warning: request for implicit conversion from ‘void *’ to ‘char *’ not permitted in C++
t_mpi.c: In function ‘test_mpio_1wMr’:
t_mpi.c:465: warning: passing argument 2 of ‘gethostname’ with different width due to prototype
t_mpi.c: In function ‘test_mpio_derived_dtype’:
t_mpi.c:682: warning: declaration of ‘nerrors’ shadows a global declaration
t_mpi.c:37: warning: shadowed declaration is here
t_mpi.c:771: warning: passing argument 5 of ‘MPI_File_set_view’ discards qualifiers from pointer target type
t_mpi.c:798: warning: passing argument 2 of ‘MPI_File_set_view’ with different width due to prototype
t_mpi.c:798: warning: passing argument 5 of ‘MPI_File_set_view’ discards qualifiers from pointer target type
t_mpi.c:685: warning: unused variable ‘etypenew’
t_mpi.c:682: warning: unused variable ‘nerrors’
t_mpi.c: In function ‘main’:
t_mpi.c:1104: warning: too many arguments for format
t_mpi.c: In function ‘test_mpio_special_collective’:
t_mpi.c:991: warning: will never be executed
t_mpi.c:992: warning: will never be executed
t_mpi.c:995: warning: will never be executed
t_mpi.c: In function ‘test_mpio_gb_file’:
t_mpi.c:229: warning: will never be executed
t_mpi.c:232: warning: will never be executed
t_mpi.c:237: warning: will never be executed
t_mpi.c:238: warning: will never be executed
t_mpi.c:253: warning: will never be executed
t_mpi.c:258: warning: will never be executed
t_mpi.c:259: warning: will never be executed
t_mpi.c:281: warning: will never be executed
t_mpi.c:246: warning: will never be executed
t_mpi.c:267: warning: will never be executed
t_mpi.c:319: warning: will never be executed
t_mpi.c:343: warning: will never be executed
t_mpi.c:385: warning: will never be executed
t_mpi.c:389: warning: will never be executed
t_mpi.c:248: warning: will never be executed
t_mpi.c:269: warning: will never be executed
t_mpi.c: In function ‘main’:
t_mpi.c:1143: warning: will never be executed
t_mpi.c:88: warning: will never be executed
t_mpi.c:102: warning: will never be executed
t_mpi.c:133: warning: will never be executed
t_mpi.c:142: warning: will never be executed
  CCLD     t_mpi
make  t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_pshutdown t_prestart t_shapesame
make[1]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[1]: `t_mpi' is up to date.
make[1]: `testphdf5' is up to date.
make[1]: `t_cache' is up to date.
make[1]: `t_pflush1' is up to date.
make[1]: `t_pflush2' is up to date.
make[1]: `t_pshutdown' is up to date.
make[1]: `t_prestart' is up to date.
make[1]: `t_shapesame' is up to date.
make[1]: Leaving directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make  check-TESTS
make[1]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[2]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[3]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[3]: Nothing to be done for `_exec_check-s'.
make[3]: Leaving directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[2]: Leaving directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
make[2]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
===Parallel tests in testpar begin Thu Jun 11 22:07:48 CST 2015===
**** Hint ****
Parallel test files reside in the current directory by default.
Set HDF5_PARAPREFIX to use another directory. E.g.,
HDF5_PARAPREFIX=/PFS/user/me
export HDF5_PARAPREFIX
make check
**** end of Hint ****
make[3]: Entering directory `/home/lijm/yuan/hdf5-1.8.15-patch1/testpar'
============================
Testing  t_mpi
============================
 t_mpi  Test Log
============================
===================================
MPI functionality tests
===================================
Proc 1: hostname=c01b03
Proc 2: hostname=c01b03
Proc 3: hostname=c01b03
Proc 5: hostname=c01b03
--------------------------------
Proc 0: *** MPIO 1 write Many read test...
--------------------------------
Proc 0: hostname=c01b03
Proc 4: hostname=c01b03
Command exited with non-zero status 255
0.08user 0.01system 0:37.65elapsed 0%CPU (0avgtext+0avgdata    0maxresident)k
0inputs+0outputs (0major+5987minor)pagefaults 0swaps
make[3]: *** [t_mpi.chkexe_] Error 1
make[2]: *** [build-check-p] Interrupt
make[1]: *** [test] Interrupt
make: *** [check-am] Interrupt

Приведенные выше выходные данные двух реализаций MPI одинаковы, но openmpi также выводит предупреждение:

ПРЕДУПРЕЖДЕНИЕ. Похоже, ваша подсистема OpenFabrics настроена на регистрацию только части вашей физической памяти. Это может привести к тому, что задания MPI будут выполняться с нестабильной производительностью, зависанием и/или сбоем.

Я искал эту проблему. Но я не думаю, что это могло быть причиной зависания, причина указана в конце.

Я пытался найти место, где он висит. Я обнаружил, что он всегда застревает на первой встреченной коллективной функции. Например, в t_mpi. сначала он висит на:

MPI_File_delete(имя файла, MPI_INFO_NULL); (строка 477),

в test_mpio_1wMr. И если я закомментирую эту строку, она застрянет в MPI_File_open чуть ниже. Но я не уверен в том, что произошло внутри этих функций.

Я заметил еще одну вещь. Папка HDF5, в которой я делаю «создание», находится в файловой системе NFS, и я могу получить доступ к блеску только через определенную папку, расположенную где-то еще. Итак, я обнаружил, что тест проходит довольно хорошо, если я не устанавливаю HDF5_PARAPERFIX в свою папку блеска, поскольку тест выполняется локально по умолчанию. Итак, я полагаю, это должна быть проблема, связанная с самим блеском, а не с ограничением памяти?

Спасибо!


person Yang Yuan    schedule 11.06.2015    source источник


Ответы (1)


Трудно сказать, что здесь происходит.

Возможно, вы применяете «общую файловую систему unix» к своему драйверу блеска. Для Intel MPI требуются две переменные среды (I_MPI_EXTRA_FILESYSTEM и I_MPI_EXTRA_FILESYSTEM_LIST) для использования путей кода, оптимизированных для блеска: (см. https://press3.mcs.anl.gov/romio/2014/06/12/romio-and-intel-mpi/ для более подробной информации).

Вам также придется явно запрашивать поддержку luster при сборке OpenMPI.

Было бы очень полезно, если бы вы могли подключить отладчик к одному или нескольким зависшим процессам, чтобы увидеть, где он зависает. застрял в подпрограмме ввода/вывода? застрял в общении?

person Rob Latham    schedule 11.06.2015
comment
Привет, Роб, спасибо за ответ! Наш администратор кластера сказал мне, что папка, которую я использовал для запуска теста, нестабильна, после перехода на другую папку кластера проблема решена. Я тоже не знаю, что случилось с этой папкой... - person Yang Yuan; 13.06.2015