Dans article que j'ai écrit plus tôt, j'ai décrit comment installer python, numpy et scipy à partir des sources sans prendre racine.
Cependant, la méthode ci-dessus présente les problèmes suivants.
La raison en est que BLAS et LAPACK ne sont pas multi-threadés. Je n'ai pas assez d'argent pour acheter Intel MKL, j'ai donc décidé d'utiliser OpenBLAS.
Les deux articles de référence suivants.
OpenBLAS
Utilisez SurviveGotoBLAS. Commencez par créer la bibliothèque statique.
# 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 #Ajuster en fonction du nombre de processeurs
NO_CBLAS=1 #CBLAS sera construit plus tard
NO_LAPACK=1 #LAPACK sera construit plus tard
# make all -j 4
# cp libgoto2.a ~/lib #Un endroit pour partir définitivement (ici~/copier dans la bibliothèque)
Certains packages, tels que Theano, nécessitent une bibliothèque de liens dynamiques, alors créez également .so.
# mkdir tmp
# cd tmp
# cp ../libgoto2.a .
# ar -x libgoto2.a # .une.Démonté en o
# gfortran -shared -lpthread -lgomp -o libgoto2.so *.o
# cp libgoto2.so ~/lib #Copier dans un endroit pour quitter définitivement
# export BLAS=~/lib/libgoto2.so #Peut ne pas être nécessaire
CBLAS
Vous pouvez utiliser celui inclus dans SurviveGotoBLAS, mais ici vous le construisez vous-même. N'oubliez pas de spécifier le BLAS que vous avez construit précédemment lors de la construction de CBLAS. Attention, il est facile de l'oublier lors de la création .so (deuxième ligne à partir du bas).
# 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 #Voir BLAS ici
CBLIB = ../lib/libcblas.a #Destination de sortie de CBLAS
LOADER = $(FC) -lpthread
CFLAGS = -O3 -m64 -fPIC -DADD_
FFLAGS = -O3 -m64 -fPIC
# make all -j 4
# cp lib/libcblas.a ~/lib #Copier dans un endroit pour quitter définitivement
# gfortran -L${HOME}/lib -lgoto2 -shared -o libcblas.so *.o
# cp libcblas.so ~/lib #Copier dans un endroit pour quitter définitivement
LAPACK
Construisez-le vous-même également. Spécifiez les bibliothèques créées jusqu'à présent lors de la construction de LAPACK.
# 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 #Copier dans un endroit pour quitter définitivement
# mkdir tmp
# cd tmp
# cp ../liblapack.a .
# ar -x liblapack.a # .une.Démonté en o
# gfortran -L${HOME}/lib -lgoto2 -lcblas -shared -o liblapack.so *.o
# cp liblapack.so ~/lib
# export LAPACK=~/lib/liblapack.so #Peut ne pas être nécessaire
Numpy
Le but est d'éditer site.cfg avant de construire et de faire référence à BLAS et LAPACK.
# 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
Testé pour voir si cela fonctionne. Peut-être qu'il ne devrait y avoir aucune erreur ici.
# python -c "import numpy; numpy.test(verbose=2)"
Vous pouvez exécuter le script de test à ici pour vérifier la vitesse.
# 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
Ici, réécrivez scipy / lib / lapack / \ _ \ _ init \ _ \ _. Py comme suit.
(Vieux)
__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''
(Nouveau)
__init__.py
from scipy.linalg import flapack
clapack = flapack
_use_force_clapack = 0
Enfin, construisez et installez et terminez.
# python setup.py build
# python setup.py install
Testons cela également. Bien qu'il puisse échouer occasionnellement,
# python -c "import numpy; numpy.test(verbose=2)"
Recommended Posts