ฟอเรสต์แบบสุ่มในข้อผิดพลาด Amazon ec2: ไม่สามารถจัดสรรเวกเตอร์ที่มีขนาด 5.4 Gb


9

ฉันกำลังฝึกอบรมโมเดลฟอเรสต์แบบสุ่มใน R โดยใช้randomForest()ต้นไม้ 1,000 ต้นและเฟรมข้อมูลพร้อมตัวทำนาย 20 ตัวและแถว 600K ทุกอย่างในแล็ปท็อปของฉันใช้งานได้ดี แต่เมื่อฉันย้ายไปที่ amazon ec2 เพื่อทำงานแบบเดียวกันฉันได้รับข้อผิดพลาด:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

ฉันใช้c3.4xlargeประเภทอินสแตนซ์ดังนั้นมันจึงค่อนข้างอ้วน ไม่มีใครรู้วิธีแก้ปัญหานี้เพื่อให้มันทำงานบนอินสแตนซ์นี้หรือไม่? ฉันชอบที่จะทราบถึงความแตกต่างของหน่วยความจำที่ทำให้เกิดปัญหานี้เฉพาะในอินสแตนซ์ ec2 เท่านั้นและไม่ได้อยู่ในแล็ปท็อปของฉัน (โปรเซสเซอร์ X OS 10.9.5 2.7 GHz Intel Core i7; หน่วยความจำ 16 GB 1600 MHz DDR3)

ขอบคุณ

คำตอบ:


5

นี่คือคำแนะนำ (ใช้ความเสี่ยงของคุณเอง!):

หากมาตรการที่เรียบง่ายที่กล่าวมาข้างต้นไม่ได้ช่วยหรือคุณต้องการเพิ่มความสามารถในการขยายระบบและ / หรือประสิทธิภาพรวมถึงความสามารถในการทำให้กระบวนการเป็นคู่ขนานบนเครื่องเดียวหรือข้ามหลายเครื่องให้พิจารณาใช้bigrfแพ็คเกจ R: http: // cran r-project.org/web/packages/bigrf ยังเห็นการสนทนานี้: https://stackoverflow.com/q/1358003/2872891


2

เพิ่มเติมสำหรับแนวคิดอื่น ๆ : ลดข้อมูลของคุณจนกว่าคุณจะทราบว่าคุณสามารถทำงานอะไรบนอินสแตนซ์ของ Amazon หากไม่สามารถทำแถว 100k ได้แสดงว่ามีบางอย่างผิดปกติมากหากแถวที่ล้มเหลวที่ 590k นั้นจะเป็นเพียงเล็กน้อย

อินสแตนซ์ c3.4x large มี RAM 30Gb ดังนั้นใช่มันควรจะเพียงพอ


2

ข้อผิดพลาดที่แน่นอนที่คุณเห็นนั้นมีประโยชน์เสมอกับ Google ยกเว้นบางอย่างเช่นหน่วยความจำจริงของเวกเตอร์ สำหรับฉันการพบกันครั้งแรกเป็นเอกสารที่น่าสนใจที่เรียกว่า " R: ขีด จำกัด หน่วยความจำของ R " โดยที่ภายใต้ "Unix" สามารถอ่านได้:

ขีด จำกัด พื้นที่ที่อยู่เป็นระบบเฉพาะ: OS 32 บิตกำหนดขีด จำกัด ไม่เกิน 4Gb: มักเป็น 3Gb การรันไฟล์ประมวลผลแบบ 32 บิตบนระบบปฏิบัติการแบบ 64 บิตจะมีข้อ จำกัด ที่คล้ายกัน: ไฟล์แบบ 64 บิตนั้นจะมีข้อ จำกัด เฉพาะระบบที่ไม่สิ้นสุด (เช่น 128Tb สำหรับ Linux บน x86_64 ซีพียู)

ดูความช่วยเหลือของ OS / เชลล์ในคำสั่งเช่น จำกัด หรือ ulimit สำหรับวิธีกำหนดข้อ จำกัด เกี่ยวกับทรัพยากรที่มีให้สำหรับกระบวนการเดียว ตัวอย่างเช่นผู้ใช้ทุบตีสามารถใช้

ulimit -t 600 -v 4000000

ในขณะที่ผู้ใช้ csh อาจใช้

limit cputime 10m limit vmemoryuse 4096m

เพื่อ จำกัด กระบวนการเพียง 10 นาทีของเวลา CPU และ (ประมาณ) 4Gb ของหน่วยความจำเสมือน (มีตัวเลือกอื่นเพื่อตั้งค่า RAM ที่ใช้งานอยู่ แต่โดยทั่วไปจะไม่ได้รับเกียรติ)

ดังนั้นคุณควรตรวจสอบ

  1. คุณใช้ระบบปฏิบัติการประเภทใดในอินสแตนซ์ EC2 ของคุณ
  2. คุณสร้าง R build ชนิดใดบน OS นั้นและตรวจสอบให้แน่ใจว่าคุณรันเวอร์ชัน 64 บิต
  3. หากทั้งคู่เป็น 64 บิตอยู่แล้วให้ใช้ulimitเพื่อตั้งค่าหน่วยความจำเช่น 8Gb:ulimit -v 8000000
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.