Создание и использование Matlab кластеров

в 8:59, , рубрики: distributed computing, Matlab, parallel computing, parpool();, высокая производительность, кластер, кластеры, метки: , , ,

Цель статьи: хочу поделится опытом создания трех вычислительных кластеров Matlab, а также их удаленного администрирования.

Небольшое вступление

При исследовании/моделировании разных природных явлений (и не только), изредка появляется потребность в больших вычислительных способностях с которыми домашний ПК справится уже не в силе (каким бы мощным он небыл). В конце концов, эта потребность появились и у меня.

Моделирование, связанное с решением систем нелинейных дифференциальных уравнений на длинном промежутке относительного времени занимает достаточно много процессорного времени, поэтому было принято решение это все дело «расспаралелить».

Итак, обо всем — по порядку

Железо в наличии:

Дома: комп (Phenom II x4 840, 7x64) и ноут (Athlon II Dual-Core M320, 7x64) соединенные в одну сеть старым добрым маршрутизатором DIR-300.

Дома у девушки: комп (i5 4440, 7x64).

На работе: 10 компов (Athlon II Dual-Core, XPx86) (связанных в одну сеть) в одном помещении и 4 (Athlon II Dual-Core, XPx86) в другом (тоже связанных в одну сеть). Локальной сети между помещениями нет.

На всех вышеперечисленных ящиках присутствует доступ в интернет.

Приступаем к созданию 2х кластеров на работе.

В статье описан способ создания кластера, однако не указано на множество подводных камней при его создании, которые чуть бы не похоронили мою затею. (Хотя все было сделано по замечательной инструкции, за которою автору спасибо!)

Для начала хочется отметить, что прежде всего надо правильно установить Матлаб. Дело тут не в том, чтобы «не дышать при установке», или «правильно» выбрать компоненты, а в том, что есть 2 версии Матлаба. Одна Серверная, другая локальная. Так вот, если установить только одну из них — дела не будет.
В этой статье есть данные, которые помогут разобраться в вопросе с версиями, однако следует заметить, что в новой версии Матлаба R2013b, установщик работает немножко по другому чем описано на скринах в статье, поэтому для начала надо установить локальную версию с Parallel Computing Toolbox, а только потом, в другую папку, серверную версию с Distributed Computing Server, иначе будет выпадать ошибка при запуске Parallel Computing Toolbox:

Starting parallel pool (parpool) using the 'MJSProfileXXX' profile ... 
Error using parpool (line 111)
Failed to start a parallel pool. (For information in
addition to the causing error, validate the profile
'MJSProfile8' in the Cluster Profile Manager.)

Error in parallel.internal.ui.PoolHelper.startPool (line 11)
            parpool();

Caused by:
    Error using
    parallel.internal.pool.InteractiveClient/start (line
    326)
    Failed to start pool.
        Error using parallel.Job/submit (line 304)
        All dimension arguments must be greater than zero

Эта ошибка очень популярна на различных форумах, вот только как от нее избавится никто не говорит. Она возникает при запуске Parallel Computing Toolbox на серверной версии Матлаба (кнопка start parallel pool).
image

Поэтому, запускать параллельные/кластерные вычисления нужно с Mastera на локальной версии Матлаба.

Установить две версии Матлаба в одну папку, как рекомендуется в статье выше — установщик R2013b не позволил, и, как оказалось, правильно сделал!
После полной установки Матлабовского ПО, на Masterе должно присутствовать 2 папки. Первая — с локальной версией Матлаба, который цепляет все расширения матлабовских файлов и создает ярлыки, и вторая папка — с установленным Matlab Distributed Computing Server. (вторая папка автономна и может быть перенесена на все компьютеры локальной сети для экономии времени при развертывании кластера)

Компютер, на котором установлены 2 версии Матлаба будем считать Masterом, так как именно из него будет запускаться наша программа.
На остальные компьютеры данной локальной сети нужно установить только серверную версию Матлаб (или просто скопировать вторую папку с Masterа в любую директорию на остальных компах)

Вот теперь можно смело использовать вышеупомянутую статью, для создания локального кластера Матлаб. Однако стоит отметить, что запускать команды !mdce install и !mdce start в первый раз, следует из окна самого Матлаба не важно какой версии. Это поможет избежать ошибки отсутствия библиотек vcredist64/86, так как в случае запуска команды !mdce install с окна Матлаба — они самостоятельно установятся. В противном случае, сервер mdce, вызванный например с батника, может просто не подняться взирая на отсутствие библиотек.
Запускать эти команды надо из директории bin 2й папки соответственно (там есть зветный файл mdce.bat).
Лично мне было достаочно 3х команд на Masterе, чтобы запустить кластер:

!mdce install
!mdce start
!admincenter

А уже из Admin Center можно и планировщик создать и воркеров раскинуть по компам. Но тут опять есть подводный камень. Чертов брандмауэр! Настоятельно рекомендую его отключить и намертво! Со всеми правилами входящих и исходящих соединений и со всеми исключениями. Только так я смог добиться того, чтобы Admin Center добавил все компьютеры данной локальной сети. Кстати, при добавлении компьютера в локальной сети, можно задавать его имя к примеру Siegurd-PC и не боятся черточки. По крайней мере в последней версии Матлаба это работает.
При добавлении компьютеров в Admin Center, нужно чтобы на каждом компьютере уже была запущена служба mdce и висела в процессах. Сам Матлаб при этом на каждом компьютере может быть закрыт, так как он никак не участвует в работе.

В Admin Center есть возможность запустить службу mdce удаленно, но у меня это сделать так и не удалось. Возможно виной всему недостаток прав администратора для доступа к папкам компютеров локальной сети, но это не столь важно и никак не влияет на поставленную задачу.
И да, при запуске mdce скорее всего будет такие сообщения:

