[PYTHON] Utilisation d'Intel MKL avec NumPy / SciPy (version de novembre 2019)

Intel MKL est une bibliothèque de traitement numérique à haute vitesse développée par Intel qui ne fonctionne que sur les processeurs Intel. Elle inclut l'algèbre linéaire, la FFT, etc. Numpy / SciPy utilise openblas pour l'algèbre linéaire par défaut. , Intel MKL est plus rapide.

Le contenu de cet article a été vérifié avec Debian 10 (natif / WSL) à l'aide de Python 3.8.0. * Officiellement, Debian n'est pris en charge que pour 8 ou 9, et Debian 10 n'est pas pris en charge. [Sur CentOS 7.7 Ajout du résultat. 2019-11-13]

Installation d'Intel MKL

Télécharger

Suivez les liens «Choisir et télécharger», «Linux *», «Enregistrer et télécharger» de Intel MKL, et du formulaire votre nom et adresse e-mail, etc. Remplissez les éléments requis et soumettez. Dès que vous soumettez, vous recevrez un lien de téléchargement par e-mail (le fichier joint contient la clé mais ne l'a pas utilisée). Ouvrez le lien et sélectionnez celui qui convient à votre environnement et téléchargez.

Il existe également une option pour installer en utilisant apt ou yum.Cependant, je pense personnellement que la version autonome est bien.

Installation

Le fichier tgz sera téléchargé, décompressez-le et déplacez-le dedans. Ensuite, vous y trouverez deux fichiers, . / Install.sh et. / Silent.cfg. Simplement sudo ./install. L'exécution de sh démarrera l'installation interactive. Néanmoins, si vous réécrivez . / Silent.cfg comme il convient et exécutez sudo ./install.sh -s. / Silent.cfg, l'installation se fera automatiquement. Ira.

Selon l'article Comment installer mkl numpy, la clé d'enregistrement est requise, mais quand je l'ai exécutée, elle n'a pas été demandée. Ainsi, l'édition de . / Silent.cfg ne doit être réécrite que sous la forme ʻACCEPT_EULA = accept`, sans créer de champ pour la clé d'activation.

Définition des variables d'environnement

Définissez les variables d'environnement nécessaires autour de ~ / .profile ou ~ / .bashrc.

export MKL_ROOT_DIR=/opt/intel/mkl
export LD_LIBRARY_PATH=$MKL_ROOT_DIR/lib/intel64:/opt/intel/lib/intel64_lin:$LD_LIBRARY_PATH
export LIBRARY_PATH=$MKL_ROOT_DIR/lib/intel64:$LIBRARY_PATH
export PKG_CONFIG_PATH=$MKL_ROOT_DIR/bin/pkgconfig:$PKG_CONFIG_PATH

PKG_CONFIG_PATH n'est pas nécessaire pour l'objectif actuel, mais il est utile lorsque vous souhaitez utiliser Intel MKL autre que Python, alors définissez-le en même temps.

Installation de NumPy et SciPy

Construire

Tout d'abord, créez un fichier appelé ~ / .numpy-site.cfg et écrivez le contenu suivant.

:.numpy-site.cfg


[mkl]
library_dirs = /opt/intel/mkl/lib/intel64/
include_dirs = /opt/intel/mkl/include
mkl_libs = mkl_rt
lapack_libs =

Puis installez avec pip. Pour forcer la compilation au lieu de télécharger des packages binaires

$ pip install --no-binary :all: numpy
$ pip install --no-binary :all: scipy

La construction prend beaucoup de temps (en particulier SciPy, environ 12 minutes sur le bureau), il faut donc attendre patiemment.

__ [Ajout 2019-11-13] __ Quand je l'ai exécuté sur CentOS 7.7, il était aussi vieux que gcc 4.8, et j'ai dû activer le mode C99. Vous pouvez le signaler comme suit.

$ CFLAGS="-std=c99" pip3 install --no-binary :all: numpy
$ CFLAGS="-std=c99" pip3 install --no-binary :all: scipy

Contrôle de fonctionnement

$ python3.8
iPython 3.8.0 (default, Oct 15 2019, 23:02:58)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import numpy as np
>>> np.show_config()
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
>>> 
>>> from scipy import show_config
>>> show_config()
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/mkl/lib/intel64']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/mkl/include']
>>> 

Les références

Recommended Posts

Utilisation d'Intel MKL avec NumPy / SciPy (version de novembre 2019)
Utilisez OpenBLAS avec numpy, scipy
Moyenne harmonique par Python (en utilisant SciPy)
Mettez NumPy, SciPy, Matplotlib dans OS X avec Homebrew (à partir de novembre 2015)
Utilisez BLAS / LAPACK multi-thread avec numpy / scipy
Je veux utiliser mkl avec numpy et scipy sous l'environnement pyenv + poetry
Accélération du calcul numérique avec NumPy / SciPy: Application 2
[Rust / Python] Gérer numpy avec PyO3 (version d'août 2020)
Accélération du calcul numérique avec NumPy / SciPy: Application 1
LPC avec Scipy
Essayez d'utiliser scipy
ICA avec Scipy
CORDIC avec Scipy
Traitement FFT avec filtre numpy et scipy vers passe-bas