mpiexec использует неверный номер процессора

Я пытаюсь настроить кластер MPI. Но у меня проблема в том, что количество процессоров, добавленных в файл mpd.conf, используется неправильно. У меня есть три сервера Ubuntu. opteron с 48 ядрами calc1 с 8 ядрами calc2 с 8 ядрами.

Мой mpd.hosts выглядит так:
opteron:46
calc1:6
calc2:6

После загрузки (mpdboot -n 3 -f mpd.hosts) система работает. mpdtrace -> все три из них перечислены.

Но запуск такой программы, как "mpiexec -n 58 raxmlHPC-MPI ...", приводит к тому, что calc1 и calc2 получают много заданий, а opteron - одновременно несколько. Что я делаю неправильно?

С уважением

Бьорн

2 ответа

Решение

Я нашел обходной путь. Я использовал дополнительный параметр "-machinefile /path/to/mpd.hosts" для команды mpiexec. И теперь все узлы работают правильно. Одна проблема, которую я получил, состояла в том, что я получил следующее сообщение об ошибке:

... MPIU_SHMW_Seg_create_attach_templ (671): ошибка открытия - нет такого файла или каталога...

Чтобы это исправить, мне пришлось установить переменную окружения MPICH_NO_LOCAL=1

Как вы поняли, вы должны передать машинный файл обоим mpdboot а также mpiexec для того, чтобы использовать количество процессов для каждого хоста. Проблема с "открытым отказом" - это известная ошибка в MPD, менеджере процессов, который вы используете. Обратите внимание, что MPICH_NO_LOCAL=1 Обходной путь будет работать, но, вероятно, приведет к значительному снижению производительности для внутрисетевого обмена данными.

Вы явно используете MPICH2 (или производную MPICH2), но не ясно, какую версию вы используете. Если вы можете, я настоятельно рекомендую перейти на MPICH2 1.2.1p1 или (еще лучше) 1.3.1. Оба этих выпуска включают более новый диспетчер процессов под названием Hydra, который намного быстрее и надежнее. В 1.3.1 Hydra является менеджером процессов по умолчанию. Не требует mpdboot фаза, и она поддерживает $HYDRA_HOST_FILE переменная окружения, так что вам не нужно указывать машинный файл на каждом mpiexec,

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