私の質問:Python自分のコンパイル済みOpenBLASバージョンを使用するにはどうすればよいですか?
Theano インストールガイド は、関連付けられているBLASライブラリコンポーネントが次のコマンドで正しく最適化されていることをテストする必要があることを示しています。
THEANO_FLAGS=floatX=float32,device=cpu python `python -c "import os, theano; print os.path.dirname(theano.__file__)"`/misc/check_blas.py
THEANO_FLAGS=floatX=float32,device=gpu python `python -c "import os, theano; print os.path.dirname(theano.__file__)"`/misc/check_blas.py
結果は次のとおりです。
カード:GTX 770
CPU 0.62秒とGPU 0.11秒の結果
これらの結果が良かったかどうかわからない この投稿 で行ったように、さまざまなライブラリを比較することにしました。科学計算には可能な限りの高速化が必要なので、これは良い考えのように思えました。
私は最新バージョンをテストするために:
git clone https://github.com/xianyi/OpenBLAS.git
make TARGET=HASWELL
を作成しました(TARGETは自動的に検出するため、実際には必要ありません)。make PREFIX=/opt/OpenBLAS install
が後に続きます。/usr/lib/openblas-haswell_cstm/
にコピーしましたSudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /usr/lib/openblas-haswell_cstm/libopenblas.so.0 30
を通じて代替を追加残念ながらこれはエラーになります:
$ Sudo update-alternatives --config libblas.so.3
There are 4 choices for the alternative libblas.so.3 (providing /usr/lib/libblas.so.3).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/openblas-base/libblas.so.3 40 auto mode
* 1 /usr/lib/atlas-base/atlas/libblas.so.3 35 manual mode
2 /usr/lib/libblas/libblas.so.3 10 manual mode
3 /usr/lib/openblas-base/libblas.so.3 40 manual mode
4 /usr/lib/openblas-haswell_cstm/libopenblas.so.0 30 manual mode
Press enter to keep the current choice[*], or type selection number: 4
update-alternatives: using /usr/lib/openblas-haswell_cstm/libopenblas.so.0 to provide /usr/lib/libblas.so.3 (libblas.so.3) in manual mode
max@MaxLin:~/tutorials$ python
Python 2.7.8 (default, Oct 20 2014, 15:05:19)
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 153, in <module>
from . import add_newdocs
File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 18, in <module>
from .polynomial import *
File "/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py", line 19, in <module>
from numpy.linalg import eigvals, lstsq, inv
File "/usr/lib/python2.7/dist-packages/numpy/linalg/__init__.py", line 50, in <module>
from .linalg import *
File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 29, in <module>
from numpy.linalg import lapack_lite, _umath_linalg
ImportError: /usr/lib/liblapack.so.3: undefined symbol: gotoblas
これがコンパイルされたバージョンが 。so.3バージョン でないことに関係があるかどうかはわかりません。 libopenblas_haswellp-r0.2.14.soおよびmake
によって作成されたlibopenblas.soを使用してみましたが、エラーには影響しません。
カスタムDebianパッケージをビルドする場合は、既存のopenblas
パッケージと Debianソースパッケージをダウンロード、変更、ビルド、インストールする方法 から始めることをお勧めします。
パッケージ名とライブラリファイル名は、パッケージが提供されたものを完全には置き換えないと思われる場合は変更できます。