নম্পপি এবং সায়পি-তে কীভাবে বিএলএএস / ল্যাপাক সংযোগটি পরীক্ষা করবেন?


126

আমি Blas এবং lapack বেশী বা কম উপর ভিত্তি করে ভিত্তিক আমার numpy / scipy পরিবেশ builing করছি এই মাধ্যমে হাঁটার।

আমার কাজ শেষ হয়ে গেলে, আমি কীভাবে চেক করতে পারি যে আমার নম্পী / স্কিপি ফাংশনগুলি সত্যই পূর্ববর্তী নির্মিত ব্লেস / ল্যাপাক কার্যকারিতা ব্যবহার করে?

উত্তর:


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দেখানো হয়েছে তার অর্থ হ'ল ন্যাপিটি ল্যাপের সাথে যুক্ত?
ড্যানহিক্সটাইন

42
আউটপুটটি কীভাবে ব্যাখ্যা করবেন?
এডওয়ার্ড নেওয়েল

18
@ সিসিল কুরিচারি আপনি ব্যবহার করতে পারেন numpy.show_config()যা আন্ডারস্কোরগুলি শুরু না করার কারণে সম্ভবত একটি সর্বজনীন API ফাংশন। তবে এটি অনলাইনে নথিভুক্ত করা হয়নি এবং কোনও ডক্ট্রিং নেই, সুতরাং এটি খুঁজে পাওয়া এত কঠিন যে অবাক হওয়ার কিছু নেই। আশা করি তারা এটা ঠিক করে দেবেন।
প্রবীণ

8
একাধিক প্যাকেজ প্রদর্শিত হলে কোন প্যাকেজটি আসলে ব্যবহৃত হয় তা আমি কীভাবে জানতে পারি?
জোনাসন

28

আপনি যা অনুসন্ধান করছেন তা হ'ল: সিস্টেম তথ্য

আমি অ্যাটলাসের সাথে নপি / স্কিপি সংকলন করেছি এবং আমি এটি দিয়ে এটি পরীক্ষা করতে পারি:

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

আরও কমান্ডের জন্য ডকুমেন্টেশন চেক করুন।


35
এটি নম্পী বর্তমানে আটলাস ব্যবহার করে কিনা তা দেখাবে বলে মনে হচ্ছে না, পরবর্তী নপি সংকলনের সময় কেবল আটলাসের সাথে লিঙ্ক করা হবে কিনা। আমি অ্যাটলাসের আগে নির্লিপি সংকলন করেছি। আমি নমপি (নিশ্চিত জিনিস) পুনরায় সংশ্লেষ না করা পর্যন্ত এটি খুব ধীরে কাজ করেছিল, তবে নমপি পুনরায় সংকলনের আগে এবং পরে 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পরিবর্তে এর সংযোগটি পরীক্ষা করতে পারেন
ali_m

এটি উল্লেখ করা উচিত যে এই সমাধানটি লিনাক্স-নির্দিষ্ট এবং ভঙ্গুর উভয়ই । আপনি সত্যই, numpy.__config__পরিবর্তে রানটাইম সময়ে কেবলমাত্র আধ্যাত্মিক বস্তুটি অ্যাক্সেস করতে চান । ( ডেভোস্টের দুর্দান্ত উত্তর দেখুন ))
সিসিল কারি

এটি প্রকৃতপক্ষে লিনাক্স-নির্দিষ্ট, এবং আমি সম্মত হই যে @ ডেভস্ট পদ্ধতিটি আরও ভাল। আমার উত্তর কেন আপগ্রেটেড থাকে তা আমি পাই না।
রিকার্ডো কর্ডেনেস

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? (রিকার্ডোসের উত্তর নীচে মন্তব্য দেখুন)
ওয়ালটান

