Numpy에 사용되는 BLAS에 의해 계산 속도가 바뀌는 것 같다【Python】

2019/6/4

「numpy」안에서는, BLAS라고 하는 수치 연산 라이브러리가 실제의 처리를 담당하고 있습니다.

「conda install」과 「pip install」의 어느 쪽에서 numpy를 넣는지에 의해 사용되는 BLAS가 바뀌어, 어느 BLAS를 사용하는지에서 numpy 뿐만이 아니라 이것에 의존하는 라이브러리군에 있어서도 처리 속도에 영향이 나옵니다.

이번에, BLAS 및 실제의 속도차와, 어느 BLAS를 사용하고 있는지의 확인 방법에 대해서 간단하게 조사했으므로 소개하겠습니다.

BLAS와 그 종류

BLAS란?

BLAS에 대해서는 이하의 사이트의 설명이 매우 알기 쉬웠으므로 인용하겠습니다.

BLAS는 Basic Linear Algebra Subprograms의 약자입니다.어렵게 말하면, 기본적인 선형 연산의 라이브러리, 간단히 말하면, 행렬이나 벡터의 기본적인 계산을 해 주는 함수군입니다.예를 들어, 행렬의 곱이라든지, 벡터의 노름의 계산, 등입니다.이러한 계산을 구현하는 것(바퀴의 재개발)은 그만두고, 라이브러리를 사용해, 효율적이고 효율적인 코딩을 실시합시다, 라고 하는 것이 취지입니다.

BLAS의 간단한 사용법

BLAS는 numpy의 뒤에서도 사용되고 있기 때문에, 어느 BLAS가 numpy 실행시에 불려 가는지에 의해 계산 시간에 차이가 나온다고 말해지고 있습니다.

BLAS의 종류

BLAS에는 다양한 종류의 것이 개발되고 있습니다.대표적인 것을 일부 다루어 보겠습니다.

오픈블라스

BLAS의 오픈 소스 구현.pip로 인스톨한 numpy에서는, OpenBLAS가 내부에서 불려 가 연산이 행해진다.
다양한 CPU에 대응하고 있어 인텔의 Sandy Bridge CPU에 대해 Intel MKL과 동등한 속도를 낼 수 있다고 한다.멀티스레드 기능으로 잘 알려져 있어 코어의 수와 고속화가 잘 비례한다고 한다.

Intel MKL (Intel Math Kernel Library)

Intel 개발의 BLAS. Intel제 CPU만 서포트하고 있어 타사제의 CPU에서는 사용할 수 없다. Xeon이나 Core i 시리즈, Atom등의 Intel제 CPU에 최적화되어 있기 때문에, 이것들이 CPU에 사용되고 있는 PC에서는 인텔 MKL를 연산 라이브러리로서 이용하는 것이 계산이 고속이 된다.Anaconda나 Miniconda에서 「conda install」로 인스톨한 numpy는 인텔 MKL이 이용된다.

ATLAS (Automatically Tuned Linear Algebra Software)

무료 BLAS 중 하나.이름 그대로 튜닝하여 설치하는 하드웨어에 최적인 파라미터를 설정하여 고속 연산을 실현한다.

BLAS의 차이로 인한 계산 시간의 차이

numpy의 우라에서 사용되는 BLAS가 처리 속도에 영향을 준다는 것은 numpy에 의존한 라이브러리의 실행 속도에 관련된다는 것을 의미합니다.즉, scipy, pandas, scikit-learn, tensorflow에도 영향을 미칩니다.

많은 기술자들 사이에서 BLAS의 차이(conda install과 pip install의 차이)에 대한 벤치마크의 비교가 이루어지고 있습니다만, 인텔® 개발자 존에 공개되고 있는 것을 예로 들어 보겠습니다.
scipy에 의한 행렬 계산으로, 오른쪽으로 갈수록 복잡한 행렬끼리의 곱셈에 걸리는 시간을 나타내고 있어, Intel MKL가 ATLAS보다 고속으로 처리할 수 있습니다.

intel MKL과 ATLAS에서 scipy에 의한 행렬 계산 비교
intel MKL과 ATLAS에서 scipy에 의한 행렬 계산 비교
이다 :https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

다음은 Anaconda 공식에 의한 것입니다. conda install과 pip install 중 하나로 설치한 tensorflow에서 각 딥 러닝 모델에서 초당 교육할 수 있는 이미지의 수를 비교하고 있지만 최대 1배나 차이가 나고 있습니다.

각 딥 러닝 모델에서 pip (OpenBLAS)와 conda (인텔 MKL)의 차이
각 딥 러닝 모델에서 pip (OpenBLAS)와 conda (인텔 MKL)의 차이
(cpu는 인텔® 제온® 골드 6130)
이다 :https://www.anaconda.com/tensorflow-in-anaconda/

그 외에도 pandas나 scikit learn등도 비교되고 있습니다(The performance of Intel vs. Anaconda vs. vanilla Python – my personal benchmark). conda는 독자적인 라이브러리 인스톨·관리를 하고 있기 때문에, 많은 경우에 유리한 결과가 되고 있는 것 같습니다.

파이썬에서 BLAS를 확인하는 방법

__config__.show()그냥 실행합니다.

import numpy as 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 ( x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\ \\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl\\lib', 'C:/Users/programing/Miniconda3/envs/ML\\Library\\include']

mkl_info라고 표시되면 인텔 MKL이 사용되고 있습니다.