ऐसा लगता है कि Numpy [पायथन] में प्रयुक्त BLAS के आधार पर गणना की गति में परिवर्तन होता है

2019 6 年 月 日 4

"सुन्न" में, बीएलएएस नामक संख्यात्मक ऑपरेशन लाइब्रेरी वास्तविक प्रसंस्करण के लिए जिम्मेदार है।

आप "conda install" या "pip install" के साथ numpy इंस्टॉल करते हैं या नहीं, इसके आधार पर इस्तेमाल किया गया BLAS बदल जाएगा, और आप किस BLAS का उपयोग करते हैं, इसके आधार पर, प्रसंस्करण गति न केवल numpy बल्कि उस पर निर्भर पुस्तकालयों को भी प्रभावित करेगी।

इस बार, हमने संक्षेप में BLAS, वास्तविक गति अंतर, और किस BLAS का उपयोग किया जा रहा है, इसकी जांच की है, इसलिए हम इसे पेश करेंगे।

BLAS और उनके प्रकार

ब्लास क्या है

बीएलएएस के संबंध में, निम्नलिखित साइट पर व्याख्या को समझना बहुत आसान था, इसलिए मैं इसे उद्धृत करूंगा।

BLAS का मतलब बेसिक लीनियर अलजेब्रा सबप्रोग्राम है।संक्षेप में, यह बुनियादी रैखिक संचालन का एक पुस्तकालय है।उदाहरण के लिए, मैट्रिक्स गुणन, वेक्टर मानक गणना, आदि।बिंदु इन गणनाओं (पहिया का पुनर्विकास) को लागू करना बंद करना है और पुस्तकालयों को कुशलतापूर्वक और कुशलता से कोड करने के लिए उपयोग करना है।

बीएलएएस का सरल उपयोग

चूंकि numpy के पीछे BLAS का भी उपयोग किया जाता है, ऐसा कहा जाता है कि numpy निष्पादित होने पर BLAS को कॉल करने के आधार पर गणना समय अलग-अलग होगा।

BLAS के प्रकार

विभिन्न प्रकार के BLAS विकसित किए गए हैं।आइए कुछ प्रतिनिधि उदाहरण देखें।

ओपनब्लास

बीएलएएस का एक खुला स्रोत कार्यान्वयन।पाइप के साथ स्थापित numpy में, OpenBLAS को गणना करने के लिए आंतरिक रूप से बुलाया जाता है।
यह विभिन्न सीपीयू के साथ संगत है, और कहा जाता है कि यह इंटेल के सैंडी ब्रिज सीपीयू के लिए इंटेल एमकेएल के समान गति प्राप्त कर सकता है।यह अपने मल्टीथ्रेडिंग फ़ंक्शन के लिए अच्छी तरह से जाना जाता है, और ऐसा लगता है कि कोर और स्पीडअप की संख्या अच्छी तरह से आनुपातिक है।

इंटेल एमकेएल (इंटेल मैथ कर्नेल लाइब्रेरी)

इंटेल द्वारा विकसित BLAS। केवल इंटेल सीपीयू समर्थित हैं, और अन्य निर्माताओं के सीपीयू का उपयोग नहीं किया जा सकता है। चूँकि यह Xeon, Core i सीरीज़ और एटम जैसे Intel CPUs के लिए अनुकूलित है, इसलिए कंप्यूटर पर गणना लाइब्रेरी के रूप में Intel MKL का उपयोग करना तेज़ है जो इन्हें CPU के रूप में उपयोग करते हैं।एनाकोंडा या मिनिकोंडा में "कोंडा इंस्टॉल" के साथ स्थापित numpy इंटेल एमकेएल का उपयोग करता है।

एटलस (स्वचालित रूप से ट्यून किया गया रैखिक बीजगणित सॉफ्टवेयर)

मुफ्त BLAS में से एक।जैसा कि नाम से पता चलता है, यह उच्च गति की गणना प्राप्त करने के लिए ट्यूनिंग द्वारा स्थापित किए जाने वाले हार्डवेयर के लिए इष्टतम पैरामीटर सेट करता है।

बीएलएएस में अंतर के कारण गणना समय में अंतर

तथ्य यह है कि numpy के पीछे इस्तेमाल किया गया BLAS प्रसंस्करण गति को प्रभावित करता है, जिसका अर्थ है कि यह उन पुस्तकालयों की निष्पादन गति को प्रभावित करता है जो numpy पर निर्भर करते हैं।यह scipy, pandas, scikit-learn और tensorflow को भी प्रभावित करता है।

बहुत सारे तकनीकी विशेषज्ञ BLAS अंतर (कोंडा इंस्टाल बनाम पाइप इंस्टाल) के लिए बेंचमार्क की तुलना कर रहे हैं, लेकिन आइए Intel® डेवलपर ज़ोन पर प्रकाशित एक को लें।
scipy द्वारा मैट्रिक्स गणना दाईं ओर जटिल मैट्रिक्स के गुणन के लिए आवश्यक समय दिखाती है, और इंटेल MKL ATLAS की तुलना में तेजी से प्रक्रिया कर सकता है।

इंटेल एमकेएल और एटलस पर स्किपी के साथ मैट्रिक्स गणना की तुलना करना
इंटेल एमकेएल और एटलस पर स्किपी के साथ मैट्रिक्स गणना की तुलना करना
द्वारा उद्धृत:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

निम्नलिखित एनाकोंडा अधिकारी से है। conda install या pip install द्वारा स्थापित टेंसरफ़्लो के साथ, हमने प्रत्येक गहन शिक्षण मॉडल के लिए प्रति सेकंड प्रशिक्षित छवियों की संख्या की तुलना की, और अंतर 1 गुना तक है।

प्रत्येक गहन शिक्षण मॉडल में पाइप (OpenBLAS) और कोंडा (Intel MKL) के बीच अंतर
प्रत्येक गहन शिक्षण मॉडल में पाइप (OpenBLAS) और कोंडा (Intel MKL) के बीच अंतर
(CPU Intel®Xeon®Gold 6130 है)
द्वारा उद्धृत:https://www.anaconda.com/tensorflow-in-anaconda/

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

पायथन में BLAS की जाँच कैसे करें

__config__.show()सिर्फ दौड़ें

np np.__config__.show () के रूप में numpy आयात करें

>>
mkl_info: पुस्तकालयों = ['mkl_rt'] पुस्तकालय_डीआईआरएस = ['सी: / उपयोगकर्ता /'] परिभाषित_मैक्रोस = [('SCIPY_MKL_H', कोई नहीं), ('HAVE_CBLAS', कोई नहीं)] शामिल_डीआईआर = ['सी: \\ प्रोग्राम फ़ाइलें ( x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl\\include', 'C: \\Program फ़ाइलें (x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl\\lib', 'C:/Users/programing/Miniconda3/envs/ML\\Library\\include']

अगर mkl_info प्रदर्शित होता है, तो इंटेल एमकेएल का उपयोग किया जाता है।