[PYTHON] Verwenden Sie OpenBLAS mit numpy, scipy

Wenn Sie das Gefühl haben, dass Numpy und Scipy langsam sind, überprüfen Sie die Blas-Einstellungen. Die Umgebung, die ich ausprobiert habe, war Ubuntu 14.04.

Starten Sie zur Überprüfung 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)]

Überprüfen Sie bei.

Als Ergebnis der Untersuchung kamen verschiedene Methoden heraus, beispielsweise die Verwendung von Update-Alternativen, die jedoch ein seltsames Verhalten aufwiesen. Daher wird die Methode zum direkten Festlegen von OpenBLAS und zum Kompilieren von Numpy als Memorandum bezeichnet.

Referenz

--Verwenden von BLAS mit Ubuntu 14.04 (Link)

Vorbereitungen

Installieren Sie Python-Dev und Gfortran als Vorbereitung, bevor Sie OpenBLAS installieren.

~$ sudo apt-get install git python-dev gfortran

OpenBLAS-Installation

Laden Sie OpenBLAS von git herunter und erstellen und installieren Sie es mit gfortran. Stellen Sie sicher, dass es in / opt / openblas / installiert ist.

~$ git clone https://github.com/xianyi/OpenBLAS
~$ cd OpenBLAS
~$ make FC=gfortran
~$ sudo make PREFIX=/opt/openblas install

Stellen Sie danach den Pfad zu OpenBLAS ein. Es wird empfohlen, es in ~ / .bashrc usw. zu beschreiben.

~$ export LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH

Bei Verwendung mit mehreren Benutzern

~$ sudo -s "echo '/opt/OpenBLAS/lib' > /etc/ld.so.conf.d/openblas.conf"

Nachdem die Einstellung abgeschlossen ist

~$ sudo ldconfig

Wird ausgeführt.

numpy Installation

Laden Sie numpy von git herunter und beschreiben Sie die openblas-Einstellungen in site.cfg

~$ git clone https://github.com/numpy/numpy
~$ cd numpy
~$ cp site.cfg.example site.cfg
~$ vi site.cfg

Kommentieren Sie den folgenden Teil von site.cfg aus.

[openblas]
libraries = openblas
library_dirs = /opt/OpenBLAS/lib
include_dirs = /opt/OpenBLAS/include

Überprüfen Sie anschließend mit ~ $ python setup.py config, ob die Einstellungsänderung erfolgreich ist.

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)]

Nachdem Sie das oben Gesagte bestätigt haben, erstellen und installieren Sie mit ~ $ python setup.py build && python setup.py install.

Funktionsprüfung

Überprüfen Sie die Geschwindigkeit mit Code hier. Die Anzahl der zu verwendenden Threads wird durch "OMP_NUM_THREADS" angegeben (das folgende Beispiel ist eine 5000 * 5000-Matrixberechnung).

~$ 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 Installation

Wenn Sie oben numpy installieren können, müssen Sie scipy nur mit pip installieren.

pip install scipy

Recommended Posts

Verwenden Sie OpenBLAS mit numpy, scipy
Verwenden Sie BLAS / LAPACK mit mehreren Threads mit numpy / scipy
Verwenden Sie Numpy
Verwenden Sie Numpy, Scipy, Scikit-Learn mit Heroku
LPC mit Scipy
Verwenden Sie Numpy, Scipy, Scikit-Learn unter Amazon Linux
CORDIC mit Scipy
Verwenden von Intel MKL mit NumPy / SciPy (Version November 2019)
Verwenden Sie mecab-ipadic-neologd mit igo-python
Verwenden Sie RTX 3090 mit PyTorch
Verwenden Sie ansible mit cygwin
[Python] Verwenden Sie JSON mit Python
Verwenden Sie Mock mit Pytest
Verwenden Sie den Indikator mit pd.merge
Verwenden Sie Gentelella mit Django
Gleitender Durchschnitt mit Numpy
Verwenden Sie Mecab mit Python 3
Verwenden Sie Tensorboard mit Chainer
Verwenden Sie DynamoDB mit Python
Verwenden Sie pip mit MSYS2
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Copyright mit Spacemacs
Verwenden Sie Python mit Docker
Verwenden Sie TypeScript mit Django-Kompressor
Erstellen Sie einen Filter mit scipy
Wie benutzt man numpy?
Verwenden Sie WENIGER mit Django
Erste Schritte mit Numpy
Verwenden Sie MySQL mit Django
Lernen Sie mit Chemo Informatics NumPy
Verkettung von Matrizen mit Numpy
Summencode mit Numpy
Daten mit Scipy normieren
Führen Sie eine Regressionsanalyse mit NumPy durch
Verwenden Sie Enum mit SQLAlchemy
Verwenden Sie Tensorboard mit NNabla
Verwenden Sie GPS mit Edison
Erweitern Sie NumPy mit Rust
Verwenden Sie nim mit Jupyter
FFT-Verarbeitung mit numpy und scipy bis Tiefpassfilter
Kernel-Regression nur mit Numpy
Verwenden Sie die Trello-API mit Python
Ich habe GP mit Numpy geschrieben
Verwenden Sie gemeinsam genutzten Speicher mit gemeinsam genutzten Bibliotheken
Verwenden Sie benutzerdefinierte Tags mit PyYAML
Verwenden Sie Richtungsdiagramme mit networkx
CNN-Implementierung mit nur Numpy
Künstliche Datengenerierung mit Numpy
Verwenden Sie die Twitter-API mit Python
Verwenden Sie pip mit Jupyter Notebook
[Python] Berechnungsmethode mit numpy
Versuchen Sie die Matrixoperation mit NumPy
Verwenden Sie DATE_FORMAT mit dem SQLAlchemy-Filter
Verwenden Sie TUN / TAP mit Python
Animation der Diffusionsgleichung mit NumPy
Verwenden Sie sqlite3 mit NAO (Pepper)
Sehen Sie, wie schnell Sie mit NumPy / SciPy beschleunigen können
SMO mit Python + NumPy implementiert
Kleben Sie die Saiten mit Numpy zusammen
[Python] Hinweise beim Versuch, Numpy mit Cython zu verwenden