Невозможно запустить OpenMPI на более чем двух компьютерах

При попытке запустить первый пример в руководстве boost::mpi я не смог запустить более двух машин. В частности, это, кажется, работает нормально:

mpirun -hostfile hostnames -np 4 boost1

с каждым именем хоста в именах хостов как <node_name> slots=2 max_slots=2, Но когда я увеличиваю количество процессов до 5, он просто зависает. Я уменьшил количество slots/max_slots до 1 с тем же результатом, когда я превышаю 2 машины. На узлах это отображается в списке заданий:

<user> Ss orted --daemonize -mca ess env -mca orte_ess_jobid 388497408 \
-mca orte_ess_vpid 2 -mca orte_ess_num_procs 3 -hnp-uri \
388497408.0;tcp://<node_ip>:48823

Кроме того, когда я убиваю это, я получаю это сообщение:

node2- daemon did not report back when launched
node3- daemon did not report back when launched

Кластер настроен с mpi а также boost libs доступны на смонтированном диске NFS. Я захожу в тупик с NFS? Или что-то еще происходит?

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

#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;

int main(int argc, char* argv[]) 
{
  mpi::environment env(argc, argv);
  mpi::communicator world;
  std::cout << "I am process " << world.rank() << " of " << world.size()
        << "." << std::endl;
  return 0;
}

Из рекомендаций@Dirk Eddelbuettel я скомпилировал и запустил пример mpi hello_c.c, следующее

#include <stdio.h>
#include "mpi.h"

int main(int argc, char* argv[])
{
    int rank, size;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    printf("Hello, world, I am %d of %d\n", rank, size);
    MPI_Barrier(MPI_COMM_WORLD);
    MPI_Finalize();

   return 0;
}

Он отлично работает на одной машине с несколькими процессами, включая sshing на любом из узлов и работает. Каждый вычислительный узел идентичен рабочему и mpi / boost каталогам, смонтированным с удаленного компьютера через NFS. При запуске программы boost с файлового сервера (идентичного узлу, кроме boost / mpi локального), я могу работать на двух удаленных узлах. Для "Привет, мир", однако, запустить команду mpirun -H node1,node2 -np 12 ./hello я получил

[<node name>][[2771,1],<process #>] \
[btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] \
connect() to <node-ip> failed: No route to host (113)

в то время как все "Hello World's" напечатаны, и он висит в конце. Однако поведение при запуске с вычислительного узла на удаленном узле отличается.

И "Hello world", и код повышения просто зависают с mpirun -H node1 -np 12 ./hello при запуске с узла 2 и наоборот. (Повесьте в том же смысле, что и выше: orted работает на удаленной машине, но не общается обратно.)

Тот факт, что поведение отличается от работы на файловом сервере, где библиотеки mpi являются локальными, а не на вычислительном узле, говорит о том, что я могу столкнуться с тупиком NFS. Это разумный вывод? Предполагая, что это так, как я могу настроить mpi, чтобы я мог статически связать его? Кроме того, я не знаю, что делать с ошибкой, которую я получаю при запуске с файлового сервера, какие-либо мысли?

3 ответа

Решение

Ответ оказался простым: открыть mpi, прошедший аутентификацию через ssh, а затем открыть сокеты tcp / ip между узлами. Брандмауэры на вычислительных узлах были настроены на прием только ssh-соединений друг от друга, а не произвольных соединений. Итак, после обновления iptables hello world работает как чемпион по всем узлам.

Изменить: Следует отметить, что брандмауэр файлового сервера допускает произвольные подключения, поэтому запуск программы на нем MPI будет вести себя иначе, чем просто запуск на вычислительных узлах.

Попробуйте использовать параметр --mca btl_tcp_if_include eth0, чтобы узлы использовали только интерфейс eth0 и не позволяли OpenMPI определить, какая сеть была лучшей. Существует также --mca btl_tcp_if_exclude eth0 Не забудьте заменить eth0 для вашего конкретного интерфейса.

Мой /etc/hosts содержал такие строки:

10.1.2.13 узел13

...

10.1.3.13 node13-ib

Когда я запустил mpirun, была выбрана сеть TCP, и узлы использовали сеть TCP, однако через некоторое время (20 секунд) OpenMPI обнаружил IP-адреса 10.1.3.XXX и попытался использовать их, что вызвало сообщение об ошибке.

Я надеюсь, что это помогает

Моей первой рекомендацией будет упрощение:

  • Можете ли вы построить стандартный пример MPI "Привет, мир"?
  • Вы можете запустить его несколько раз на локальном хосте?
  • Вы можете выполнить на другом хосте через ssh
  • путь идентичен

и если так, то

mpirun -H host1,host2,host3 -n 12 ./helloworld

должен путешествовать через. Как только вы разберетесь с этими основами, попробуйте учебник по Boost... и убедитесь, что у вас есть библиотеки Boost и MPI на всех хостах, на которых вы планируете работать.

Другие вопросы по тегам