Запуск MPI на двух хостах

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

[[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
1
nl ja de
Христо - если бы вы ответили как ответ, я был бы рад принять его! выключение IPTables внутри lan отлично работало!
добавлено автор Hamy, источник
Это компонент BTL tcp , пытающийся установить соединение между узлом 4 и node 5 , чтобы начать отправку сообщений и сбой. Вы правильно разбираетесь - имя хоста не выполняет MPI-коммуникацию, и поэтому он отлично работает. Просто проинструктируйте свои брандмауэры как принимать соединения с другого хоста.
добавлено автор Hristo Iliev, источник
Там вы идете - ответ на ваш конкретный вопрос и некоторую дополнительную информацию, которая может пригодиться для других, которые испытывают одну и ту же проблему, но по другой причине.
добавлено автор Hristo Iliev, источник

1 ответы

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

Когда запускается Open 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) в параметре MCA btl_tcp_if_exclude , например:

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

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

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

$ mpirun --mca btl_tcp_if_include eth0 ...

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

9
добавлено
Согласен, и сладкий ответ! Простым решением для нас было отключить iptables в нашей локальной сети
добавлено автор Hamy, источник
Та же проблема здесь. Код MPI провалился бы и выдал бы ту же ошибку в отношении времени установления соединения. Исправлена ​​ошибка отключения брандмауэра на компьютерах.
добавлено автор wandadars, источник