Какие-нибудь предложения для того, чтобы заставить код R использовать несколько процессоров?


28

У меня есть R-скрипты для чтения больших объемов данных CSV из разных файлов, а затем выполнять задачи машинного обучения, такие как SVM для классификации.
Существуют ли какие-либо библиотеки для использования нескольких ядер на сервере R.
или
Каков наиболее подходящий способ достижения этого?


Я просто не понимаю, как тот факт, что импорт данных и запуск SVM имеет какое-либо отношение к этому вопросу. Вот почему я думаю, что это больше вопрос SO. Но я мог бы видеть внешние ссылки как хорошее долгосрочное решение, так как это R ...
Шейн

3
У меня нет проблем с такого рода вопросами и ответами здесь. R не является таким распространенным языком (как Python или Java), что квант естественным образом сказал бы: «О, это общий вопрос программирования, поэтому я должен пойти к StackOverflow или подобному и спросить это или искать там решения». На самом деле это больше вопрос к списку рассылки R или сайту группы. Для обслуживания начинающих аналитиков, которые хотят изучать R, мы также будем рады получить ответ здесь.
Пол

2
Голосуйте, чтобы оставаться открытым; очень актуально для статистиков, потому что способы, которыми наши проблемы могут или не могут быть разбиты на параллельные потоки, имеют отношение к задаваемому вопросу.
Расселпирс

@chl: Спасибо за то, что подняли это. Фактически, я проверил все некоммерческие ссылки из этой темы вскоре после ее появления, но не смог найти ничего, что работает на Win 7 x64.
whuber

1
однако, решение, которое я представляю, работает с win 7 и не является коммерческим (подробнее см. пост, на который я ссылался). Он связан с коммерческой средой, но его можно отделить от него (как показано в моем посте). И сам код GPL ...
Тал Галили

Ответы:


16

Если это на Linux, то самым простым является многоядерный . Кроме того, я предлагаю взглянуть на MPI (особенно с пакетом снега ).

В целом, посмотрите на:

  1. High-Performance Computing посмотреть на CRAN.
  2. "Состояние искусства в параллельных вычислениях с R"

Наконец, я рекомендую использовать пакет foreach для абстрагирования параллельного бэкэнда в вашем коде. Это сделает его более полезным в долгосрочной перспективе.


Я в основном использую многоядерный, все же я люблю снегопад больше, чем снег и Rmpi ​​за его отказоустойчивость и чистый интерфейс.

@mbq +1 для снегопада - абстрагирует снег еще больше и делает параллельные вычисления с R довольно простыми.
Шарпи


5

Шейн прав. Оба многоядерных и Rmpi являются победителями.

Чуть более широкий охват этой темы представлен в представлении задач CRAN по высокопроизводительным вычислениям . Это также связано с недавней обзорной статьей о параллельных вычислениях с R из JSS.

И наконец, несколько практических примеров и советов содержатся в учебнике « Введение в HPC с R», который я даю время от времени - см. На моей странице презентаций самую свежую копию с прошлой недели на сайте useR.


Ну, мьютексы нужны. Как я прокомментировал ваш ответ, я увидел только первую (необработанную) версию и понял, что могу расширить mc и Rmpi. А потом ты сделал, и я похож на подражателя. Такова жизнь.
Дирк Эддельбюттель

С другой стороны, мой ответ основан на прочтении вашей статьи / презентации в прошлом. Думаю, я тоже тебя копирую.
Шейн

5

Я заметил, что в предыдущих ответах отсутствуют общие соображения HPC.
Прежде всего, ни один из этих пакетов не позволит вам запустить один SVM параллельно. Так что вы можете ускорить оптимизацию параметров или перекрестную проверку, но вы должны написать свои собственные функции для этого. Или, конечно, вы можете запустить задание для разных наборов данных параллельно, если это так.
Вторая проблема - память; если вы хотите распределить вычисления по нескольким физическим компьютерам, бесплатный обед не требуется, и вы должны скопировать данные - здесь вы должны рассмотреть, имеет ли смысл заранее распространять копию данных между компьютерами, чтобы сохранить связь. С другой стороны, если вы хотите использовать несколько ядер на одном компьютере, особенно подходит многоядерный, поскольку он позволяет всем дочерним процессам получать доступ к памяти родительского процесса, что позволяет сэкономить некоторое время и много места в памяти.


1
+1 Отличный момент о том, что это не касается разделения перекрестной проверки.
Шейн

Кстати, недавно была проведена работа (2013) по включению HPC для отдельных SVM с помощью dCSE ( hector.ac.uk/cse/distributedcse/reports/sprint03/… ). Существует пакет sprintдля R с функцией psvm, но они немного отстают от того, чтобы идти в ногу с изменениями в R 3.0 и новыми рекомендациями по представлению CRAN, поэтому текущая загрузка не доступна ни в CRAN, ни полностью совместима с R 3.0. Ваш пробег может варьироваться.
яркая звезда

3

Ответы Шейна и Дирка - точные.

Тем не менее, вы можете взглянуть на коммерческую версию R, которая называется Revolution R и предназначена для работы с большими наборами данных и работает на нескольких ядрах. Это программное обеспечение бесплатно для ученых (что может быть в вашем случае, я не знаю)


5
Я не совсем согласен. Revolution отлично справляется с продажами, пытаясь получить разум (как свидетельствует ваш пост), но на данный момент в продукте очень мало того, что вы бы не получили с обычным R (по крайней мере, в Linux). Intel MKL, конечно, но вы можете получить Goto Blas. В Windows они предлагают doSMP, который помогает, поскольку многоядерный не может быть построен там.
Дирк Эддельбюттель

2
Но, конечно, doSMP - это именно то, что ищет OP, если они работают в среде Windows.
Расселпирс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.