प्योमो + इपॉप। स्पीड इश्यू

Oct 26 2020

मैं एक एनएलपी समस्या को हल करने के लिए सॉल्वर के रूप में Pyomo+ का उपयोग कर रहा हूं Ipopt। समस्या आयामीता और बाधाओं की संख्या के मामले में अत्यंत जटिल नहीं है। हालाँकि, मुझे इस मॉडल के कई हज़ारों उदाहरणों को विभिन्न इनपुट मापदंडों के साथ हल करने की आवश्यकता है। वर्तमान में मैं for loopलूप ओवर का उपयोग कर रहा हूं । एक उदाहरण को हल करने से मुझे 32 GB RAM Windowsपीसी पर ~ 1 सेकंड लगता है Python 3.7.3। इसका मतलब है कि मुझे पूर्ण अनुकूलन परिणामों को प्राप्त करने में सक्षम होने से पहले घंटों इंतजार करना होगा।

मैं जहाँ समय की खपत हो रही है में प्रोफाइल। मॉडल के निर्माण में खुद को कोई समय नहीं लगता है, लेकिन इसके माध्यम से हल करने वाला मॉडल Ipoptयहां प्रदर्शन का निर्धारण करता है।

मैं जानना चाहूंगा कि क्या कोई पहले एक समान समस्या में चला गया है और क्या सामान्य तरीके हैं जो किसी प्रकार के प्रदर्शन लाभ प्राप्त करने की कोशिश कर सकते हैं।

संपादित करें । कहीं और पूछे गए एक सवाल से मुझे पता चला कि:

पाइमो डिफ़ॉल्ट व्यवहार एक *.nlफ़ाइल लिखना है , फिर उस फ़ाइल को संसाधित करने और एक *.solफ़ाइल बनाने के लिए IPOPT को कॉल करना है । पाइमो फिर *.solफ़ाइल में वापस आ जाता है ।

इससे, ऐसा लगता है कि गति प्राप्त करना पाइमो के साथ उतना आसान नहीं हो सकता है। अभी भी सामुदायिक प्रतिक्रिया के लिए तत्पर हैं।

जवाब

3 NikosKazazakis Oct 27 2020 at 19:21

मैक में शायद एक ठोस राज्य ड्राइव है, इसलिए यदि आपकी विंडोज मशीन में एक नहीं है (या एक खराब है), तो मैं / ओ गति आपकी अड़चन हो सकती है।

इन जैसे छोटे रनटाइम के लिए, पायथन और प्योमो का आपका संस्करण भी अपराधी हो सकता है।

जब यह प्रक्रिया तेज करने की बात आती है, तो कोई सामान्य समाधान नहीं है जिसे मैं पायथन कोड को प्रोफाइल करने के अलावा डरता हूं और देखें कि क्या आप अपने अंत में कोड को अनुकूलित कर सकते हैं। आप यह देखना चाहते हैं कि प्रत्येक पायथन रूटीन में कितने सेकंड खर्च किए जाते हैं (प्रतिशत के विपरीत), ताकि आप यह जान सकें कि आपके समग्र रनटाइम का बड़ा हिस्सा कहां खर्च होता है।

चीजों को गति देने की कोशिश करने वाली एक चीज आप पायथन मल्टीप्रोसेसिंग टूलबॉक्स का उपयोग करके समानांतर में इन समस्याओं के कई उदाहरणों को चला सकते हैं। चूंकि समस्याएं समान हैं, इसलिए आपको अच्छा स्केलिंग प्राप्त करने के लिए एसिंक्रोनस कोड लिखने के बारे में चिंता करने की ज़रूरत नहीं है, जिससे चीजें बहुत आसान हो जाती हैं।

2 your_boy_gorja Oct 27 2020 at 13:20

डिस्क्लेमर: यह बिल्कुल इस सवाल का जवाब नहीं है लेकिन इसकी जानकारी का एक टुकड़ा मुझे काफी उपयोगी लगा।

मैंने विंडोज पीसी (32 जीबी रैम, विंडोज 10) और मैकबुक प्रो (4 जीबी रैम, कैटालिना) दोनों पर समान कोड चलाया और मैक पर कोड लगभग 5 गुना तेज पाया। मुझे पता नहीं है कि ऐसा क्यों हो रहा है लेकिन यह pyomo फाइल प्रोसेसिंग के कारण हो सकता है।