Adakah saran untuk membuat kode R menggunakan banyak prosesor?

28

Saya memiliki R-script untuk membaca sejumlah besar data csv dari file yang berbeda dan kemudian melakukan tugas-tugas pembelajaran mesin seperti svm untuk klasifikasi.
Apakah ada perpustakaan untuk memanfaatkan beberapa core di server untuk R.
atau
Apa cara yang paling cocok untuk mencapai itu?

mohans
sumber
Saya hanya tidak melihat bagaimana fakta bahwa mengimpor data dan menjalankan SVM memiliki relevansi dengan pertanyaan. Itu sebabnya saya pikir ini lebih merupakan pertanyaan SO. Tapi saya bisa melihat Xrefs sebagai solusi jangka panjang yang bagus karena itu adalah ...
Shane
3
Saya tidak punya masalah dengan T&J semacam ini di sini. R bukan bahasa arus utama (seperti Python atau Java) sehingga seorang kuant akan secara alami mengatakan, "Oh ini pertanyaan pemrograman umum, jadi saya harus pergi ke StackOverflow atau serupa dan tanyakan ini atau cari solusi di sana". Sebenarnya ini lebih merupakan pertanyaan untuk milis R atau situs grup. Untuk melayani para analis pemula yang ingin belajar R kita harus senang memiliki jawaban di sini juga.
Paul
2
Pilih untuk tetap terbuka; sangat relevan untuk ahli statistik karena cara-cara di mana masalah kita dapat atau tidak dapat dipecah menjadi aliran paralel adalah relevan dengan pertanyaan yang diajukan.
russellpierce
@ chl: Terima kasih sudah membahas ini. Bahkan, saya memeriksa semua referensi non-komersial dari utas ini tak lama setelah itu muncul tetapi tidak dapat menemukan apa pun yang berfungsi pada Win 7 x64.
whuber
1
whuber, solusi yang saya sajikan bekerja dengan win 7 dan tidak komersial (baca posting yang saya tautkan untuk perincian). Ini dibundel dengan lingkungan komersial tetapi dapat dipisahkan darinya (seperti yang ditunjukkan oleh pos saya). Dan kodenya sendiri adalah GPL ...
Tal Galili

Jawaban:

16

Jika ada di Linux, maka yang paling mudah adalah multicore . Di luar itu, saya sarankan untuk melihat MPI (terutama dengan paket salju ).

Secara umum, lihat:

  1. Tampilan Komputasi Kinerja Tinggi pada CRAN.
  2. "Keadaan Seni dalam Komputasi Paralel dengan R"

Terakhir, saya sarankan menggunakan paket foreach untuk mengabstraksi backend paralel dalam kode Anda. Itu akan membuatnya lebih berguna dalam jangka panjang.

Shane
sumber
Saya terutama menggunakan multicore, masih saya lebih suka salju daripada salju dan Rmpi ​​untuk toleransi kesalahan dan antarmuka yang bersih.
@mbq +1 untuk salju-salju abstrak lebih jauh dan membuat komputasi paralel dengan R cukup sederhana.
Sharpie
6

Jika Anda menggunakan GNU / Linux jawaban sebelumnya oleh Shane dan Dirk sangat bagus.

Jika Anda memerlukan solusi untuk windows, ada satu di posting ini:

Pemrosesan Multicore Paralel dengan R (di Windows)

Meskipun paket belum di CRAN. itu dapat diunduh dari tautan itu.

Tal Galili
sumber
5

Shane benar. Baik multicore dan Rmpi adalah pemenang.

Cakupan topik yang sedikit lebih luas ada di CRAN Task View on High-Performance Computing . Ini juga menghubungkan ke artikel survei yang cukup baru tentang Komputasi Paralel dengan R dari JSS.

Terakhir, beberapa contoh dan tips praktis ada di Pengenalan HPC dengan tutorial R yang saya berikan sesekali - lihat halaman presentasi saya untuk salinan terbaru dari minggu lalu di useR.

Dirk Eddelbuettel
sumber
Yah, mutex dibutuhkan. Ketika saya mengomentari jawaban Anda, saya hanya melihat versi (mentah) pertama dan berpikir dengan baik, saya dapat memperluas pada mc dan Rmpi. Dan kemudian Anda melakukannya dan saya terlihat seperti peniru. Begitulah hidup.
Dirk Eddelbuettel
Di sisi lain, jawaban saya berasal dari membaca makalah / presentasi Anda di masa lalu. Jadi saya kira saya juga menyalin Anda.
Shane
5

Saya perhatikan bahwa jawaban sebelumnya tidak memiliki beberapa pertimbangan HPC umum.
Pertama-tama, tak satu pun dari paket-paket itu akan memungkinkan Anda untuk menjalankan satu SVM secara paralel. Jadi yang dapat Anda percepat adalah optimasi parameter atau validasi silang, tetap Anda harus menulis fungsi sendiri untuk itu. Atau tentu saja Anda dapat menjalankan pekerjaan untuk dataset yang berbeda secara paralel, jika itu adalah suatu kasus.
Masalah kedua adalah memori; jika Anda ingin menyebarkan perhitungan melalui beberapa komputer fisik, tidak ada makan siang gratis dan Anda harus menyalin data - di sini Anda harus mempertimbangkan apakah masuk akal untuk mendistribusikan salinan data di seluruh komputer untuk menghemat komunikasi. Di sisi lain, jika Anda ingin menggunakan beberapa core pada satu komputer, multicore lebih sesuai karena memungkinkan semua proses anak mengakses memori proses induk, sehingga Anda dapat menghemat waktu dan banyak ruang memori.


sumber
1
+1 Poin bagus tentang bagaimana ini tidak berurusan dengan memecah cross-validation.
Shane
Secara kebetulan, ada beberapa pekerjaan terbaru (2013) dalam mengaktifkan HPC untuk masing-masing SVM oleh dCSE ( hector.ac.uk/cse/distributedcse/reports/sprint03/… ). Ada paket sprintuntuk R dengan fungsi psvm, tetapi mereka sedikit ketinggalan dalam mengikuti perubahan R 3.0 dan pedoman pengiriman CRAN baru, sehingga unduhan saat ini tidak tersedia di CRAN atau sepenuhnya kompatibel dengan R 3.0. Jarak tempuh Anda mungkin beragam.
Bintang terang
3

Respons Shane dan Dirk sangat tepat.

Namun demikian, Anda mungkin ingin melihat versi komersial R, yang disebut Revolution R yang dibangun untuk menangani kumpulan data besar dan berjalan pada banyak inti. Perangkat lunak ini gratis untuk akademisi (yang mungkin menjadi masalah Anda, saya tidak tahu)

Dave Kellen
sumber
5
Saya agak tidak setuju. Revolution melakukan pekerjaan penjualan yang hebat dalam mendapatkan mindshare (sebagaimana dibuktikan oleh posting Anda) tetapi pada saat ini ada sangat sedikit dalam produk yang belum Anda dapatkan dengan R normal (setidaknya di Linux). Intel MKL, tentu, tetapi Anda bisa mendapatkan Goto Blas. Di Windows, mereka menawarkan doSMP yang membantu karena multicore tidak dapat dibangun di sana.
Dirk Eddelbuettel
2
Tapi, tentu saja, doSMP adalah persis apa yang OP akan cari jika mereka bekerja di lingkungan Windows.
russellpierce