Создайте кластер компьютеров Windows 7 для параллельной обработки в R?

Я запускаю анализ анализа кривой доходности termstrc в R за 10 лет ежедневных данных о ценах на облигации для 5 разных стран. Это очень интенсивно вычисляется, он занимает 3200 секунд в каждой стране по стандартным приложениям, и если я использую foreach и% dopar% (с doSNOW) на моем Mac OS 2009 i7, используя все 4 ядра (8 с гиперпотоком), я получаю это до 850 секунд. Мне нужно повторять этот анализ каждый раз, когда я добавляю страну (для расчета межстрановых спрэдов), и у меня есть 19 стран, в которых еще много кривых доходности кредитов. Принятое время начинает выглядеть как серьезная проблема. Кстати, рассматриваемая функция termstrc анализируется в R, но записывается в C.

Теперь мы небольшая компания из 12 человек (с ограниченным бюджетом), все оснащены 8 ГБ оперативной памяти, i7 ПК, из которых по меньшей мере половина используется для задач повседневной обработки текста/электронной почты/просмотра, т.е. используя максимум 5% от их производительности. Все они подключены к сети с использованием гигабитного (но не 10-гигабитного) ethernet.

Можно ли скопировать некоторые из этих недоиспользуемых компьютеров с использованием MPI и запустить мой R-анализ по ним? Будет ли затронута сеть? Каждая итерация функции анализа кривой доходности занимает около 1,2 секунды, поэтому я предполагаю, что если гранулярность параллельной обработки должна передать целую функциональную итерацию в каждый кластер node, 1,2 секунды должны быть довольно большими по сравнению с задержкой гигабитного Ethernet

Можно ли это сделать? Как? И какое влияние окажут на моих коллег. Могут ли они продолжать читать свои письма, пока я обкладываю налоги на их машины?

Я отмечаю, что Open MPI, похоже, больше не поддерживает Windows, а MPICH. Что бы вы использовали, если таковые имеются?

Возможно, запустите виртуальную машину Ubuntu на каждом ПК?

Ответ 1

Да, вы можете. Существует несколько способов. Одним из самых простых является использование redis в качестве бэкэнд (так же просто, как вызов sudo apt-get install redis-server на машине Ubuntu, по слухам, у вас может быть redis-сервер на машина Windows тоже).

Используя пакет doRedis, вы можете очень легко запускать очереди в очереди задач в redis, а затем использовать один, два,... простаивающие рабочие для запроса очереди. Лучше всего, вы можете легко смешивать операционные системы, так что да, ваши машины для окон ваших сотрудников подходят. Кроме того, вы можете использовать один, два, три,... клиента по своему усмотрению и масштабировать вверх или вниз. Очередь не знает или не заботится, она просто поставляет задания.

Bost of all, виньетка в doRedis содержит рабочие примеры сочетания клиентов Linux и Windows, чтобы ускорить процесс начальной загрузки.

Ответ 2

Возможно, не тот ответ, который вы искали, но - это одна из тех ситуаций, когда альтернатива намного лучше, чем трудно игнорировать.

Стоимость кластеров AWS является смехотворно низкой (мой акцент) именно для этих типов вычислительных задач. Вы платите только за то, что используете. Я могу гарантировать, что вы сэкономите деньги (по крайней мере, в случае дополнительных затрат), не тратя время на то, чтобы конвертировать 12 окон в кластер. Для ваших целей вы, возможно, даже можете сделать это бесплатно. (IIRC, они по-прежнему предлагают свободное время вычислений на кластерах)

Ссылки:

Некоторые из этих экземпляров настолько мощные, что вам, вероятно, даже не нужно будет выяснять, как настроить работу кластера (учитывая текущее описание). Как видно из ссылок, затраты являются смехотворно низкими: от 1-4 $в час вычислительного времени.

Ответ 3

Как насчет OpenCL?

Для этого потребуется переписать код C, но это позволит значительно увеличить скорость. Графический процессор имеет огромную вычислительную мощность.