Amazon ec2 त्रुटि पर यादृच्छिक वन: आकार का वेक्टर आवंटित नहीं कर सकते 5.4 Gb


9

मैं randomForest()लगभग 20 भविष्यवक्ताओं और 600K पंक्तियों के साथ 1000 पेड़ों और डेटा फ़्रेमों का उपयोग करके आर में यादृच्छिक वन मॉडल का प्रशिक्षण दे रहा हूं । मेरे लैपटॉप पर सब कुछ ठीक काम करता है, लेकिन जब मैं amazon ec2 में जाता हूं, उसी चीज को चलाने के लिए, मुझे त्रुटि मिलती है:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

मैं c3.4xlargeउदाहरण प्रकार का उपयोग कर रहा हूँ, इसलिए यह बहुत गोमांस है। किसी को भी इस उदाहरण पर चलाने के लिए इसे पाने के लिए एक वैकल्पिक हल पता है? मैं मेमोरी की बारीकियों को जानना पसंद करूंगा जो इस समस्या का कारण केवल ec2 उदाहरण पर है और मेरे लैपटॉप पर नहीं (OS X 10.9.5 प्रोसेसर 2.7 GHz Intel Core i7; मेमोरी 16 GB 1600 MHz DDR3)

धन्यवाद।

जवाबों:


5

यहाँ कुछ सलाह दी गई है (अपने जोखिम पर उपयोग करें!):

यदि उपर्युक्त सरल उपाय मदद नहीं करते हैं या आप अधिक मापनीयता और / या प्रदर्शन प्राप्त करना चाहते हैं , जिसमें एकल मशीन या कई मशीनों पर प्रक्रिया को समानांतर करने की क्षमता भी शामिल है , तो bigrfआर पैकेज: http: // क्रेन का उपयोग करने पर विचार करें । r-project.org/web/packages/bigrf । : इसके अलावा इस चर्चा को देखने के https://stackoverflow.com/q/1358003/2872891


2

अन्य विचारों के लिए अतिरिक्त: अपने डेटा को तब तक कम करें जब तक आप यह नहीं समझ लेते कि आप अमेज़ॅन उदाहरण पर क्या चला सकते हैं। यदि यह 100k पंक्तियों को नहीं कर सकता है तो कुछ बहुत गलत है, यदि यह 590k पंक्तियों में विफल रहता है तो इसकी सीमांत।

C3.4xlarge के उदाहरण में 30Gb RAM है, इसलिए हां यह पर्याप्त होना चाहिए।


2

यह केवल Google को उस सटीक त्रुटि के लिए मददगार है जो आप देख रहे हैं, वेक्टर की वास्तविक मेमोरी जैसी विशिष्टताओं को छोड़कर। मेरे लिए, पहला हिट " आर: मेमोरी लिमिट्स ऑफ आर " नामक एक दिलचस्प डॉक्यूमेंटेशन था , जहाँ, "यूनिक्स" के तहत, कोई भी इसे पढ़ सकता है:

पता-स्थान सीमा प्रणाली-विशिष्ट है: 32-बिट OSes 4Gb से अधिक नहीं की सीमा लगाता है: यह प्रायः 3Gb है। 64-बिट OS पर 32-बिट निष्पादनों को चलाने की समान सीमाएँ होंगी: 64-बिट निष्पादनों में अनिवार्य रूप से अनंत प्रणाली-विशिष्ट सीमा (जैसे x86_64 cpus पर लिनक्स के लिए 128Tb) होगी।

किसी एकल प्रक्रिया के लिए उपलब्ध संसाधनों पर सीमाएं कैसे लगाई जाए, इसके लिए लिमिट या अलिमिट जैसे आदेशों पर ओएस / शेल की मदद देखें। उदाहरण के लिए एक बैश उपयोगकर्ता उपयोग कर सकता है

ulimit -t 600 -v 4000000

जबकि एक csh उपयोगकर्ता उपयोग कर सकता है

limit cputime 10m limit vmemoryuse 4096m

सीपीयू समय और (लगभग) आभासी स्मृति के 4Gb के 10 मिनट के लिए एक प्रक्रिया को सीमित करने के लिए। (रैम का उपयोग करने के लिए अन्य विकल्प हैं, लेकिन वे आम तौर पर सम्मानित नहीं हैं।)

तो, आपको जाँच करनी चाहिए

  1. आप अपने EC2 उदाहरण पर किस प्रकार के OS चला रहे हैं
  2. उस OS पर आप किस प्रकार का R निर्माण कर रहे हैं, और सुनिश्चित करें कि आप 64 बिट संस्करण चलाते हैं
  3. यदि दोनों पहले से ही 64 बिट हैं, तो ulimitमेमोरी को उदाहरण के लिए 8Gb पर सेट करने के लिए उपयोग करें:ulimit -v 8000000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.