कई प्रयासों के लिए मैं इस समय शामिल हूं, मैं कार्यों की एक श्रृंखला के माध्यम से कई पैरामीटर संयोजनों के साथ बड़े डेटासेट चला रहा हूं। क्लस्टर पर ऑपरेशन की आसानी के लिए फ़ंक्शंस में एक रैपर होता है (इसलिए मैं mclapply
कर सकता हूं)। हालांकि, मैं दो प्रमुख चुनौतियों में भाग लेता हूं।जब कोई सूची आइटम विफल रहता है या बहुत लंबा लगता है तो मैं एक लापरवाही से कैसे समय निकाल सकता हूं?
ए) मेरे पैरामीटर संयोजन बड़े हैं (20k से 100k सोचें)। कभी-कभी विशेष संयोजन असफल हो जाएंगे (उदा। अस्तित्व बहुत अधिक है और मृत्यु दर बहुत कम है इसलिए मॉडल कभी भी एक अनुमानित परिदृश्य के रूप में परिवर्तित नहीं होता है)। मेरे लिए समय से पहले बाहर निकलना मुश्किल है कि कौन से संयोजन असफल हो जाएंगे (अगर मैं ऐसा कर सकता तो जीवन आसान होगा)। लेकिन अब के लिए मैं इस प्रकार के सेटअप है: मेरे आवरण समारोह के लिए
failsafe <- failwith(NULL, my_wrapper_function)
# This is what I run
# Note that input_variables contains a list of variables in each list item
results <- mclapply(input_variables, failsafe, mc.cores = 72)
# On my local dual core mac, I can't do this so the equivalent would be:
results <- llply(input_variables, failsafe, .progress = 'text')
कंकाल इस तरह दिखता है:
my_wrapper_function <- function(tlist) {
run <- tryCatch(my_model(tlist$a, tlist$b, tlist$sA, tlist$Fec, m = NULL) , error=function(e) NULL)
...
return(run)
}
इस सबसे कुशल दृष्टिकोण है? अगर किसी कारण से चर के एक विशेष संयोजन मॉडल को दुर्घटनाग्रस्त कर देता है, तो मुझे इसे NULL
वापस करने और बाकी के साथ आगे बढ़ने की आवश्यकता है। हालांकि, मुझे अभी भी समस्याएं हैं कि यह कृपा से कम विफल हो जाती है।
बी) कभी-कभी इनपुट का एक निश्चित संयोजन मॉडल को क्रैश नहीं करता है लेकिन अभिसरण करने में बहुत लंबा समय लगता है। मैंने अपने क्लस्टर पर गणना समय पर एक सीमा निर्धारित की है (6 घंटे कहें) इसलिए मैं अपने संसाधनों को फंसे कुछ पर बर्बाद नहीं करता हूं। मैं एक टाइमआउट कैसे शामिल कर सकता हूं जैसे कि एक फ़ंक्शन कॉल को एक ही सूची आइटम पर x समय से अधिक समय लगता है, तो इसे आगे बढ़ना चाहिए? बिताए गए समय की गणना करना मामूली है लेकिन समय की जांच करने के लिए एक समारोह मध्य सिमुलेशन बाधित नहीं किया जा सकता है, है ना?
कोई विचार, समाधान या चाल की सराहना की जाती है!
क्या आपने setTimeLimit() या http://www.inside-r.org/node/81211 में देखा है? हो सकता है कि आपको क्या चाहिए। – frankc