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