web-dev-qa-db-ja.com

numpy BLASライブラリが動的にロード可能なライブラリとして利用可能であることを確認するにはどうすればよいですか?

theanoインストールドキュメント は、「BLASライブラリが動的にロード可能なライブラリとして利用可能である」場合、 theano はデフォルトでnumpyのBLASライブラリを使用すると述べています。これは私のマシンでは機能していないようです。エラーメッセージを参照してください。

  • NumpyのBLASライブラリが動的にロード可能であるかどうかを確認するにはどうすればよいですか?
  • Numpy BLASライブラリが動的にロードできない場合、どうすれば再コンパイルできますか?

さらに情報が必要な場合は、お知らせください。

エラーメッセージ

_We did not found a dynamic library into the library_dir of the library we use for blas. If you use ATLAS, make sure to compile it with dynamics library. /usr/bin/ld: cannot find -lblas_

付録

theano ライブラリには、とりわけnumpyとBLASライブラリが必要です。 Ubuntuで _Sudo apt-get install python-numpy python-scipy_ を使用してインストールすると、numpyにはBLASが付属していると思いました。

これは_/usr/lib64/python2.6/dist-packages/scipy/lib/blas_のファイルリストです

_cblas.so  info.py   __init__.py   scons_support.py   setup.py     
fblas.so  info.pyc  __init__.pyc  scons_support.pyc  setup.pyc  
setupscons.py  test
setupscons.pyc
_

これはdistutils.__config__.show()の出力です。次のとおりです。

_blas_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib64']
    language = f77

lapack_info:
    libraries = ['lapack']
    library_dirs = ['/usr/lib64']
    language = f77

atlas_threads_info:
  NOT AVAILABLE

blas_opt_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib64']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]

atlas_blas_threads_info:
  NOT AVAILABLE

lapack_opt_info:
    libraries = ['lapack', 'blas']
    library_dirs = ['/usr/lib64']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]

atlas_info:
  NOT AVAILABLE

lapack_mkl_info:
  NOT AVAILABLE

blas_mkl_info:
  NOT AVAILABLE

atlas_blas_info:
  NOT AVAILABLE

mkl_info:
  NOT AVAILABLE
_
23
Framester

pythonライブラリのAnacondaディストリビューションをダウンロードした後、Ubuntu 12.04 LTS64ビットで同じ問題が発生しました。Theanoをlibblas.soを含むディレクトリにポイントすると問題が解決しました。

$ THEANO_FLAGS=blas.ldflags="-L/usr/lib/ -lblas" python rbm.py

13
stewart

Ubuntuでは、パッケージマネージャーのlibblas.soにlibblas3gfパッケージが付属しています。どういうわけかlibblas.soを作成せず、libblas.so.Xを作成する場合は、次のようなシンボリックリンクを手動で作成します。

cd /usr/lib64
Sudo ln -s libblas.so.3gf libblas.so

注意:これは私にとっては問題なく機能していますが、以下のコメントを読んでください。また、このパッケージは特定のハードウェアに最適化されないことに注意してください(たとえば、ATLASを提案する他の回答を読んでください)。

3
tiho

あなたの場合、/usr/lib64を調べて、libblasなどが.soまたは.so.Xファイルとして利用できるかどうかを確認する必要があります。

BLASの再コンパイルは簡単ではありませんが、ディストリビューションに関連するATLASパッケージをインストールしてみることができます。

2
dwf

Numpyの最近の十分なバージョンがインストールされている場合、theanoはすべての場合に正しく機能します。

そこから、使用されるブラスを気にする唯一の理由はスピードについてです。デフォルトのブラスは非常に遅いです。多くのディストリビューションは、この遅いblasバージョンを再びnumpyでコンパイルします。

より高速なblas実装を実現する簡単で高速な方法は、atlasおよびatlasdevelに関するディストリビューションパッケージをインストールすることです。これは最適化されたblas実装です。

Unbuntuの新しいバージョンであるdoneでのアトラスのインストールは、numpyがそれを使い始めるような方法です。したがって、これについてTheanoで何も変更する必要はありません。他のディストリビューションがこれを行うかどうかはわかりません。

Theanoの使用が速いかどうかを確認する最良の方法は、時間を計ることです。これを行うには、bashでこれを実行します。

X=`python -c "import theano;import os.path; print os.path.split(theano.__file__)[0]"`
python ${X}/misc/check_blas.py

次に、実行にかかった速度を、印刷された他の比較結果と比較します。

1
nouiz

あなたの主な質問は、基本的に、ディストリビューションのメンテナが依存関係を正しくインストールしているかどうかの1つです。そのため、私には答えも解決策もありません。

ただし、推奨事項はあります。 ATLASを構築するのはそれほど難しくありません。ソースを取得し、解凍して、依存関係が満たされていることを確認してから、構成と作成の手順を開始します。依存関係の部分は、おそらく最も時間がかかる手動プロセスの部分です。

もちろん、numpy、theanoなどを再リンクする必要があります。これは苦痛だと認識していますが(信じてください、TheanoとHannes Shulz&Andy MuellerのCSVの両方で試しました)、得られるメリットはBLASに合わせて調整されていることです。ハードウェア上で最適に実行します。

1