Будь-які пропозиції щодо створення коду R використовувати декілька процесорів?


28

У мене є R-скрипти для читання великої кількості даних CSV з різних файлів, а потім для виконання завдань машинного навчання, таких як svm для класифікації.
Чи є бібліотеки для використання декількох ядер на сервері для Р.
або
Який найбільш підходящий спосіб досягти цього?


Я просто не бачу, як той факт, що імпорт даних та запуск SVM має якесь значення для цього питання. Ось чому я думаю, що це більше питання SO. Але я міг бачити Xrefs як хороше довгострокове рішення, оскільки це R ...
Шейн

3
Я не маю жодних проблем з подібними питаннями. R не є такою основною мовою (як Python або Java), що квант, природно, сказав би: "О, це загальне питання програмування, тому я повинен перейти до StackOverflow або подібного і запитати це або шукати там рішення". Насправді це більше питання для списку розсилки R або групового сайту. Щоб обслуговувати тих початківців аналітиків, які хочуть вивчити R, ми повинні бути раді відповіді і тут.
Павло

2
Голосувати за те, щоб залишатись відкритими; дуже важливий для статистиків, оскільки шляхи, за допомогою яких наші проблеми можуть або не можуть бути розбиті на паралельні потоки, мають відношення до питання, яке задається.
russellpierce

@chl: Дякуємо, що зіткнулися з цим. Насправді я перевірив усі некомерційні посилання з цього потоку незабаром після того, як він з’явився, але не зміг знайти нічого, що працює на Win 7 x64.
whuber

1
Більше того, рішення, яке я представляю, працює з програмою win 7 і не є комерційною (детальніше читайте публікацію, до якої я посилався). Він поєднується з комерційним середовищем, але його можна відокремити (як мій пост показує, як). А сам код GPL ...
Тал Галілі

Відповіді:


16

Якщо це на Linux, то найбільш прямим є багатоядерний . Крім того, я пропоную переглянути MPI (особливо з пакетом снігу ).

Загалом, подивіться на:

  1. Вид високоефективних обчислень на CRAN.
  2. "Стан мистецтва в паралельних обчисленнях з R"

Нарешті, я рекомендую використовувати пакет foreach, щоб абстрагувати паралельний вихідний код у вашому коді. Це зробить це кориснішим у довгостроковій перспективі.


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

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


5

Шейн правильний. І багатоядерні, і Rmpi є переможцями.

Трохи ширше висвітлення теми міститься в CRAN Task View щодо високоефективних обчислень . Це також посилається на досить недавню статтю опитування про паралельні обчислення з R від JSS.

Нарешті, декілька практичних прикладів та порад є у вступі до HPC з навчальним посібником, який я даю раз у раз - дивіться мою сторінку з презентаціями щодо останньої копії з минулого тижня в користуванніR.


Ну, потрібні мутекси. Коли я коментував вашу відповідь, я побачив лише першу (сировину) версію і добре зрозумів, я можу розширитись на 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 - саме те, що шукала б ОП, якби вони працювали в середовищі Windows.
russellpierce
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.