NumPy और SciPy में BLAS / LAPACK लिंकेज की जाँच कैसे करें?


126

मैं अपने सुस्वादु और डरावने वातावरण का निर्माण ब्लास और लैपैक के आधार पर कर रहा हूं, कम या ज्यादा इस पैदल यात्रा के आधार पर ।

जब मैं किया जाता हूं, तो मैं कैसे जांच कर सकता हूं, कि मेरे सुन्न / चीर कार्य वास्तव में पहले से निर्मित ब्लास / लैपिन कार्यात्मकताओं का उपयोग करते हैं?

जवाबों:


293

विधि numpy.show_config()(या numpy.__config__.show()) बिल्ड टाइम पर एकत्र किए गए लिंकेज के बारे में जानकारी आउटपुट करती है। मेरा आउटपुट इस तरह दिखता है। मुझे लगता है कि इसका मतलब है कि मैं मैक ओएस के साथ बीएलएएस / लैपैक का उपयोग कर रहा हूं।

>>> import numpy as np
>>> np.show_config()

lapack_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args = ['-msse3']
    define_macros = [('NO_ATLAS_INFO', 3)]
blas_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args = ['-msse3', '-I/System/Library/Frameworks/vecLib.framework/Headers']
    define_macros = [('NO_ATLAS_INFO', 3)]

4
इसकी व्यापक उपयोगिता को देखते हुए, numpy.__config__वास्तव में एक सार्वजनिक एपीआई होना चाहिए। बहरहाल, आप इस दौर को जीतते हैं , डेवोस्ट
सेसिल करी

2
तो, lapack_opt_infoदिखाया गया है कि मात्र तथ्य का अर्थ है कि सुन्न को लैपैक के साथ जोड़ा जाता है?
DanHickstein

42
आप आउटपुट की व्याख्या कैसे करते हैं?
एडवर्ड नेवेल

18
@CecilCurry आप उपयोग कर सकते हैं numpy.show_config(), जो अंडरस्कोर शुरू करने की अनुपस्थिति के कारण सार्वजनिक एपीआई कार्य है। लेकिन यह ऑनलाइन प्रलेखित नहीं है और इसमें कोई डॉकस्ट्रिंग नहीं है, इसलिए यह कोई आश्चर्य की बात नहीं है कि इसे ढूंढना इतना कठिन है। उम्मीद है कि वे इसे ठीक कर देंगे।
प्रवीण

8
मुझे कैसे पता चलेगा कि कौन सा पैकेज वास्तव में उपयोग किया जाता है जब कई पैकेज प्रदर्शित होते हैं?
जोनासन

28

आप जो खोज रहे हैं वह यह है: सिस्टम जानकारी

मैंने एटलस के साथ सुन्न / डरावना संकलित किया और मैं इसके साथ जांच कर सकता हूं:

import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')

अधिक कमांड के लिए प्रलेखन की जाँच करें।


35
यह यह दिखाने के लिए प्रतीत नहीं होता है कि वर्तमान में ATpy ATLAS का उपयोग करता है या नहीं, क्या ATLAS अगले संख्यात्मक संकलन के दौरान लिंक किया जाएगा। मैं ATLAS से पहले संकलित था। यह बहुत धीमी गति से काम करता है जब तक कि मैंने सुपीले (निश्चित चीज़) को पुन: स्थापित नहीं किया, लेकिन इससे पहले और बाद में दोनों ने खसरा recompilation sysinfo.get_info ('एटलस') एक ही आउटपुट दिखाया। वर्तमान स्थिति की जांच कैसे करें?
dmytro

4
आउटपुट की व्याख्या कैसे करें?
एरिक ओ लेबिगोट

2
आपके पास 'एटलस' स्थापित होने के बजाय 'ब्लास' हो सकता है (यह तब होता है जब आप डेबियन आधारित डिस्ट्रोस पर ओपनब्लास स्थापित करते हैं)।
माल्कम

