Настраиваемая отказоустойчивость OpenMPI для слабосвязанных параллельных процессов

Я выполняю вычисления на платформе Amazon EC3, используя несколько машин, подключенных через OpenMPI. Для снижения стоимости вычислений используются спотовые инстансы, которые автоматически отключаются, когда стоимость машины превышает установленную максимальную цену: : http://aws.amazon.com/ec2/spot-instances/ . Возникает странное поведение: когда машина выключается, другие процессы в коммуникаторе MPI продолжают работать. Я думаю, что сетевые интерфейсы замолкают до того, как процесс успеет указать другим процессам, что он получил сигнал уничтожения.

Я читал в нескольких сообщениях, что MPI не предоставляет много высокоуровневых ресурсов, касающихся отказоустойчивости. С другой стороны, структура моей программы очень проста: подчиненные процессы запрашивают у главного процесса разрешение на выполнение части кода. Главный процесс отслеживает только количество запросов, на которые он ответил, и приказывает подчиненному останавливаться при достижении верхнего предела. Между рабами нет связи.

Я хотел бы иметь возможность определить, когда процесс молча умер, как упоминалось ранее. В таком случае я бы приписал работу, которую он выполнял, еще живому рабу. Есть ли простой способ проверить, умер ли a? Я думал об использовании потоков и сокетов, чтобы сделать это независимо от остальной части уровня MPI, но это кажется громоздким. Я также хотел бы сохранить в главном процессе (который запускается не на месте) список времени последней связи с каждым процессом и указать тайм-аут, но это не гарантирует мне, что подчиненный процесс мертв. Также есть проблема, что функции "барьер" и "финализация" не увидят все процессы и потенциально зависнут.

Тогда мой вопрос будет заключаться в том, какое решение вы бы применили для обнаружения того, что процессы молча мертвы? И как бы вы изменили оставшуюся часть кода, чтобы она была совместима с уменьшенным числом процессов?


person vkubicki    schedule 05.09.2013    source источник


Ответы (2)


Какую версию Open MPI вы используете?

Я точно не знаю, что может делать (или не делать) Open MPI, чтобы не обнаружить, что процесс ушел. Обычное поведение Open MPI после сбоя заключается в том, что среда выполнения прерывает все задание.

К сожалению, в Open MPI нет механизма для обнаружения сбойных процессов (особенно в случае, когда кажется, что Open MPI даже не знает, что они сбойные). Тем не менее, ведется большая работа по добавлению этого в будущие версии всех библиотек MPI. Одним из примеров реализации, поддерживающих такое поведение, является ответвление Open MPI под названием ULFM (www.fault-tolerance.org). Там есть много документации, чтобы точно увидеть, что происходит, но, по сути, это новая глава в стандарте MPI, добавляющая отказоустойчивость.

Есть старая попытка, доступная в MPICH 3.0.3 (к сожалению, она сломана в 3.0.4, но должна вернуться в 3.1) (www.mpich.org). Документация по использованию этой работы находится в README.

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

person Wesley Bland    schedule 05.09.2013
comment
Используемая версия OpenMPI — 1.4.1. Если они не являются простым способом реализации механизма отказоустойчивости, возможно, я просто создам отдельный скрипт, который будет периодически проверять, умерли ли процессы или нет. - person vkubicki; 06.09.2013

PVM может быть разумной альтернативой MPI в вашем случае. Хотя PVM больше не разрабатывается после того, как много лет назад проиграл MPI, он по-прежнему поставляется в комплекте с большинством дистрибутивов Linux и обеспечивает встроенную отказоустойчивость. Его API концептуально очень похож на MPI, но его модель выполнения немного отличается. Можно сказать, что он допускает на одну степень меньшую связь между задачами в параллельной программе, чем MPI.

В Beowulf Cluster Computing with Linux есть пример реализации отказоустойчивого PVM-приложения master-worker. Прочтите соответствующую главу из книги здесь.

Что касается отказоустойчивости в MPI, предложенное дополнение к стандарту было отклонено, когда форум MPI проголосовал за включение новых функций в MPI-3.0. Прежде чем FT станет стандартной функцией MPI, может пройти гораздо больше времени, чем ожидалось.

person Hristo Iliev    schedule 06.09.2013
comment
Спасибо за раскрытие этой возможности PVM! - person vkubicki; 21.09.2013