Help us understand the problem. What is going on with this article?

numpy, scipyでOpenBLASを使う

More than 3 years have passed since last update.

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
xcoo
ゲノムおよび生体情報解析のトータルソリューション「Chrovis」の開発をしています。
https://xcoo.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした