Es scheint, dass sich die Berechnungsgeschwindigkeit in Abhängigkeit von dem für Numpy [Python] verwendeten BLAS ändert.

2019/6/4

In "numpy" ist eine numerische Berechnungsbibliothek namens BLAS für die eigentliche Verarbeitung verantwortlich.

Das verwendete BLAS hängt davon ab, ob Sie numpy mit "conda install" oder "pip install" installieren. Je nachdem, welches BLAS Sie verwenden, wird die Verarbeitungsgeschwindigkeit nicht nur von numpy, sondern auch von den davon abhängigen Bibliotheken beeinflusst.

Dieses Mal werde ich das BLAS und den tatsächlichen Geschwindigkeitsunterschied vorstellen und erläutern, welches BLAS Sie verwenden.

BLAS und seine Typen

Was ist BLAS?

In Bezug auf BLAS war die Erklärung auf der folgenden Website sehr leicht zu verstehen, daher werde ich sie zitieren.

BLAS ist eine Abkürzung für Basic Linear Algebra Subprograms.Um es ganz klar auszudrücken, es ist eine Bibliothek grundlegender linearer Operationen oder einfach eine Reihe von Funktionen, die die grundlegenden Berechnungen von Matrizen und Vektoren durchführen.Zum Beispiel Matrixmultiplikation, Vektornormberechnung und so weiter.Die Idee ist, die Implementierung dieser Berechnungen zu beenden (das Rad neu zu erfinden) und die Bibliothek für eine effiziente und effiziente Codierung zu verwenden.

Einfach zu bedienende BLAS

Da BLAS auch hinter numpy verwendet wird, wird gesagt, dass die Berechnungszeit davon abhängt, welches BLAS aufgerufen wird, wenn numpy ausgeführt wird.

BLAS-Typ

Es wurden verschiedene Arten von BLAS entwickelt.Schauen wir uns einige der typischen an.

BLAS öffnen

Eine Open Source Implementierung von BLAS.In numpy, das mit pip installiert ist, wird OpenBLAS intern aufgerufen, um Vorgänge auszuführen.
Es ist mit verschiedenen CPUs kompatibel und soll die gleiche Geschwindigkeit wie Intel MKL für Intels Sandy Bridge-CPU liefern.Es ist bekannt für seine Multithread-Funktion und es scheint, dass die Anzahl der Kerne gut proportional zur Beschleunigung ist.

Intel MKL (Intel Math Kernel Library)

BLAS von Intel entwickelt. Es werden nur Intel-CPUs unterstützt, die nicht mit CPUs anderer Unternehmen verwendet werden können. Da es für Intel-CPUs wie Xeon, Core i-Serie und Atom optimiert ist, ist es schneller, Intel MKL als arithmetische Bibliothek auf einem Computer zu verwenden, der diese CPUs verwendet.Intel MKL wird für numpy verwendet, das von "conda install" mit Anaconda oder Miniconda installiert wird.

ATLAS (automatisch abgestimmte lineare Algebra-Software)

Eine der kostenlosen BLAS.Wie der Name schon sagt, legt die Optimierung die optimalen Parameter für die zu installierende Hardware fest und realisiert eine Hochgeschwindigkeitsberechnung.

Unterschied in der Berechnungszeit aufgrund des Unterschieds in BLAS

Die Tatsache, dass BLAS, das auf der Rückseite von numpy verwendet wird, die Verarbeitungsgeschwindigkeit beeinflusst, bedeutet, dass es mit der Ausführungsgeschwindigkeit der Bibliothek zusammenhängt, die von numpy abhängt.Mit anderen Worten, es betrifft auch Scipy, Pandas, Scikit-Learn und Tensorflow.

Viele Techniker vergleichen Benchmarks für BLAS-Unterschiede (Unterschiede zwischen Conda-Installation und Pip-Installation), nehmen jedoch die in der Intel® Developer Zone veröffentlichte als Beispiel.
Die Matrixberechnung per Scipy zeigt die Zeit an, die für die Multiplikation komplizierter Matrizen nach rechts erforderlich ist, und Intel MKL kann schneller als ATLAS verarbeitet werden.

Vergleich der Matrixberechnung durch scipy in Intel MKL und ATLAS
Vergleich der Matrixberechnung durch scipy in Intel MKL und ATLAS
Quelle:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

Das Folgende ist vom Anaconda-Beamten. Wir vergleichen die Anzahl der pro Sekunde trainierten Bilder in jedem Deep-Learning-Modell mit dem Tensorflow, der entweder durch Conda-Installation oder Pip-Installation installiert wurde, und der Unterschied beträgt bis zu 1-mal.

Unterschied zwischen pip (OpenBLAS) und conda (Intel MKL) in jedem Deep-Learning-Modell
Unterschied zwischen pip (OpenBLAS) und conda (Intel MKL) in jedem Deep-Learning-Modell
(CPU ist Intel® Xeon® Gold 6130)
Quelle:https://www.anaconda.com/tensorflow-in-anaconda/

Andere Vergleiche sind Pandas und Scikit Learn (Die Leistung von Intel vs. Anaconda vs. Vanilla Python – mein persönlicher Benchmark). Da conda über eine eigene Bibliotheksinstallation und -verwaltung verfügt, scheint dies in vielen Fällen ein günstiges Ergebnis zu sein.

So überprüfen Sie BLAS in Python

__config__.show()Renn einfach.

importiere numpy als 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: \\ Programme (' x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl ',' C: \\ Programme (x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl \\ include ',' C: \\ Programme (x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl \\ lib ',' C: / Benutzer / Programmierung / Miniconda3 / envs / ML \\ Bibliothek \\ include ']

Wenn mkl_info angezeigt wird, wird Intel MKL verwendet.