2013-12-07 2 views
1

Я пытаюсь запустить простой тест helloworld моей установки OpenMPI. Я установил кластер из двух узлов на Amazon AWS, и я использую SUSE SLES11 SP3, OpenMPI 1.4.4 (немного старый, но для моего дистрибутива Linux нет новых двоичных файлов). Я дошел до последнего шага, и у меня возникли проблемы с правильной настройкой флагов btl.Установка флажков BTL в OpenMPI

Он то, что я могу сделать:

  • Я могу ПКПП между узлами в обоих направлениях, так что без пароля SSH запущен и работает правильно

  • Если я бегу Iptables -L, это указывает на то, что брандмауэр не работает, поэтому я считаю, что связь между узлами должна работать.

  • Я могу скомпилировать мою программу helloworld.c с помощью mpicc, и я подтвердил, что скрипт работает правильно в другом рабочем кластере, поэтому локальные пути настроены правильно, я думаю, и скрипт определенно работает.

  • Если я исполняю mpirun от моего главного узла, и используя только главный узел, HelloWorld выполняет правильно:

    ip-xxx-xxx-xxx-133: # mpirun -n 1 -host master --mca btl sm,openib,self ./helloworldmpi 
    ip-xxx-xxx-xxx-133: hello world from process 0 of 1 
    
  • Если я исполняю mpirun из моего главного узла, используя только рабочий узел, Helloworld Выполняет правильно:

    ip-xxx-xxx-xxx-133: # mpirun -n 1 -host node001 --mca btl sm,openib,self./helloworldmpi 
    ip-xxx-xxx-xxx-210: hello world from process 0 of 1 
    

Теперь моя проблема заключается в том, что если я пытаюсь запустить HelloWorld на обоих узлах, я получаю сообщение об ошибке:

ip-xxx-xxx-xxx-133: # mpirun -n 2 -host master,node001 --mca btl openib,self ./helloworldmpi 
-------------------------------------------------------------------------- 
At least one pair of MPI processes are unable to reach each other for 
MPI communications. This means that no Open MPI device has indicated 
that it can be used to communicate between these processes. This is 
an error; Open MPI requires that all MPI processes be able to reach 
each other. This error can sometimes be the result of forgetting to 
specify the "self" BTL. 

    Process 1 ([[5228,1],0]) is on host: ip-xxx-xxx-xxx-133 
    Process 2 ([[5228,1],1]) is on host: node001 
    BTLs attempted: self 

Your MPI job is now going to abort; sorry. 
-------------------------------------------------------------------------- 
-------------------------------------------------------------------------- 
It looks like MPI_INIT failed for some reason; your parallel process is 
likely to abort. There are many reasons that a parallel process can 
fail during MPI_INIT; some of which are due to configuration or environment 
problems. This failure appears to be an internal failure; here's some 
additional information (which may only be relevant to an Open MPI 
developer): 

    PML add procs failed 
    --> Returned "Unreachable" (-12) instead of "Success" (0) 
-------------------------------------------------------------------------- 
*** The MPI_Init() function was called before MPI_INIT was invoked. 
*** This is disallowed by the MPI standard. 
*** Your MPI job will now abort. 
[ip-xxx-xxx-xxx-133:7037] Abort before MPI_INIT completed successfully; not able to guarantee that all other processes were killed! 
-------------------------------------------------------------------------- 
mpirun has exited due to process rank 0 with PID 7037 on 
node ip-xxx-xxx-xxx-133 exiting without calling "finalize". This may 
have caused other processes in the application to be 
terminated by signals sent by mpirun (as reported here). 
-------------------------------------------------------------------------- 
*** The MPI_Init() function was called before MPI_INIT was invoked. 
*** This is disallowed by the MPI standard. 
*** Your MPI job will now abort. 
[ip-xxx-xxx-xxx-210:5838] Abort before MPI_INIT completed successfully; not able to guarantee that all other processes were killed! 
[ip-xxx-xxx-xxx-133:07032] 1 more process has sent help message help-mca-bml-r2.txt/unreachable proc 
[ip-xxx-xxx-xxx-133:07032] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help/error messages 
[ip-xxx-xxx-xxx-133:07032] 1 more process has sent help message help-mpi-runtime/mpi_init:startup:internal-failure 

И, наконец, если я не укажу -mca btl sm, openib, само флаг, то ничего не работает вообще. Я признаю, что мое понимание этих флагов почти равно нулю. Однако в Интернете очень мало информации об их использовании. Я просмотрел файл data.conf, и я не уверен, что все перечисленные устройства действительно присутствуют, но флаг -mca, по-видимому, заботится о большей части проблемы, поскольку я могу хотя бы выполнить на каждом узле в кластере индивидуально. Любые указатели на то, что я могу делать неправильно, или где я могу смотреть, будут очень признательны.

ответ

2

«--mca btl openib, sm, self» сообщает Open MPI, который переносится для использования в MPI-трафике. Указано:

  • OpenIB: InfiniBand или iWARP
  • см: общая память
  • самостоятельно: петлевой

Насколько мне известно (хотя я и не следовать AWS близко), AWS Безразлично» t имеют InifniBand или iWARP. Поэтому определение openib здесь бесполезно. Если вы добавите «tcp» в список с разделителями-запятыми, он должен использовать TCP, который должен быть тем, что вы хотите. В частности, «--mca btl tcp, sm, self» (порядок в списке с разделителями-запятыми не имеет значения).

Это говорит о том, что Open MPI должен эффективно разборчивать sm, tcp и self по умолчанию - так что вам не нужно указывать «--mca btl tcp, sm, self» вообще. Мне немного странно, что это не работает для вас.

+0

Спасибо.Это хорошее объяснение того, что я выяснил после нескольких часов работы вчера. Amazon не использует Infiniband. Что касается вашего последнего комментария, я тоже не уверен, но я думаю, что это возможно вызвано моим файлом data.conf. Я думаю, что в файле перечислены некоторые аппаратные средства, которые на самом деле не присутствуют (я заимствовал файл из другого Linux AMI на Amazon). Использование флагов btl как-то фильтрует нарушительные строки из файла data.conf из представления mpi. Если я не использую флаги btl, mpirun жалуется на отсутствие cma-blah-blah (теперь я не могу поднять точные ошибки) и выдает ошибку. –

0

Для записи мне просто нужно было добавить tcp в флагов -mca btl, и теперь он работает правильно.

Смежные вопросы