[PYTHON] Verwenden Sie BLAS / LAPACK mit mehreren Threads mit numpy / scipy

In Artikel, den ich zuvor geschrieben habe habe ich beschrieben, wie Python, Numpy und Scipy von der Quelle installiert werden, ohne Wurzeln zu schlagen.

Das obige Verfahren weist jedoch die folgenden Probleme auf.

Der Grund ist, dass BLAS und LAPACK nicht Multithreading sind. Ich habe nicht genug Geld, um Intel MKL zu kaufen, deshalb habe ich mich für OpenBLAS entschieden.

Die folgenden zwei Referenzartikel.

OpenBLAS

Verwenden Sie SurviveGotoBLAS. Erstellen Sie zunächst die statische Bibliothek.

# wget http://prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/SurviveGotoBLAS2_3.14.tar.gz
# tar xzf SurviveGotoBLAS2_3.14.tar.gz
# cd survivegotoblas2_3.14
# vim Makefile.rule
TARGET=X86_64
BINARY=64
USE_THREAD=1
USE_OPENMP=1
NUM_THREADS=12    #Passen Sie die Anzahl der CPUs an
NO_CBLAS=1    #CBLAS wird später gebaut
NO_LAPACK=1    #LAPACK wird später gebaut
# make all -j 4
# cp libgoto2.a ~/lib    #Ein Ort, um dauerhaft zu verlassen (hier~/nach lib kopieren)

Einige Pakete, wie z. B. Theano, erfordern eine dynamische Linkbibliothek. Erstellen Sie daher auch .so.

# mkdir tmp
# cd tmp
# cp ../libgoto2.a .
# ar -x libgoto2.a    # .ein.Zerlegt in o
# gfortran -shared -lpthread -lgomp  -o libgoto2.so *.o
# cp libgoto2.so ~/lib    #Kopieren Sie an einen Ort, an dem Sie dauerhaft abreisen können
# export BLAS=~/lib/libgoto2.so    #Möglicherweise nicht erforderlich

CBLAS

Sie können die in SurviveGotoBLAS enthaltene verwenden, aber hier erstellen Sie sie selbst. Vergessen Sie nicht, die BLAS anzugeben, die Sie zuvor beim Erstellen von CBLAS erstellt haben. Seien Sie vorsichtig, da es beim Erstellen von .so leicht zu vergessen ist (zweite Zeile von unten).

# wget http://www.netlib.org/blas/blast-forum/cblas.tgz
# tar xzf cblas.tgz
# cd CBLAS
# cp Makefile.LINUX Makefile.in
# vim Makefile.in
BLLIB = ~/lib/libgoto2.a    #Siehe BLAS hier
CBLIB = ../lib/libcblas.a    #Ausgabeziel von CBLAS
LOADER = $(FC) -lpthread
CFLAGS = -O3 -m64 -fPIC -DADD_
FFLAGS = -O3 -m64 -fPIC
# make all -j 4
# cp lib/libcblas.a ~/lib    #Kopieren Sie an einen Ort, an dem Sie dauerhaft abreisen können
# gfortran -L${HOME}/lib -lgoto2 -shared -o libcblas.so *.o
# cp libcblas.so ~/lib    #Kopieren Sie an einen Ort, an dem Sie dauerhaft abreisen können

LAPACK

Bauen Sie das auch selbst. Geben Sie die Bibliotheken an, die bisher beim Erstellen von LAPACK erstellt wurden.

# wget http://www.netlib.org/lapack/lapack.tgz
# tar xzf lapack.tgz
# cd lapack
# cp INSTALL/make.inc.gfortran make.inc
# vi make.inc
OPTS =  -O3 -m64 -fPIC
NOOPT = -O0 -m64 -fPIC
LOADOPTS = -L${HOME}/lib -lgoto2 -lcblas
# make lapacklib -j 4
# cp liblapack.a ~/lib    #Kopieren Sie an einen Ort, an dem Sie dauerhaft abreisen können
# mkdir tmp
# cd tmp
# cp ../liblapack.a .
# ar -x liblapack.a    # .ein.Zerlegt in o
# gfortran -L${HOME}/lib -lgoto2 -lcblas -shared -o liblapack.so *.o
# cp liblapack.so ~/lib
# export LAPACK=~/lib/liblapack.so    #Möglicherweise nicht erforderlich

Numpy

Der Punkt ist, site.cfg vor dem Erstellen zu bearbeiten und dort auf BLAS und LAPACK zu verweisen.

# wget http://sourceforge.net/projects/numpy/files/NumPy/1.9.0/numpy-1.9.0.tar.gz/download --no-check-certificate
# tar xzf numpy-1.9.0.tar.gz
# cd numpy-1.9.0
# cp site.cfg.example site.cfg
# vim site.cfg
[DEFAULT]
library_dirs = ${HOME}/lib
[atlas]
atlas_libs = goto2,cblas
# python setup.py build
# python setup.py install

Getestet, um zu sehen, ob es funktioniert. Vielleicht sollte hier kein Fehler sein.

# python -c "import numpy; numpy.test(verbose=2)"

Möglicherweise möchten Sie das Testskript unter hier ausführen, um die Geschwindigkeit zu überprüfen.

# python test_numpy.py

Scipy

# wget http://sourceforge.net/projects/scipy/files/scipy/0.14.0/scipy-0.14.0.tar.gz/download
# tar xzvf scipy-0.14.0.tar.gz
# cd scipy-0.14.0
# vim site.cfg
[DEFAULT]
library_dirs = ${HOME}/lib
[atlas]
atlas_libs = lapack,goto2,cblas

Schreiben Sie hier scipy / lib / lapack / \ _ \ _ init \ _ \ _. Py wie folgt um.

(Alt)

__init_old__.py


from scipy.linalg import flapack
from scipy.linalg import clapack
_use_force_clapack = 1
if hasattr(clapack,'empty_module'):
    clapack = flapack
    _use_force_clapack = 0
elif hasattr(flapack,'empty_module'):
    flapack = clapack''

(Neu)

__init__.py


from scipy.linalg import flapack
clapack = flapack
_use_force_clapack = 0

Zum Schluss bauen und installieren und fertig stellen.

# python setup.py build
# python setup.py install

Lassen Sie uns dies auch testen. Obwohl es gelegentlich fehlschlagen kann,

# python -c "import numpy; numpy.test(verbose=2)"

Recommended Posts

Verwenden Sie BLAS / LAPACK mit mehreren Threads mit numpy / scipy
Verwenden Sie OpenBLAS mit numpy, scipy
Verwenden Sie Numpy
Verwenden Sie Numpy, Scipy, Scikit-Learn unter Amazon Linux
LPC mit Scipy
Verwenden von Intel MKL mit NumPy / SciPy (Version November 2019)
ICA mit Scipy
Ich möchte mkl mit numpy und scipy unter pyenv + Poesie verwenden
CORDIC mit Scipy
numpy, scipy Wenn Sie sich etwas langsam fühlen, prüfen Sie, ob Blas, Lapack und Atlas enthalten sind.
FFT-Verarbeitung mit numpy und scipy bis Tiefpassfilter
Verwenden Sie mecab-ipadic-neologd mit igo-python
Verwenden Sie RTX 3090 mit PyTorch
Verwenden Sie ansible mit cygwin
Verwenden Sie pipdeptree mit virtualenv
[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 DynamoDB mit Python
Verwenden Sie pip mit MSYS2
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
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
Sehen Sie, wie schnell Sie mit NumPy / SciPy beschleunigen können
[Python] Hinweise beim Versuch, Numpy mit Cython zu verwenden