Setting permissions on LOGBASE C:WindowsTEMPMDCELog 
Setting permissions on CHECKPOINTBASE C:WindowsTEMPMDCECheckpoint 
Setting permissions on SECURITY_DIR C:WindowsTEMPMDCECheckpointsecurity 
Unable to give the "Administrators" group full control for C:WindowsTEMPMDCECheckpointsecurity 
You may need to manually give the "Administrators" group read and write access to this directory. 
Unable to give the "CREATOR OWNER" group full control for C:WindowsTEMPMDCECheckpointsecurity 
You may need to manually give the "CREATOR OWNER" group read and write access to this directory. 
Unable to give the "Authenticated Users" group traversal rights for C:WindowsTEMPMDCECheckpointsecurity 
You may need to manually give the "Authenticated Users" group traversal rights to this directory. 

Я их просто игнорирую, так как они не влияют на работоспособность кластера. В статье про правильную установку детально описан способ лечения этих ошибок, связанных с русскоязычностю оси.

Важно! При использовании Admin Center для создания воркеров, разработчики рекомендуют удостоверится, что открыт 7й порт в случае возникновения ошибок.

Создание планировщика

В Admin Center нажать на любому из добавленных компьютеров правой кнопкой мыши и в контекстном меню выбрать Start MJS, или и нажать на Start в самом окне Admin Center:

image

После создания планировщика, аналогично добавляем воркеров на каждый компьютер.
На этом с настройкой кластера в локальной сети все.

Запуск вычислений

Для запуска кластерных вычислений нужно запустить локальную версию Матлаба на Masterе и добавить планировщик. В главном окне Мталаба следует нажать на Diskover Clusters…

image

Потом выполнить поиск ранее созданного планировщика в локальной сети:

image

После его добавления, нужно выбрать в настройках параллельного профиля количество воркеров!

image

Заходим в Parallel Preferences и выбераем количество воркеров к которым следует подключатся.
image

Важно! Если выставленное количество воркеров в настройках будет меньше чем созданных в Admin Center, то вычисления будут проходить только на указанном числле воркеров. То есть, если Вы создали 20 вокеров, а в настройках стоит 4, то работать будут только 4 первых в списке Admin Center. Статус воркеров к которым вы подключились должен сменится с idle на busy.
В случае если выставленное число воркеров будет больше чем созданное — Матлаб сам подключится ко всем существующим воркерам без ошибок.

После проделанной работы можно смело запускать свой код, который будет сам распаралеливатся между всеми воркерами текущего планировщика (кластера). (Лично я использовал для этого цикл parfor, но есть и другие команды)
Эта схема задействована в 2 комнатах и Masterы администрируются удаленно через тимвювер из дому. К сожалению эти кластеры не связаны между собой, так как требуется именно полносвязная сеть (каждый с каждым), и я никак не смог настроить VPN между таким количеством компьютеров.

Создание домашнего кластера на VPN

Во многом развертывание кластера было схожим с предыдущими, однако использование VPN создавало несколько препятствий. Избавится от которых мне удалось лишь после длительных танцев с бубном.
Для объединения в одну сеть домашних компов и компа своей девушки был использован небезызвестный Хамачи. Теперешняя версия позволяет добавлять в сеть 5 машин бесплатно.

Как все правильно сделать:
На всех компах установить Хамачи. Создать виртуальную сеть на любом из них и подключится всем в эту сеть. Опять таки отключаем брандмауер будь он не ладен, запускаем службы и планировщик…
При добавлении компьютеров в Admin Center нужно добавлять их по IP адресам, а не по именам. Это важно! Компьютер-Master, на котором будут запущены вычисления с локальной версии Матлаба нужно добавить по имени.
В настройках Хамачи отключаем шифрование трафика, сжатие трафика, и фильтрацию трафика (устанавливаем значение: разрешить все). Только так мне удалось добиться того, чтобы все воркеры получили статус Connected! До этих действий воркеры создавались, но их статус был Failed to connect.
После того, как все воркеры получили статус Connected можно смело начинать вычисления по описанным выше инструкциям.

Примечание. Хамачи хорош, но нестабилен, особенно при экспериментах с сетевыми настройками, поэтому, если вдруг Вы не можете подключится к уделенному компьютеру — рекомендую перезагрузить оба (Master, и тот комп с которым нету связи) если не поможет — переустановите Хамачи.

Да, и еще одно. Служба mdce, будучи единожды установлена и запущена, будет сама включатся с включением компьютера до момента пока ее не остановить. Однако иногда, при изменении настроек сети и возникновении конфликтов, советую перезагрузить эту службу в качестве решения проблемы командами:

!mdce stop
!mdce start

Итоги

Таким образом преодолевая все эти тонкости, таки были организованы 3 вычислительных кластера, которые, через тимвювер, удаленно администрируются из любого компьютера в любое время. Главное — не забыть отключить сон и автовыключение на всех компьютерах!

Еще раз хочу поблагодарить авторов 2х статей, которые использовались выше. Спасибо Вам!
Ведь без Ваших трудов, мене так и не удалось бы поднять эти кластеры!

Надеюсь, моя статья поможет людям, которые хотели создать вычислительный Matlab кластер, но споткнувшись о подводные камни так и не смогли этого осуществить.

PS: Если кто знает как создать полносвязную, бесплатную VPN на окнах — прошу осветить. Это поможет многим ученым в организации и проведении серьезных научных исследований.

Удачи с развертыванием кластеров!

Спасибо за внимание!

Автор: Siegurd

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js