Il semble que la vitesse de calcul change en fonction du BLAS utilisé pour Numpy [Python]

2019er mars 6

Dans "numpy", une bibliothèque de calcul numérique appelée BLAS est en charge du traitement proprement dit.

Le BLAS utilisé dépend de si vous installez numpy avec "conda install" ou "pip install", et selon le BLAS que vous utilisez, la vitesse de traitement sera affectée non seulement par numpy mais aussi par les bibliothèques qui en dépendent.

Cette fois, je présenterai le BLAS et la différence de vitesse réelle, et comment vérifier quel BLAS vous utilisez.

BLAS et ses types

Qu'est-ce que BLAS?

Concernant BLAS, l'explication sur le site suivant était très simple à comprendre, je vais donc la citer.

BLAS est une abréviation pour les sous-programmes d'algèbre linéaire de base.Pour le dire franchement, c'est une bibliothèque d'opérations linéaires de base, ou simplement, un ensemble de fonctions qui effectuent les calculs de base des matrices et des vecteurs.Par exemple, multiplication de matrice, calcul de norme vectorielle, etc.L'idée est d'arrêter d'implémenter ces calculs (réinventer la roue) et d'utiliser la bibliothèque pour un codage efficace et performant.

BLAS facile à utiliser

Puisque BLAS est également utilisé derrière numpy, il est dit que le temps de calcul sera différent en fonction du BLAS appelé lorsque numpy est exécuté.

Type BLAS

Différents types de BLAS ont été développés.Jetons un coup d'œil à quelques-uns des types typiques.

Ouvrir BLAS

Une implémentation open source de BLAS.Dans numpy installé avec pip, OpenBLAS est appelé en interne pour effectuer des opérations.
Il est compatible avec divers processeurs, et on dit qu'il peut fournir la même vitesse qu'Intel MKL pour le processeur Sandy Bridge d'Intel.Il est bien connu pour sa fonction multi-threading, et il semble que le nombre de cœurs soit bien proportionnel à l'accélération.

Intel MKL (bibliothèque Intel Math Kernel)

BLAS développé par Intel. Seuls les processeurs Intel sont pris en charge et ne peuvent pas être utilisés avec des processeurs fabriqués par d'autres sociétés. Comme il est optimisé pour les processeurs Intel tels que Xeon, les séries Core i et Atom, il est plus rapide d'utiliser Intel MKL comme bibliothèque arithmétique sur un ordinateur qui utilise ces processeurs.Intel MKL est utilisé pour numpy installé par "conda install" avec Anaconda ou Miniconda.

ATLAS (logiciel d'algèbre linéaire à réglage automatique)

L'un des BLAS gratuits.Comme son nom l'indique, le réglage définit les paramètres optimaux pour le matériel à installer et réalise un calcul à grande vitesse.

Différence de temps de calcul due à la différence de BLAS

Le fait que BLAS utilisé à l'arrière de numpy affecte la vitesse de traitement signifie qu'il est lié à la vitesse d'exécution de la bibliothèque qui dépend de numpy.En d'autres termes, cela affecte également scipy, pandas, scikit-learn et tensorflow.

De nombreux techniciens comparent des benchmarks pour les différences BLAS (différences entre conda install et pip install), mais prennent comme exemple celui publié dans Intel® Developer Zone.
Le calcul de la matrice par scipy montre le temps nécessaire pour la multiplication des matrices compliquées à mesure qu'il se déplace vers la droite, et Intel MKL peut traiter plus rapidement qu'ATLAS.

Comparaison du calcul matriciel par scipy dans Intel MKL et ATLAS
Comparaison du calcul matriciel par scipy dans Intel MKL et ATLAS
Source:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

Ce qui suit est du fonctionnaire d'Anaconda. Nous comparons le nombre d'images entraînées par seconde dans chaque modèle d'apprentissage en profondeur avec tensorflow installé par conda install ou pip install, et la différence est jusqu'à 1 fois.

Différence entre pip (OpenBLAS) et conda (Intel MKL) dans chaque modèle d'apprentissage en profondeur
Différence entre pip (OpenBLAS) et conda (Intel MKL) dans chaque modèle d'apprentissage en profondeur
(Le processeur est Intel® Xeon® Gold 6130)
Source:https://www.anaconda.com/tensorflow-in-anaconda/

D'autres comparaisons incluent les pandas et scikit learn (les performances d'Intel vs Anaconda vs vanilla Python – ma référence personnelle). Étant donné que conda a sa propre installation et gestion de bibliothèque, cela semble être un résultat favorable dans de nombreux cas.

Comment vérifier BLAS en Python

__config__.show()Courez.

import numpy comme np np .__ config __. show ()

>>
mkl_info: library = ['mkl_rt'] library_dirs = ['C: / Users /'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['C: \\ Program Files ( 'C: \\ Program Files (' x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl ',' C: \\ Program Files (x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl \\ include ',' C: \\ Program Files (x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl \\ lib ',' C: / Users / programmation / Miniconda3 / envs / ML \\ Bibliothèque \\ include ']

Si mkl_info est affiché, intel MKL est utilisé.