Si vous pensez que numpy et scipy sont lents, vous devriez vérifier les paramètres blas. L'environnement que j'ai essayé était ubuntu 14.04.
Pour vérifier, lancez 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)]
Vérifiez à.
À la suite de l'enquête, diverses méthodes telles que l'utilisation d'alternatives de mise à jour sont sorties, mais celle-ci avait un comportement étrange, de sorte que la méthode de configuration directe d'OpenBLAS et de compilation de numpy est décrite comme un mémorandum.
--Utilisation de BLAS avec ubuntu 14.04 (lien)
Installez python-dev et gfortran comme préparatifs avant d'installer OpenBLAS.
~$ sudo apt-get install git python-dev gfortran
Téléchargez OpenBLAS depuis git et créez-le et installez-le avec gfortran. Assurez-vous qu'il est installé dans / opt / openblas /
.
~$ git clone https://github.com/xianyi/OpenBLAS
~$ cd OpenBLAS
~$ make FC=gfortran
~$ sudo make PREFIX=/opt/openblas install
Après cela, définissez le chemin sur OpenBLAS. Il est recommandé de le décrire dans ~ / .bashrc
etc.
~$ export LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH
Lors de l'utilisation avec plusieurs utilisateurs
~$ sudo -s "echo '/opt/OpenBLAS/lib' > /etc/ld.so.conf.d/openblas.conf"
Une fois le réglage terminé
~$ sudo ldconfig
Est exécuté.
Téléchargez numpy depuis git et décrivez les paramètres openblas dans site.cfg
~$ git clone https://github.com/numpy/numpy
~$ cd numpy
~$ cp site.cfg.example site.cfg
~$ vi site.cfg
Décommentez la partie suivante de site.cfg.
[openblas]
libraries = openblas
library_dirs = /opt/OpenBLAS/lib
include_dirs = /opt/OpenBLAS/include
Après cela, vérifiez si le changement de paramètre est réussi avec ~ $ python setup.py config
.
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)]
Après avoir confirmé ce qui précède, compilez et installez avec ~ $ python setup.py build && python setup.py install
.
Vérifiez la vitesse avec Code ici. Le nombre de threads à utiliser est spécifié par ʻOMP_NUM_THREADS` (l'exemple ci-dessous est un calcul matriciel de 5000 * 5000).
~$ 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
Si vous pouvez installer numpy ci-dessus, tout ce que vous avez à faire est d'installer scipy avec pip.
pip install scipy
Recommended Posts