11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NumPy/SciPy で Intel MKL を利用する (2019年11月版)

Last updated at Posted at 2019-11-06

Intel MKL は Intel 社が開発した, Intel 製 CPU でのみ動作する高速な数値処理ライブラリです. 線型代数演算や FFT などが含まれます. Numpy/SciPy は標準で線型代数演算に openblas を利用しますが, Intel MKL を使用すると処理が高速になります.

本記事の内容は Debian 10 (native/WSL) で Python 3.8.0 を用いて検証しました. ※公式には Debian は 8 または 9 のみサポートされていて Debian 10 はサポート外です. [CentOS 7.7 での結果を追記しました. 2019-11-13]

2021-04-07 追記 本記事の内容は古くなっています. 最新の情報は WSL2でPython環境構築 (2021年3月版) をご覧ください.

Intel MKL のインストール

ダウンロード

Intel MKL から 「Choose and Download」, 「Linux*」, 「Register & Download」とリンクを辿り, フォームから氏名とメールアドレスなど必要事項を記入して提出. するとすぐにメールでダウンロードリンクが送られてくる (添付ファイルにキーが入っているが使わなかった). リンクを開いて環境にあったものを選びダウンロード.

なお apt または yum を用いてインストールするオプションもある. が個人的にはスタンドアローン版で良いと思う.

インストール

tgz ファイルがダウンロードされるので, 解凍してその中に移動する. するとその中に ./install.sh./silent.cfg というふたつのファイルが見つかる. 単に sudo ./install.sh を実行すると対話式のインストールが始まる. それでもよいが ./silent.cfg を適宜書き換えて sudo ./install.sh -s ./silent.cfg を実行すると, 自動的にインストールを行ってくれる.

mkl numpyのインストール方法 という記事によるとレジストレーションキーを要求されることになっているが, 私が実行したところ要求されなかった. なので ./silent.cfg を編集するのも ACCEPT_EULA=accept とのみ書き換えればよく, アクティベーションキーに関するフィールドをつくってはならない.

環境変数の設定

~/.profile あるいは ~/.bashrc あたりで必要な環境変数を設定しておく.

export MKL_ROOT_DIR=/opt/intel/mkl
export LD_LIBRARY_PATH=$MKL_ROOT_DIR/lib/intel64:/opt/intel/lib/intel64_lin:$LD_LIBRARY_PATH
export LIBRARY_PATH=$MKL_ROOT_DIR/lib/intel64:$LIBRARY_PATH
export PKG_CONFIG_PATH=$MKL_ROOT_DIR/bin/pkgconfig:$PKG_CONFIG_PATH

PKG_CONFIG_PATH はいまの目的では必要ないが, Python 以外でも Intel MKL を利用したいと思った場合に有用なので, 同時に設定しておく.

NumPy と SciPy のインストール

ビルド

まず ~/.numpy-site.cfg というファイルを作成し, 以下の内容を書き込む.

.numpy-site.cfg
[mkl]
library_dirs = /opt/intel/mkl/lib/intel64/
include_dirs = /opt/intel/mkl/include
mkl_libs = mkl_rt
lapack_libs =

そうしたら pip でインストールする. バイナリパッケージをダウンロードするのではなくコンパイルを強制するために

$ pip install --no-binary :all: numpy
$ pip install --no-binary :all: scipy

とする. ビルドに時間がかかる (特に SciPy, デスクトップで12分程度) ので気長に待つ必要がある.

[追記 2019-11-13] CentOS 7.7 で実行したところ gcc 4.8 と古く, C99 モードを有効化する必要があった. 次のようにフラグを立てればよい.

$ CFLAGS="-std=c99" pip3 install --no-binary :all: numpy
$ CFLAGS="-std=c99" pip3 install --no-binary :all: scipy

動作確認

$ python3.8
iPython 3.8.0 (default, Oct 15 2019, 23:02:58)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import numpy as np
>>> np.show_config()
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
>>> 
>>> from scipy import show_config
>>> show_config()
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
>>> 

参考文献

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?