Кажется, что скорость вычислений меняется в зависимости от BLAS, используемого для Numpy [Python]

2019 год 6 месяц 4 день

В numpy за фактическую обработку отвечает библиотека числовых вычислений под названием BLAS.

Используемый BLAS зависит от того, устанавливаете ли вы numpy с помощью conda install или pip install, и в зависимости от того, какой BLAS вы используете, на скорость обработки будет влиять не только numpy, но и библиотеки, которые зависят от него.

На этот раз я расскажу о BLAS и фактической разнице в скорости, а также о том, как проверить, какой BLAS вы используете.

BLAS и его виды

Что такое BLAS?

Что касается BLAS, объяснение на следующем сайте было очень легко понять, поэтому я процитирую его.

BLAS - это аббревиатура от Basic Linear Algebra Subprograms.Грубо говоря, это библиотека основных линейных операций или просто набор функций, которые выполняют базовые вычисления матриц и векторов.Например, умножение матриц, вычисление векторной нормы и т. Д.Идея состоит в том, чтобы прекратить выполнять эти вычисления (изобретать колесо) и использовать библиотеку для эффективного и действенного кодирования.

Легко использовать BLAS

Поскольку BLAS также используется после numpy, считается, что время вычисления будет отличаться в зависимости от того, какой BLAS вызывается при выполнении numpy.

Тип BLAS

Были разработаны различные типы BLAS.Давайте посмотрим на некоторые из типичных.

Открыть БЛАС

Реализация BLAS с открытым исходным кодом.В numpy, установленном с помощью pip, OpenBLAS вызывается внутри для выполнения операций.
Он совместим с различными процессорами и, как говорят, может обеспечивать ту же скорость, что и Intel MKL для процессора Intel Sandy Bridge.Он хорошо известен своей многопоточностью, и кажется, что количество ядер пропорционально ускорению.

Intel MKL (библиотека Intel Math Kernel)

BLAS разработан Intel. Поддерживаются только процессоры Intel, и их нельзя использовать с процессорами других компаний. Поскольку он оптимизирован для процессоров Intel, таких как Xeon, Core i series и Atom, быстрее использовать Intel MKL в качестве арифметической библиотеки на компьютере, который использует эти процессоры.Intel MKL используется для numpy, установленного "conda install" с Anaconda или Miniconda.

ATLAS (автоматически настраиваемое программное обеспечение линейной алгебры)

Один из бесплатных BLAS.Как следует из названия, настройка устанавливает оптимальные параметры для устанавливаемого оборудования и выполняет высокоскоростной расчет.

Разница во времени расчета из-за разницы в BLAS

Тот факт, что BLAS, используемый в конце numpy, влияет на скорость обработки, означает, что он связан со скоростью выполнения библиотеки, которая зависит от numpy.Другими словами, это также влияет на scipy, pandas, scikit-learn и tensorflow.

Многие технические специалисты сравнивают тесты производительности для различий в BLAS (различия между установкой conda и pip install), но в качестве примера возьмем тест, опубликованный в 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/

Следующее - от официального лица Anaconda. Мы сравниваем количество изображений, обучаемых в секунду в каждой модели глубокого обучения, с tenorflow, установленным с помощью conda install или pip install, и разница составляет до 1 раз.

Разница между pip (OpenBLAS) и conda (intel MKL) в каждой модели глубокого обучения
Разница между pip (OpenBLAS) и conda (intel MKL) в каждой модели глубокого обучения
(ЦП - Intel® Xeon® Gold 6130)
Цитируется:https://www.anaconda.com/tensorflow-in-anaconda/

Другие сравнения включают pandas и 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 /'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] 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 / programming / Miniconda3 / envs / ML \\ Библиотека \\ include ']

Если отображается mkl_info, используется Intel MKL.