Невозможно запустить OpenMPI на более чем двух компьютерах - PullRequest
3 голосов
/ 22 марта 2010

При попытке запустить первый пример из учебника 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

Кластер настроен с помощью *Доступны библиотеки 1015 * и boost на диске, смонтированном по 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 локального), я могу работать на двух удаленных узлах.Однако для «hello world», запустив команду 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 ]

5 голосов
/ 06 апреля 2010

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

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

2 голосов
/ 05 марта 2013

Рекомендуется использовать параметр - 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 и попытался использовать их, что вызвало сообщение об ошибке. .

Надеюсь, это поможет

2 голосов
/ 22 марта 2010

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

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

и если да, то

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

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

...