4
डेवॉस्ट का जवाब शायद इस प्रतिक्रिया के बदले में स्वीकार किया जाना चाहिए था, जो हाथ में सवाल को संबोधित करने में विफल रहता है। चूंकि यह प्रतिक्रिया अन्य संबंधित प्रश्नों को हल करने में उपयोग की दिलचस्प मशीनरी को उजागर करती है , हार्दिक धन्यवाद!
सेसिल करी

2
@rabra sysinfo.get_info('atlas')ने मेरे लिए कुछ भी नहीं दिया लेकिन sysinfo.get_info('blas')वापस लौट आया {'include_dirs': ['/usr/local/include', '/usr/include', '/opt/local/include', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include'], 'libraries': ['blas', 'blas'], 'library_dirs': ['/usr/lib']} और sysinfo.get_info('lapack')लौट आया {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']} इसका क्या मतलब है?
सेबमा जुने

11

जैसा कि यह गतिशील रूप से लोड किए गए संस्करणों का उपयोग करता है, आप बस ऐसा कर सकते हैं:

$ ldd anyoftheCmodules.so

जहां anyoftheCmodules.soहो सकता है, उदाहरण के लिए, numpy/core/_dotblas.soजो करने के लिए लिंक libblas.so


1
अगर कोई फ़ाइल नहीं है तो क्या होगा numpy/core/_dotblas.so? (तलोनियों जवाब के नीचे टिप्पणी देखें)
वुल्तान

1
वहाँ पर .soफ़ाइलों की एक संख्या होनी चाहिए । बस NumPy निर्देशिका के अंदर खोजें (कहते हैं, का उपयोग करते हुए find /path/to/numpy -name "*.so")। उन लोगों में से एक जोड़े ( _dotblas.so, lapack_lite.soउबंटू के precompiled एक के तहत, उदाहरण के लिए) BLAS / LAPACK के मेकअप उपयोग
रिकार्डो Cárdenes

6
_dotblas.soअब खसरे v1.10 और नए में मौजूद नहीं है , लेकिन आप multiarray.soइसके बजाय लिंकेज की जांच कर सकते हैं
एलिअम

यह उल्लेख किया जाना चाहिए कि यह समाधान लिनक्स-विशिष्ट और नाजुक दोनों है । आप वास्तव में, वास्तव में केवल numpy.__config__रनटाइम पर कैनोनिकल ऑब्जेक्ट का उपयोग करना चाहते हैं । (देखें डेवोस्ट का उत्कृष्ट उत्तर ।)
सेसिल करी

यह वास्तव में, लिनक्स-विशिष्ट है, और मैं मानता हूं कि @davost विधि बेहतर है। मुझे नहीं मिलता कि मेरा जवाब क्यों हो रहा है।
रिकार्डो कॉर्डेंस

8

आप अपने निर्माण के सी स्तर हुक घटकों को देखने के लिए लिंक लोडर निर्भरता उपकरण का उपयोग कर सकते हैं और यह देख सकते हैं कि क्या आपके ब्लास और पसंद के लैपैक पर उनकी बाहरी निर्भरता है। मैं अभी एक लिनक्स बॉक्स के पास नहीं हूं, लेकिन एक ओएस एक्स मशीन पर आप साइट-पैकेज निर्देशिका के अंदर ऐसा कर सकते हैं जो इंस्टॉलेशन रखती है:

$ otool -L numpy/core/_dotblas.so 
numpy/core/_dotblas.so:
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 268.0.1)

$ otool -L scipy/linalg/flapack.so 
scipy/linalg/flapack.so (architecture i386):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/flapack.so (architecture ppc):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

$ otool -L scipy/linalg/fblas.so 
scipy/linalg/fblas.so (architecture i386):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/fblas.so (architecture ppc):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

एक ग्नू / लिनक्स प्रणाली के lddस्थान otoolपर स्थानापन्न करें और आपको उन उत्तरों को प्राप्त करना चाहिए जिनकी आपको आवश्यकता है।