@ ওল্টন: হয় কিছু মারাত্মকভাবে ভেঙে গেছে, বা আপনি ভুল জায়গায় খুঁজছেন। প্রতিটি লিনাক্স এবং ওএস এক্স নম্পি ইনস্টল আমি দেখেছি, সেখানে _dotblas.soবিতরণ তৈরির জন্য যা কিছু ব্লেস ব্যবহার করা হয়েছে তার ইন্টারফেসের মোড়ক রয়েছে। উইন্ডোতে এটি বলা হবে _dotblas.pyd, তবে ফাংশনটি একই is
টালোনিমি

3
দেখে মনে _dotblas.soহচ্ছে কেবল তখনই নির্মিত যদি আপনি (এবং একটি সিবিএলএএস-সক্ষম বিএলএএস লাইব্রেরি) কোনও [atlas]বিভাগ ব্যবহার করছেন site.cfg। সুতরাং, আপনার এটি ব্যবহার করা উচিত, এমনকি আপনি আটলাস ব্যবহার না করেও (আপনি যখন ইন্টেল এমকেএল ব্যবহার করছেন তখনই, এতে একটি ডেডিকেটেড বিভাগ রয়েছে)।
কেনেথ হোস্টে

প্রকৃতপক্ষে, যখন নুমপি তৈরি করা হয় তখন কোনও বিএলএএস উপলব্ধ হয় না, এটি নিজস্ব ডট-প্রোডাক্ট রুটিনগুলি তৈরি করে। এটি এ্যাটলাসের চেয়ে ধীর গতির দুটি অর্ডার হতে পারে।
ফ্রেড ফু

5
_dotblas.soঅদৃশ্য v1.10 এবং আরও নতুনতে আর বিদ্যমান নেই , তবে আপনি multiarray.soপরিবর্তে এর সংযোগটি পরীক্ষা করতে পারেন
ali_m

6

আপনি BLAS, ল্যাপ্যাক, এমকেএল লিঙ্কেজটি ব্যবহার করে প্রদর্শন করতে পারেন 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)]?
seralouk

@ সিরাফিম লিংক দেখুন । মূলত এর অর্থ HAVE_CBLASহ'ল সংজ্ঞায়িত করা হচ্ছে তবে এর কোনও মূল্য নেই (মনে করুন সি #define HAVE_CBLAS:)। এটি একটি পতাকা হিসাবে ব্যবহৃত হয় কারণ এটি একটি মান প্রয়োজন হয় না। আমি এটি ব্যাখ্যা করব HAVE_CBLAS=True। আপনার যদি সিবিএলএস না থাকে তবে আপনার এখানে টিপলটি মোটেই থাকত না।
এমটি

আমি জানতে চাই যে আমার নাম্পিটি ব্লসের সাথে যুক্ত কিনা যাতে লিনিয়ার বীজগণিতের গণনা যথেষ্ট দ্রুত হয়। আমি এটি পেয়েছি : imgur.com/a/SsrDqg5 । আপনি কিভাবে এটি ব্যাখ্যা করবেন?
seralouk

@ মাকিস নিম্পি ওপেনব্লাসের সাথে যুক্ত
এমটি

0

যদি আপনি অ্যানাকোন্ডা-নেভিগেটর ইনস্টল করেন (লিনাক্স, উইন্ডোজ বা ম্যাকোসের জন্য www.anaconda.com/anaconda/install/ এ) - ব্লেস, স্কিপি এবং নম্পি সমস্ত ইনস্টল করা হবে এবং আপনি নেভিগেটরের বাড়ির বাম দিকে পরিবেশ ট্যাবে ক্লিক করে এগুলি দেখতে পাচ্ছেন them পৃষ্ঠা (আলফা ক্রমে প্রতিটি ডিরেক্টরি সন্ধান করুন)। পূর্ণ অ্যানাকোন্ডা ইনস্টল করা (মিনিকোন্ডা বা স্বতন্ত্র প্যাকেজগুলির বিপরীতে) ডেটা সায়েন্সের জন্য প্রয়োজনীয় অনেকগুলি প্রয়োজনীয় প্যাকেজ ইনস্টল করার যত্ন নেবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.