R random forest di Amazon ec2 Kesalahan: tidak dapat mengalokasikan vektor dengan ukuran 5,4 Gb

9

Saya melatih model hutan acak dalam R menggunakan randomForest()1000 pohon dan bingkai data dengan sekitar 20 prediktor dan 600 ribu baris. Di laptop saya semuanya berfungsi dengan baik, tetapi ketika saya pindah ke amazon ec2, untuk menjalankan hal yang sama, saya mendapatkan kesalahan:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

Saya menggunakan c3.4xlargetipe instance jadi cukup gemuk. Adakah yang tahu solusi untuk menjalankannya pada contoh ini? Saya ingin mengetahui nuansa memori yang menyebabkan masalah ini hanya pada contoh EC2 dan bukan pada laptop saya (OS X 10.9.5 Prosesor 2.7 GHz Intel Core i7; Memori 16 GB 1600 MHz DDR3)

Terima kasih.

Ethan
sumber

Jawaban:

5

Berikut ini beberapa saran (gunakan dengan risiko Anda sendiri!):

Jika langkah-langkah sederhana yang disebutkan di atas tidak membantu ATAU Anda ingin mencapai lebih banyak skalabilitas dan / atau kinerja , termasuk kemampuan untuk memparalelkan proses pada satu mesin atau di beberapa mesin, pertimbangkan untuk menggunakan bigrfpaket R: http: // cran. r-project.org/web/packages/bigrf . Lihat juga diskusi ini: https://stackoverflow.com/q/1358003/2872891 .

Aleksandr Blekh
sumber
2

Tambahan untuk gagasan lain: kurangi data Anda sampai Anda tahu apa yang Anda bisa jalankan pada instance Amazon. Jika tidak dapat melakukan 100k baris maka ada sesuatu yang sangat salah, jika gagal pada 590k baris maka marginalnya.

Contoh c3.4xlarge memiliki 30Gb RAM, jadi ya itu sudah cukup.

Spacedman
sumber
2

Itu selalu membantu untuk hanya Google kesalahan yang tepat yang Anda lihat, tidak termasuk spesifik seperti memori sebenarnya dari vektor. Bagi saya, hit pertama adalah dokumentasi yang menarik yang disebut " R: Batas memori R ", di mana, di bawah "Unix", orang dapat membaca:

Batas address-space khusus untuk sistem: OS 32-bit memaksakan batas tidak lebih dari 4Gb: seringkali 3Gb. Menjalankan executable 32-bit pada OS 64-bit akan memiliki batas yang sama: executable 64-bit pada dasarnya memiliki batas spesifik sistem yang tak terbatas (mis. 128Tb untuk Linux pada x86_64 cpus).

Lihat bantuan OS / shell tentang perintah seperti limit atau ulimit untuk cara memaksakan batasan pada sumber daya yang tersedia untuk satu proses tunggal. Misalnya pengguna bash bisa menggunakan

ulimit -t 600 -v 4000000

sedangkan pengguna csh mungkin menggunakan

limit cputime 10m limit vmemoryuse 4096m

untuk membatasi proses hingga 10 menit waktu CPU dan (sekitar) 4Gb memori virtual. (Ada opsi lain untuk mengatur RAM yang digunakan, tetapi umumnya tidak dihormati.)

Jadi, Anda harus memeriksa

  1. Apa jenis OS yang Anda jalankan pada instance EC2 Anda
  2. Apa jenis R build yang Anda jalankan di OS itu, dan pastikan Anda menjalankan versi 64bit
  3. Jika keduanya sudah 64bit, maka gunakan ulimituntuk mengatur memori ke mis 8Gb:ulimit -v 8000000
logc
sumber