2013-02-25 4 views
1

Я просмотрел множество примеров, и я все еще смущен. Я скомпилировал простую программу проверки задержки с here, и она отлично работает на одном хосте, но когда я пытаюсь запустить ее на двух хостах, она зависает. Тем не менее, работает что-то вроде hostname работает отлично:Запуск MPI на двух хостах

[[email protected] latency]$ mpirun --report-bindings --hostfile hostfile --rankfile rankfile -np 2 hostname 
[4:16622] [[5908,0],0] odls:default:fork binding child [[5908,1],0] to slot_list 0 
4 
[5:12661] [[5908,0],1] odls:default:fork binding child [[5908,1],1] to slot_list 0 
5 

Но вот собранная программа латентности:

[[email protected] latency]$ mpirun --report-bindings --hostfile hostfile --rankfile rankfile -np 2 latency 
[4:16543] [[5989,0],0] odls:default:fork binding child [[5989,1],0] to slot_list 0 
[5:12582] [[5989,0],1] odls:default:fork binding child [[5989,1],1] to slot_list 0 
[4][[5989,1],0][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] connect() to 10.0.2.5 failed: Connection timed out (110) 

Мой текущий догадаться, что есть что-то не так с моими правилами брандмауэра (например, имя хоста не сообщается между хостами, но программа задержек).

[[email protected] latency]$ cat rankfile 
rank 0=10.0.2.4 slot=0 
rank 1=10.0.2.5 slot=0 
[[email protected] latency]$ cat hostfile 
10.0.2.4 slots=2 
10.0.2.5 slots=2 
+0

Это компонент 'tcp' BTL, который пытается установить соединение между узлом' 4' и узлом '5', чтобы начать отправку сообщений и сбой. Вы правильно разбираетесь - 'hostname' не выполняет MPI-коммуникацию, и поэтому он отлично работает. Просто проинструктируйте свои брандмауэры как принимать соединения с другого хоста. –

+1

Христо - если бы вы ответили как ответ, я был бы рад принять его! выключение IPTables внутри lan отлично работало! – Hamy

+0

Там вы идете - ответ на ваш конкретный вопрос и некоторую дополнительную информацию, которая может пригодиться для других, которые испытывают ту же проблему, но по другой причине. –

ответ

7

Существует два вида связи, связанных с работой Open MPI. Сначала нужно начать работу. Открытый MPI использует специальную инфраструктуру для поддержки многих видов запуска, и вы, вероятно, используете механизм удаленного входа в систему rsh через SSH. Очевидно, что ваш брандмауэр правильно настроен для подключения SSH.

Когда открытое задание MPI запускается и процессы являются настоящими программами MPI, они подключаются к процессу mpirun, который породил задание и узнал все о других процессах в задании, а главное о доступных конечных точках сети в каждом процессе , Это сообщение:

[4][[5989,1],0][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] connect() to 10.0.2.5 failed: Connection timed out (110) 

указывает, что процесс, который работает на хосте 4 не может открыть соединение TCP к процессу, который работает на хосте 5. Наиболее распространенной причиной этого является наличие брандмауэра, который ограничивает входящие соединения. Поэтому проверка брандмауэра - это первое, что нужно сделать.

Другая распространенная причина заключается в том, что на обоих узлах имеются дополнительные сетевые интерфейсы, настроенные и поддерживаемые с совместимыми сетевыми адресами, но без возможности установления связи между ними. Это часто происходит на более новых установках Linux, где по умолчанию создаются различные виртуальные и/или туннельные интерфейсы. Можно поручить Open MPI, чтобы пропустить эти интерфейсы, перечислив их (либо в качестве имен интерфейсов или CIDR сетевых адресов) в параметре btl_tcp_if_exclude MCA, например:

$ mpirun --mca btl_tcp_if_exclude "127.0.0.1/8,tun0" ... 

(один всегда должен добавить петлевой интерфейс, если установка btl_tcp_if_exclude)

или можно явно указать, какие интерфейсы, которые будут использоваться для связи, перечислив их в параметре btl_tcp_if_include MCA:

$ mpirun --mca btl_tcp_if_include eth0 ... 

Поскольку IP-адрес в эр Сообщение ror совпадает с адресом вашего второго хоста в файле хоста, тогда проблема должна исходить из правила активного брандмауэра.

+1

Согласен, и сладкий ответ!Простым решением для нас было отключить iptables в нашей локальной сети. – Hamy

+0

. Код MPI провалился бы и выдал бы ту же ошибку в отношении времени установления соединения. Исправлена ​​ошибка отключения брандмауэра на компьютерах. – wandadars

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