Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
24
Help us understand the problem. What is going on with this article?
@yukiB

numpy, scipyでOpenBLASを使う

More than 5 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
24
Help us understand the problem. What is going on with this article?
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
xcoo
ゲノムおよび生体情報解析のトータルソリューション「Chrovis」の開発をしています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
24
Help us understand the problem. What is going on with this article?