Sembra che la velocità di calcolo cambi a seconda del BLAS utilizzato per Numpy [Python]

2019 年 6 月 4 日

In "numpy", una libreria di calcoli numerici chiamata BLAS si occupa dell'elaborazione vera e propria.

Il BLAS utilizzato dipende dal fatto che installi numpy con "conda install" o "pip install" e, a seconda di quale BLAS utilizzi, la velocità di elaborazione sarà influenzata non solo da numpy ma anche dalle librerie che dipendono da esso.

Questa volta presenterò il BLAS e la differenza di velocità effettiva e come verificare quale BLAS stai utilizzando.

BLAS e le sue tipologie

Cos'è BLAS?

Per quanto riguarda BLAS, la spiegazione sul seguente sito è stata molto facile da capire, quindi la citerò.

BLAS è l'abbreviazione di sottoprogrammi di algebra lineare di base.Per dirla senza mezzi termini, è una libreria di operazioni lineari di base, o semplicemente, un insieme di funzioni che eseguono i calcoli di base di matrici e vettori.Ad esempio, moltiplicazione di matrici, calcolo della norma vettoriale e così via.L'idea è di interrompere l'implementazione di questi calcoli (reinventando la ruota) e utilizzare la libreria per una codifica efficiente ed efficiente.

BLAS facile da usare

Poiché BLAS viene utilizzato anche dietro numpy, si dice che il tempo di calcolo differirà a seconda di quale BLAS viene chiamato quando viene eseguito numpy.

Tipo BLAS

Sono stati sviluppati vari tipi di BLAS.Diamo un'occhiata ad alcuni di quelli tipici.

ApriBLAS

Un'implementazione open source di BLAS.In numpy installato con pip, OpenBLAS viene chiamato internamente per eseguire le operazioni.
È compatibile con varie CPU e si dice che possa fornire la stessa velocità di Intel MKL per la CPU Sandy Bridge di Intel.È ben noto per la sua funzione multi-threading e sembra che il numero di core sia ben proporzionale all'accelerazione.

Intel MKL (libreria Intel Math Kernel)

BLAS sviluppato da Intel. Solo le CPU Intel sono supportate e non possono essere utilizzate con CPU prodotte da altre società. Poiché è ottimizzato per CPU Intel come Xeon, serie Core i e Atom, è più veloce utilizzare intel MKL come libreria aritmetica su un computer che utilizza queste CPU.Intel MKL è utilizzato per numpy installato da "conda install" con Anaconda o Miniconda.

ATLAS (software di algebra lineare sintonizzato automaticamente)

Uno dei BLAS gratuiti.Come suggerisce il nome, il tuning imposta i parametri ottimali per l'hardware da installare e realizza calcoli ad alta velocità.

Differenza nel tempo di calcolo dovuta alla differenza in BLAS

Il fatto che BLAS utilizzato nella parte posteriore di numpy influisca sulla velocità di elaborazione significa che è correlato alla velocità di esecuzione della libreria che dipende da numpy.In altre parole, colpisce anche scipy, panda, scikit-learn e tensorflow.

Molti tecnici stanno confrontando i benchmark per le differenze BLAS (differenze tra l'installazione conda e l'installazione pip), ma prendi come esempio quello pubblicato nella Intel® Developer Zone.
Il calcolo della matrice di scipy mostra il tempo necessario per la moltiplicazione di matrici complicate mentre va a destra e Intel MKL può elaborare più velocemente di ATLAS.

Confronto del calcolo della matrice di scipy in Intel MKL e ATLAS
Confronto del calcolo della matrice di scipy in Intel MKL e ATLAS
Citato da:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

Quanto segue è dall'ufficiale di Anaconda. Confrontiamo il numero di immagini addestrate al secondo in ogni modello di deep learning con tensorflow installato da conda install o pip install e la differenza è fino a 1 volte.

Differenza tra pip (OpenBLAS) e conda (intel MKL) in ogni modello di deep learning
Differenza tra pip (OpenBLAS) e conda (intel MKL) in ogni modello di deep learning
(La CPU è Intel® Xeon® Gold 6130)
Citato da:https://www.anaconda.com/tensorflow-in-anaconda/

Altri confronti includono panda e scikit learn (Le prestazioni di Intel vs Anaconda vs vanilla Python – il mio punto di riferimento personale). Poiché conda ha una propria installazione e gestione della libreria, in molti casi sembra essere un risultato favorevole.

Come controllare BLAS in Python

__config__.show()Corri.

importa numpy come np np .__ config __. show ()

>>
mkl_info: libraries = ['mkl_rt'] library_dirs = ['C: / Users /'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['C: \\ Program Files ( 'C: \\ Programmi (' 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 / programming / Miniconda3 / envs / ML \\ Libreria \\ include ']

Se viene visualizzato mkl_info, viene utilizzato intel MKL.