Можно ли запустить OpenMPI на локальном компьютере И на удаленном кластере?

У меня есть набор вычислительных операций, которые необходимо выполнить в кластере (например, 512 процессов MPI). Прямо сейчас у меня есть корневой узел в кластере, открывающий сокет и передающий данные на мой локальный компьютер между вычислительными операциями, но мне интересно, можно ли просто создать две группы MPI, и одна из этих групп является моей локальной компьютер, а другой удаленный кластер, и отправлять данные между ними с помощью команд MPI.

Это возможно?


person Nick    schedule 11.04.2013    source источник
comment
Я не вижу причин, почему бы и нет, за исключением практических проблем с конфигурацией, с NAT, прокси, безопасностью, парольными фразами, шифрованием, брандмауэром, открытыми/закрытыми портами и т. д. ... если вы находитесь в той же локальной сети (и действительно то же самое, например, только переключается между вашей машиной и кластером, а не маршрутизатором), это должно быть хорошо. Ваша следующая проблема — настроить систему запуска mpi и узлы на вашем локальном компьютере, чтобы программа запуска mpi распознавала их. (вам нужен root-доступ к файлу conf вашего кластера). Но да, MPI создан для гетерогенных парков, так что...   -  person v.oddou    schedule 11.04.2013


Ответы (2)


Да, это возможно, если между узлом кластера и вашей машиной есть сетевой путь. Стандарт MPI предоставляет абстрактные механизмы для этого, в то время как Open MPI предоставляет действительно простой способ заставить все работать. Вы должны изучить раздел стандарта Process Creation and Management (глава 10 MPI-2.2) и, в частности, подраздел Установление связи (§10.4 MPI- 2.2). В основном шаги таковы:

  1. Вы запускаете оба задания MPI по отдельности. Это, очевидно, то, что вы делаете, так что здесь ничего нового.
  2. Одно из заданий создает сетевой порт, используя MPI_Open_port(). Этот вызов MPI возвращает уникальное имя порта, которое затем должно быть опубликовано как общеизвестное имя службы с использованием MPI_Publish_name(). Когда порт открыт, его можно использовать для приема клиентских подключений, вызвав процедуру блокировки MPI_Comm_accept(). Работа теперь стала работой сервера.
  3. Другое задание MPI, называемое клиентским заданием, сначала разрешает имя порта из имени службы, используя MPI_Lookup_name(). Получив имя порта, он может вызвать MPI_Comm_connect() для подключения к удаленному серверу.
  4. После того, как MPI_Comm_connect() соединится с соответствующим MPI_Comm_accept(), оба задания установят интеркоммуникатор между ними, и сообщения можно будет отправлять туда и обратно.

Одна сложная деталь заключается в том, как клиентское задание может искать имя порта по имени службы? Это менее документированная часть Open MPI, но она довольно проста: вы должны предоставить команду mpiexec, которую вы используете для запуска клиентского задания, с URI mpiexec задания сервера, которое действует как своего рода служба каталогов. . Для этого вы должны запустить серверное задание с аргументом --report-uri -, чтобы оно вывело свой URI на стандартный вывод:

$ mpiexec --report-uri - <other arguments like -np> ./server ...

Это даст вам длинный URI вида 1221656576.0;tcp://10.1.13.164:36351;tcp://192.168.221.41:36351. Теперь вы должны предоставить этот URI клиенту mpiexec с опцией --ompi-server uri:

$ mpiexec --ompi-server 1221656576.0;tcp://10.1.13.164:36351... ./client ...

Обратите внимание, что URI содержит адреса всех настроенных и включенных сетевых интерфейсов, присутствующих на узле, где запущен сервер mpiexec. Вы должны убедиться, что клиент может связаться хотя бы с одним из них. Также убедитесь, что у вас есть компонент TCP BTL в списке включенных компонентов BTL, в противном случае никакие сообщения не будут передаваться. TCP BTL обычно включен по умолчанию, но в некоторых установках InfiniBand он явно отключен либо путем установки соответствующего значения переменной среды OMPI_MCA_btl, либо в файле конфигурации Open MPI MCA по умолчанию. Параметры MCA можно переопределить с помощью опции --mca, например:

$ mpiexec --mca btl self,sm,openib,tcp --report-uri - ...

Также см. ответ, который я дал на аналогичный вопрос.

person Hristo Iliev    schedule 11.04.2013

Да, это должно работать из коробки, если есть доступное соединение TCP/IP (MPI связывается через случайный, высокий порт TCP - если TCP используется в качестве уровня передачи). Попробуйте добавить свою машину в hostfile, который вы предоставляете mpirun. Если это не сработает, вы можете напрямую подключиться к своей машине с помощью MPI_Open_port, который не т требует mpirun.

person zonksoft    schedule 11.04.2013