[PYTHON] Utilisez OpenBLAS avec numpy, scipy

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.

référence

--Utilisation de BLAS avec ubuntu 14.04 (lien)

Préparation préalable

Installez python-dev et gfortran comme préparatifs avant d'installer OpenBLAS.

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

Installation d'OpenBLAS

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é.

installation numpy

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.

Contrôle de fonctionnement

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

installation de scipy

Si vous pouvez installer numpy ci-dessus, tout ce que vous avez à faire est d'installer scipy avec pip.

pip install scipy

Recommended Posts

Utilisez OpenBLAS avec numpy, scipy
Utilisez BLAS / LAPACK multi-thread avec numpy / scipy
Utilisez Numpy
Utilisez Numpy, Scipy, scikit-learn avec Heroku
LPC avec Scipy
Utilisez Numpy, Scipy, scikit-learn sur Amazon Linux
CORDIC avec Scipy
Utilisation d'Intel MKL avec NumPy / SciPy (version de novembre 2019)
Utilisez mecab-ipadic-neologd avec igo-python
Utilisez RTX 3090 avec PyTorch
Utiliser ansible avec cygwin
[Python] Utiliser JSON avec Python
Utilisez Mock avec pytest
Utiliser l'indicateur avec pd.merge
Utiliser Gentelella avec Django
Moyenne mobile avec numpy
Utiliser mecab avec Python 3
Utiliser tensorboard avec Chainer
Utiliser DynamoDB avec Python
Utiliser pip avec MSYS2
Utilisez Python 3.8 avec Anaconda
Utiliser les droits d'auteur avec Spacemacs
Utiliser python avec docker
Utiliser TypeScript avec django-compresseur
Créer un filtre avec scipy
Comment utiliser numpy
Utilisez LESS avec Django
Premiers pas avec Numpy
Utiliser MySQL avec Django
Apprenez avec Chemo Informatics NumPy
Concaténation de matrices avec Numpy
Code de bourdonnement avec numpy
Normariser les données avec Scipy
Effectuer une analyse de régression avec NumPy
Utiliser Enum avec SQLAlchemy
Utiliser tensorboard avec NNabla
Utiliser le GPS avec Edison
Étendre NumPy avec Rust
Utilisez nim avec Jupyter
Traitement FFT avec filtre numpy et scipy vers passe-bas
Régression du noyau avec Numpy uniquement
Utiliser l'API Trello avec python
J'ai écrit GP avec numpy
Utiliser la mémoire partagée avec une bibliothèque partagée
Utiliser des balises personnalisées avec PyYAML
Utiliser des graphiques directionnels avec networkx
Implémentation CNN avec juste numpy
Génération artificielle de données avec numpy
Utiliser l'API Twitter avec Python
Utiliser pip avec Jupyter Notebook
[Python] Méthode de calcul avec numpy
Essayez l'opération matricielle avec NumPy
Utiliser DATE_FORMAT avec le filtre SQLAlchemy
Utiliser TUN / TAP avec Python
Animation de l'équation de diffusion avec NumPy
Utilisez sqlite3 avec NAO (Pepper)
Découvrez la puissance de l'accélération avec NumPy / SciPy
Implémentation de SMO avec Python + NumPy
Coller les chaînes avec Numpy
[python] Remarques lors de la tentative d'utilisation de numpy avec Cython