23
27

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 5 years have passed since last update.

numpy, scipyでOpenBLASを使う

Last updated at Posted at 2016-05-02

numpy,scipyが遅いと感じた場合,blasの設定を確認するとよい.試した環境はubuntu14.04.

確認方法は,python立ち上げて

>>> import numpy
>>> numpy.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)]

にて確認する.

調べた結果,update-alternativesを使う方法等が様々出てきたが,そちらの方は挙動がおかしかったので,直接OpenBLASを設定してnumpyをコンパイルする方法を備忘録として記載

参考

  • ubuntu 14.04でBLASを使う(link)
  • Installing Numpy and OpenBLAS(link)
  • (numpy, scipyちょっと遅い気がするって時はblas, lapack, atlasが入っているか見直しましょうlink)

事前準備

OpenBLASをインストールする前準備として, python-devとgfortranをインストールする.

~$ sudo apt-get install git python-dev gfortran

OpenBLASインストール

gitからOpenBLASをダウンロードし,gfortranにてmake,installする./opt/openblas/にインストールされていることを確認する.

~$ git clone https://github.com/xianyi/OpenBLAS
~$ cd OpenBLAS
~$ make FC=gfortran
~$ sudo make PREFIX=/opt/openblas install

その後,OpenBLASへのpathを設定しておく.~/.bashrc等に記載しておくとよい.

~$ export LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH

複数ユーザで使う場合は,

~$ sudo -s "echo '/opt/OpenBLAS/lib' > /etc/ld.so.conf.d/openblas.conf"

設定が終わった後,

~$ sudo ldconfig

を実行する.

numpyインストール

gitからnumpyをダウンロードし,site.cfgにopenblas設定を記載

~$ git clone https://github.com/numpy/numpy
~$ cd numpy
~$ cp site.cfg.example site.cfg
~$ vi site.cfg

site.cfgの以下の部分をコメント解除する.

[openblas]
libraries = openblas
library_dirs = /opt/OpenBLAS/lib
include_dirs = /opt/OpenBLAS/include

その後,~$ python setup.py configにて設定変更がうまくいっているかを確認する.

openblas_info:
  FOUND:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/opt/openblas/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

  FOUND:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/opt/openblas/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

上記を確認後,~$ python setup.py build && python setup.py installにてビルド・インストールする.

動作確認

ここにあるコードで,速度を確認する.使用するスレッドの数はOMP_NUM_THREADSにて指定する(下の例は5000*5000の行列計算).

~$ OMP_NUM_THREADS=1 python test_numpy.py
version: 1.12.0.dev0+3c394f7
maxint:  9223372036854775807

BLAS info:
 * libraries ['openblas', 'openblas']
 * library_dirs ['/opt/openblas/lib']
 * define_macros [('HAVE_CBLAS', None)]
 * language c

dot: 4.537050 sec
~$ OMP_NUM_THREADS=8 python test_numpy.py
version: 1.12.0.dev0+3c394f7
maxint:  9223372036854775807

BLAS info:
 * libraries ['openblas', 'openblas']
 * library_dirs ['/opt/openblas/lib']
 * define_macros [('HAVE_CBLAS', None)]
 * language c

dot: 1.855611 sec

scipyインストール

上記でnumpyがインストールできれば,あとはpipでscipyをインストールするだけです.

pip install scipy
23
27
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
23
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?