يبدو أن سرعة الحساب تتغير اعتمادًا على BLAS المستخدم في Numpy [Python]

2019 6 年 月 日 4

في "numpy" ، تتولى مكتبة حساب رقمية تسمى BLAS مسؤولية المعالجة الفعلية.

يعتمد BLAS المستخدم على ما إذا كنت تقوم بتثبيت numpy باستخدام "conda install" أو "pip install" ، واعتمادًا على BLAS الذي تستخدمه ، ستتأثر سرعة المعالجة ليس فقط بالمكتبة ولكن أيضًا بالمكتبات التي تعتمد عليها.

هذه المرة ، سأقدم BLAS وفرق السرعة الفعلي ، وكيفية التحقق من BLAS الذي تستخدمه.

BLAS وأنواعها

ما هو بلاس؟

فيما يتعلق بـ BLAS ، كان من السهل جدًا فهم الشرح الموجود على الموقع التالي ، لذلك سأقتبس منه.

BLAS هو اختصار للبرامج الفرعية للجبر الخطي الأساسي.بصراحة ، إنها مكتبة للعمليات الخطية الأساسية ، أو ببساطة ، مجموعة من الوظائف التي تقوم بالحسابات الأساسية للمصفوفات والمتجهات.على سبيل المثال ، ضرب المصفوفة ، وحساب معيار المتجه ، وما إلى ذلك.الفكرة هي التوقف عن تنفيذ هذه الحسابات (إعادة اختراع العجلة) واستخدام المكتبة للترميز الفعال والفعال.

سهل الاستخدام BLAS

نظرًا لاستخدام BLAS أيضًا خلف numpy ، يُقال أن وقت الحساب سيختلف اعتمادًا على BLAS الذي يُطلق عليه عند تنفيذ numpy.

نوع BLAS

تم تطوير أنواع مختلفة من BLAS.دعونا نلقي نظرة على بعض النماذج النموذجية.

افتح BLAS

تطبيق مفتوح المصدر لـ BLAS.في numpy المثبت مع النقطة ، يتم استدعاء OpenBLAS داخليًا لإجراء العمليات.
إنه متوافق مع وحدات المعالجة المركزية المختلفة ، ويقال أنه يمكن أن يقدم نفس السرعة مثل Intel MKL لوحدة المعالجة المركزية Intel's Sandy Bridge.وهي معروفة بوظيفتها متعددة الخيوط ، ويبدو أن عدد النوى يتناسب بشكل جيد مع السرعة.

Intel MKL (مكتبة Intel Math Kernel)

طورتها شركة إنتل بلاس. يتم دعم وحدات المعالجة المركزية Intel فقط ولا يمكن استخدامها مع وحدات المعالجة المركزية التي تصنعها الشركات الأخرى. نظرًا لأنه تم تحسينه لوحدات المعالجة المركزية Intel مثل Xeon و Core i series و Atom ، فمن الأسرع استخدام intel MKL كمكتبة حسابية على جهاز كمبيوتر يستخدم وحدات المعالجة المركزية هذه.يتم استخدام Intel MKL للملفات المثبتة بواسطة "conda install" مع Anaconda أو Miniconda.

ATLAS (برنامج الجبر الخطي المضبوط تلقائيًا)

أحد برامج BLAS المجانية.كما يوحي الاسم ، يحدد الضبط المعلمات المثلى للجهاز المراد تثبيته ويحقق الحساب عالي السرعة.

الفرق في وقت الحساب بسبب الاختلاف في BLAS

حقيقة أن BLAS المستخدم في الجزء الخلفي من numpy يؤثر على سرعة المعالجة يعني أنه مرتبط بسرعة تنفيذ المكتبة التي تعتمد على numpy.بمعنى آخر ، إنه يؤثر أيضًا على scipy و pandas و scikit-learn و Tensorflow.

يقارن العديد من الفنيين المعايير الخاصة باختلافات BLAS (الاختلافات بين تثبيت Conda وتثبيت الأنابيب) ، لكن خذوا ذلك المنشور في Intel® Developer Zone كمثال.
يُظهر حساب المصفوفة بواسطة scipy الوقت المطلوب لمضاعفة المصفوفات المعقدة أثناء انتقالها إلى اليمين ، ويمكن لـ intel MKL المعالجة بشكل أسرع من ATLAS.

مقارنة حساب المصفوفة بواسطة scipy في Intel MKL و ATLAS
مقارنة حساب المصفوفة بواسطة scipy في Intel MKL و ATLAS
اقتباس من:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

التالي من مسؤول أناكوندا. نحن نقارن عدد الصور التي تم تدريبها في الثانية في كل نموذج من نماذج التعلم العميق مع Tensorflow المثبت إما عن طريق تثبيت Conda أو تثبيت النقطة ، والفرق يصل إلى 1 مرات.

الفرق بين Pip (OpenBLAS) و Conda (intel MKL) في كل نموذج من نماذج التعلم العميق
الفرق بين Pip (OpenBLAS) و Conda (intel MKL) في كل نموذج من نماذج التعلم العميق
(وحدة المعالجة المركزية هي Intel® Xeon® Gold 6130)
اقتباس من:https://www.anaconda.com/tensorflow-in-anaconda/

تشمل المقارنات الأخرى الباندا و scikit Learn (أداء Intel مقابل Anaconda مقابل Vanilla Python - معياري الشخصي). نظرًا لأن Conda لديها تثبيت وإدارة مكتبة خاصة بها ، يبدو أنها نتيجة إيجابية في كثير من الحالات.

كيفية التحقق من BLAS في Python

__config__.show()فقط اركض.

استيراد numpy كـ np np .__ config __. show ()

>>
mkl_info: libraries = ['mkl_rt'] library_dirs = ['C: / Users /'] تعريف_macros = [('SCIPY_MKL_H' ، بلا) ، ('HAVE_CBLAS' ، بلا)] include_dirs = ['C: \\ Program Files ( 'C: \\ Program Files (' 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 Files (x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl \\ lib '،' C: / Users / برمجة / Miniconda3 / envs / ML \\ مكتبة \\ include ']

إذا تم عرض mkl_info ، فسيتم استخدام intel MKL.