web-dev-qa-db-ja.com

NumpyがBLASライブラリを使用しているかどうかを調べる

Numpyとscipyを異なる環境(MacOS、Ubuntu、RedHat)で使用しています。通常、利用可能なパッケージマネージャー(たとえば、macポート、apt、yum)を使用してnumpyをインストールします。

ただし、Numpyを手動でコンパイルしない場合、Bumpライブラリを使用していることをどのように確認できますか? Macポートを使用して、ATLASは依存関係としてインストールされます。ただし、実際に使用されているかどうかはわかりません。簡単なベンチマークを実行すると、numpy.dot()関数は約1を必要とします。 Eigen C++ライブラリを使用して計算されるドット積の2倍の時間。これが合理的な結果であるかどうかはわかりません。

よろしく、アポ

18
Apoptose

numpy.show_config()は常に信頼できる情報を提供するとは限りません。たとえば、Ubuntu 14.04で_apt-get install python-numpy_の場合、np.show_config()の出力は次のようになります。

_blas_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
lapack_info:
    libraries = ['lapack']
    library_dirs = ['/usr/lib']
    language = f77
atlas_threads_info:
  NOT AVAILABLE
blas_opt_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
atlas_blas_threads_info:
  NOT AVAILABLE
openblas_info:
  NOT AVAILABLE
lapack_opt_info:
    libraries = ['lapack', 'blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
...
_

Numpyは標準のCBLASライブラリを使用しているように見えます。しかし、numpyが_libopenblas-dev_パッケージを介してインストールしたOpenBLASを使用しているという事実は知っています。


* nixをチェックする最も確実な方法は、 ldd を使用して、実行時にどの共有ライブラリがnumpyリンクに対してリンクするかを調べることです(Macを所有していませんが、 ldd)の代わりに_otool -L_を使用します。

  • v1.10より古いnumpyのバージョンの場合:

    _~$ ldd /<path_to_site-packages>/numpy/core/_dotblas.so
    _

    __dotblas.so_が存在しない場合、これはおそらく、numpyが最初にコンパイルされたときにBLASライブラリを検出できなかったことを意味します。この場合、BLAS依存コンポーネントはまったく構築されません。

  • numpy v1.10以降の場合:

    __dotblas.so_は削除されました 、ただし、代わりに_multiarray.so_の依存関係を確認できます:

    _~$ ldd /<path_to_site-packages>/numpy/core/multiarray.so
    _

_apt-get_でインストールしたnumpyのバージョンを見ると:

_~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so 
    linux-vdso.so.1 =>  (0x00007fff12db8000)
    libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fce7b028000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fce7ac60000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fce7a958000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fce7a738000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fce7ca40000)
_

_/usr/lib/libblas.so.3_は、実際にはシンボリックリンクのチェーンの始まりです。 _readlink -e_を使用してそれらを最終的なターゲットまでたどると、OpenBLAS共有ライブラリを指していることがわかります。

_~$ readlink -e /usr/lib/libblas.so.3
/usr/lib/openblas-base/libblas.so.3
_
29
ali_m

numpy.show_config()は、情報が私のDebian Linuxで利用できないことを伝えるだけです。

ただし、/ usr/lib/python3/dist-packages/scipy/libには、blasのサブディレクトリがあり、必要な情報が表示される場合があります。サブディレクトリテストには、BLASのテストプログラムがいくつかあります。

お役に立てれば。

3
Jorgen

numpy.show_config()をチェックして、構成されているライブラリを確認する必要があります。

2
JoshAdel