1
अगर कोई फ़ाइल नहीं है तो क्या होगा numpy/core/_dotblas.so? (रिचर्डस जवाब के नीचे टिप्पणी देखें)
वुल्तान

@Woltan: या तो कुछ गंभीर रूप से टूट गया है, या आप गलत जगह देख रहे हैं। मैंने कभी देखा है हर लिनक्स और ओएस एक्स खौफनाक पर, _dotblas.soजो वितरण को बनाने के लिए उपयोग किए जाने वाले ब्लास के लिए इंटरफ़ेस आवरण है। खिड़कियों पर इसे बुलाया जाएगा _dotblas.pyd, लेकिन फ़ंक्शन समान है।
तीलोनियों

3
ऐसा लगता है _dotblas.soकि केवल तभी बनाया गया है जब आप (और CBLAS- सक्षम BLAS लाइब्रेरी [atlas]में एक सेक्शन का उपयोग कर रहे हैं site.cfg)। तो, आपको इसका उपयोग करना चाहिए, भले ही आप एटीएलएएस का उपयोग न कर रहे हों (सिवाय इसके कि आप इंटेल एमकेएल का उपयोग कर रहे हैं, जिसमें एक समर्पित अनुभाग है)।
केनेथ होस्ट

वास्तव में, जब कोई BLAS उपलब्ध नहीं होता है जब NumPy का निर्माण होता है, तो यह अपना स्वयं का डॉट-उत्पाद रूटीन बनाता है। ये ATLAS की तुलना में परिमाण के दो क्रम हो सकते हैं।
फ्रेड फू

5
_dotblas.soअब खसरे v1.10 और नए में मौजूद नहीं है , लेकिन आप multiarray.soइसके बजाय लिंकेज की जांच कर सकते हैं
एलिअम

6

आप का उपयोग कर BLAS, LAPACK, MKL लिंकेज प्रदर्शित कर सकते हैं show_config():

import numpy as np
np.show_config()

जो मेरे लिए आउटपुट देता है:

mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']
blas_mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']
blas_opt_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']
lapack_mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']
lapack_opt_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']

1
आप कैसे व्याख्या करते हैं ('HAVE_CBLAS', None)]?
सेरालोक

देखें @serafeim लिंक । यह अनिवार्य रूप से इसका मतलब है कि HAVE_CBLASपरिभाषित किया जा रहा है लेकिन इसका कोई मूल्य नहीं है (विचार सी #define HAVE_CBLAS:)। इसे एक मूल्य की आवश्यकता नहीं है क्योंकि यह केवल ध्वज के रूप में उपयोग किया जाता है। मैं इसकी व्याख्या करूंगा HAVE_CBLAS=True। यदि आपके पास CBLAS नहीं होता, तो आप वहां टपल नहीं बनाते।
MT

मैं बस यह जानना चाहता हूं कि क्या मेरी सुन्नता ब्लास से जुड़ी हुई है ताकि रैखिक बीजगणित गणना पर्याप्त तेज हो। मैं इस मिल: imgur.com/a/SsrDqg5 । आप इसकी व्याख्या कैसे करते हैं?
सेरालेक

@makis numpy ओपनब्लास से जुड़ी है
MT

0

यदि आपने एनाकोंडा-नाविक स्थापित किया है (linux, Windows या macOS के लिए www.anaconda.com/anaconda/install/ पर) - ब्लास, स्काईपी और सुपी सभी को स्थापित किया जाएगा और आप उन्हें नेविगेटर होम के बाईं ओर स्थित टैब पर क्लिक करके देख सकते हैं पृष्ठ (अल्फा क्रम में प्रत्येक निर्देशिका के लिए देखें)। फुल एनाकोंडा (मिनिकॉन्डा या इंडिविजुअल पैकेज के विपरीत) स्थापित करने से डेटा विज्ञान के लिए आवश्यक कई आवश्यक पैकेजों को स्थापित करने का ख्याल आएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.