मैं एक छोटे तंत्रिका नेटवर्क का विकास कर रहा हूं जिसके पैरामीटर को बहुत अनुकूलन की आवश्यकता है, इसलिए बहुत सारे प्रोसेसिंग समय हैं। मैंने cProfile
के साथ अपनी स्क्रिप्ट प्रोफाइल की है और प्रोसेसर समय का 80% क्या होता है NumPy dot
फ़ंक्शन, शेष numpy.linalg.solve
फ़ंक्शन के साथ मैट्रिक्स उलटा है। numpy का मेरा वर्तमान संस्करण blas
का उपयोग करता है, या ऐसा लगता है, क्योंकि numpy.core._dotblas.dot
उस कार्य के रूप में प्रकट होता है जो प्रसंस्करण के कुल समय का 80% लेता है।पायथन में मैट्रिक्स गुणा को कैसे बढ़ाया जाए?
चूंकि यह मेरे तंत्रिका नेटवर्क का मूल है और क्योंकि मुझे इसे बहुत अधिक चलाने की ज़रूरत है, तो कोई मामूली गति लाभ मुझे कई बार दोहराए गए पैरामीटर अनुकूलन पर बहुत समय बचा सकता है।
अधिक सटीक: मैट्रिक्स गुणा मैट्रिक्स पर है जिसमें कम से कम 100 * 100 500 * 500 तक का आकार होता है। मेरे पास 12 कोर के साथ एक कंप्यूटर है और समानांतर में विभिन्न तंत्रिका नेटवर्क पैरामीटर ऑप्टिमाइज़ेशन चलाने के लिए अब तक उनका उपयोग करें, लेकिन शायद मैट्रिक्स गुणा समानांतर में किया जा सकता है?
आपके समय के लिए धन्यवाद!
उत्तर:
मैं कुछ दिनों के परीक्षण और स्थापित करने की स्थापना रद्द करने पुस्तकालयों ... यहाँ मैं क्या परीक्षण किया का परिणाम है खर्च: Ubuntu (12.04) के अपने संस्करण पर डिफ़ॉल्ट रूप से और Numpy की respository स्थापित संस्करण, बीएलएएस पुस्तकालय एटीएलएएस पुस्तकालय हैं। मैंने कुछ परीक्षण किए हैं जो विशेष रूप से उन परिचितों पर सुधार को दर्शाते हैं जिनमें मुझे रूचि है, इसलिए इन परिणामों को अंतिम उत्तर के रूप में व्याख्या नहीं किया जाना चाहिए। इन गणनाओं में 500 * 500 और 1000 * 1000 मैट्रिक्स के साथ 55000 पुनरावृत्तियों लूप में एक मैट्रिक्स गुणा (डॉट उत्पाद) शामिल है। मैं 12 कोर के साथ एक ज़ीऑन X5675 @ 3.07GHZ के साथ एक एचपी जेड 800 वर्कस्टेशन का उपयोग करता हूं। सभी परिणाम (प्रतिशत) वर्णित स्थिति और संदर्भ के बीच तुलना हैं जो यहां पैक किए गए ATLAS लाइब्रेरी हैं।
Scipy.sparse module
: मैं अगर मैं इसे सही तरीके से सेट नहीं जानता लेकिन एक 10% विरल साथ, इस मॉड्यूल का उपयोग कर OpenBLAS और MKL 1500 * 1500 मैट्रिक्स से शुरू उपयोगी हो जाता है। यदि आपके पास सुझाव है कि उन्हें सही तरीके से कैसे उपयोग किया जाए, तो मुझे रूचि है!- ओपनब्लैस के साथ मुझे 500 * 500 मैट्रिक्स के लिए 33% की गति वृद्धि मिली लेकिन 1000 * 1000 के लिए 160%। लेकिन ओपनबीएलएस के साथ, scipy.sparse मॉड्यूल बेहतर प्रदर्शन नहीं करता है लेकिन वास्तव में बदतर है।
- यहां बड़ा विजेता एमकेएल पुस्तकालय है। मूल एटलस पुस्तकालयों से 1000 * 1000 मैट्रिक्स के साथ त्वरण 230% तक चला जाता है! 500 * 500 मैट्रिक्स के लिए, त्वरण अधिक मामूली (100%) है लेकिन अभी भी बहुत अच्छा है। इसके अलावा ओपनएमपी के साथ संकलन के साथ, मैट्रिक्स गुणाएं मेरे 12 प्रोसेसर पर चल सकती हैं और यहां एमकेएल पुस्तकालयों के साथ एक प्रोसेसर की तुलना में यह दोगुनी तेज है। लेकिन यह प्रसंस्करण शक्ति का अपशिष्ट है, समानांतर में स्क्रिप्ट/मैट्रिक्स-गुणाओं को चलाने के लिए मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करना अधिक कुशल है।
ओपनब्लास एक अच्छा मुफ्त विकल्प है जो चीजों को काफी तेज़ी से बढ़ा सकता है। उदाहरण के लिए अधिकांश लिनक्स सिस्टम पर यह बहुत आसानी से उपलब्ध होना चाहिए। – seberg
मुझे एहसास नहीं हुआ कि एमकेएल मुक्त नहीं है (बीयर में); [ओपनबीएलएस] (http://xianyi.github.com/OpenBLAS/) शायद एक अच्छा विकल्प है। हालांकि, ईपीडी शिक्षाविदों के लिए स्वतंत्र है। – Dougal
मेरा तंत्रिका नेट वास्तव में स्पैस (10% कनेक्टिविटी) है, मुझे 20% की गति मिलती है, जो कि कुछ भी नहीं बल्कि बेहतर है। आप ओपनबीएलएस के बारे में बात करते हैं, क्या यह मेरे वर्तमान संस्करण की तुलना में तेजी से चलता है जो पहले से ही बीएलएएस के संस्करण का उपयोग करता है? – PierreE