Как настроить подчиненные узлы кластера (в Windows)

Мне нужно запустить тысячи* моделей на 15 машинах (каждая по 4 ядра), все под Windows. Я начал изучать пакеты parallel, snow и snowfall и прочитал кучу вводных, но в основном они сосредоточены на настройке мастера. Существует лишь немного информации о том, как настроить рабочие (подчиненные) узлы в Windows. Информация часто противоречива: одни говорят, что кластер SOCK - это практически самый простой путь, другие утверждают, что Настройка кластера SOCK сложна в Windows (настройка sshd), и лучше всего использовать MPI.

Итак, как проще всего установить подчиненные узлы в Windows? MPI, PVM, SOCK или NWS? Моими, возможно, наивными идеями были (перечислены по приоритету):

  1. Использовать все 4 ядра на ведомых узлах (обязательно).
  2. В идеале мне нужен только R с некоторыми пакетами и подчиненный R-скрипт или функция R, которая прослушивала бы какой-то порт и ждала задач от мастера.
  3. В идеале узлы могут динамически добавляться/удаляться из кластера.
  4. В идеале ведомые устройства должны подключаться к ведущему, поэтому мне не нужно было бы перечислять все IP-адреса ведомых устройств в конфигурации ведущего устройства.

Только 1 требуется на 100%, 2-4 "было бы хорошо". Слишком наивно просить?

Извините, но я не смог понять это из доступных документов и руководств. Буду благодарен, если укажете на правильный источник.


* Обратите внимание, что создание каждой из этих тысяч моделей займет не менее 7 минут, так что больших затрат на связь не возникнет.


person Tomas    schedule 24.03.2014    source источник
comment
R будет обрабатывать рабочих. Нужно просто экспортировать в них все функции и пакеты с помощью готовых инструментов (в снегопаде это sfExport и sfLibrary).   -  person Roman Luštrik    schedule 24.03.2014
comment
@RomanLuštrik, R справится с рабочими приятно знать, но вопрос был как - как мне их настроить? О каком типе кластера вы говорите?   -  person Tomas    schedule 24.03.2014
comment
Посмотрите здесь пример кода и комментарии внизу о MPI и SOCK ics.uci.edu/~vqnguyen/talks/ParallelComputingSeminaR.pdf   -  person jpd527    schedule 24.03.2014
comment
Ой, извините, забыл включить. Я использую снег на SOCK.   -  person Roman Luštrik    schedule 24.03.2014
comment
Я не думаю, что два приведенных вами ответа противоречат друг другу. С одной машиной кластер SOCK довольно прост, потому что в этом случае ssh не используется. С несколькими машинами кластер MPI проще, если вы не являетесь экспертом по Windows ssh.   -  person Steve Weston    schedule 25.03.2014


Ответы (1)


Жаль, что со всеми этими API (например, parallel/snow/snowfall) сложно работать, много документов, но не то, что вам нужно... Я нашел API, который очень прост и идет прямо к идеям, которые я набросал. !! Это пакет redis и doRedisR (как рекомендуется здесь). Наконец-то появилось очень простое руководство! Немного переделал и получил вот это:

Воркерам нужны только R, пакет doRedis и этот скрипт:

require(doRedis)    
redisWorker('jobs', '10.0.0.7') # IP of the server

Мастеру требуется работающий сервер Redis (установлен экспериментальные двоичные файлы Windows для Windows), и этот код R:

require(doRedis)
registerDoRedis('jobs')
foreach(j=1:10,.combine=sum,.multicombine=TRUE) %dopar%
    ... # whatever you need to run
removeQueue('jobs')

Добавление/удаление рабочих процессов полностью динамическое, нет необходимости указывать IP-адреса на мастере, автоматическая "балансировка нагрузки", просто и нет необходимости в тоннах документации! Это решение отвечает всем требованиям и даже больше, как указано в ?registerDoRedis:

Параллельная серверная часть doRedis допускает сбои между рабочими процессами и автоматически повторно отправляет невыполненные задачи.

Я не знаю, насколько сложно это было бы при использовании parallel/snow/snowfall с SOCKS/MPI/PVM/NWS, если бы это вообще было возможно, но, думаю, очень сложно...

Единственные недостатки использования Redis, которые я обнаружил:

person Tomas    schedule 24.03.2014
comment
doRedis действительно кажется очень простым решением, однако я сомневаюсь, что он поддерживает многоядерность на ведомых устройствах. Я пытался объединить doRedis и doSNOW, но не смог. у вас есть какие-нибудь подсказки, как заставить рабов работать на многоядерном? - person Jens; 11.03.2015