Het lijkt erop dat de rekensnelheid verandert afhankelijk van de BLAS die wordt gebruikt voor Numpy [Python]

2019 年 6 月 4 日

In "numpy" is een numerieke rekenbibliotheek genaamd BLAS verantwoordelijk voor de feitelijke verwerking.

Het gebruikte BLAS is afhankelijk van of u numpy installeert met "conda install" of "pip install", en afhankelijk van het BLAS dat u gebruikt, wordt de verwerkingssnelheid niet alleen beïnvloed door numpy maar ook door de bibliotheken die ervan afhankelijk zijn.

Deze keer zal ik het BLAS en het werkelijke snelheidsverschil introduceren, en hoe je kunt controleren welk BLAS je gebruikt.

BLAS en zijn typen

Wat is BLAS?

Wat betreft BLAS, de uitleg op de volgende site was heel gemakkelijk te begrijpen, dus ik zal het citeren.

BLAS is een afkorting voor Basic Linear Algebra Subprograms.Om het bot te zeggen, het is een bibliotheek met lineaire basisbewerkingen, of gewoon een reeks functies die de basisberekeningen van matrices en vectoren uitvoeren.Bijvoorbeeld matrixvermenigvuldiging, berekening van vectornormen, enzovoort.Het idee is om te stoppen met het uitvoeren van deze berekeningen (het wiel opnieuw uitvinden) en de bibliotheek te gebruiken voor efficiënte en efficiënte codering.

Makkelijk te gebruiken BLAS

Omdat BLAS ook achter numpy wordt gebruikt, wordt er gezegd dat de rekentijd zal verschillen afhankelijk van welke BLAS wordt aangeroepen wanneer numpy wordt uitgevoerd.

BLAS-type

Er zijn verschillende soorten BLAS ontwikkeld.Laten we eens kijken naar enkele van de typische.

BLAS openen

Een open source implementatie van BLAS.In numpy geïnstalleerd met pip, wordt OpenBLAS intern aangeroepen om bewerkingen uit te voeren.
Het is compatibel met verschillende CPU's en er wordt gezegd dat het dezelfde snelheid kan leveren als Intel MKL voor Intel's Sandy Bridge CPU.Het staat bekend om zijn multi-threading-functie en het lijkt erop dat het aantal cores en de versnelling goed proportioneel zijn.

Intel MKL (Intel Math Kernel Library)

BLAS ontwikkeld door Intel. Alleen Intel-CPU's worden ondersteund en kunnen niet worden gebruikt met CPU's van andere bedrijven. Omdat het is geoptimaliseerd voor Intel-CPU's zoals Xeon, Core i-serie en Atom, is het sneller om Intel MKL te gebruiken als een rekenkundige bibliotheek op een computer die deze CPU's gebruikt.Intel MKL wordt gebruikt voor numpy geïnstalleerd door "conda install" met Anaconda of Miniconda.

ATLAS (automatisch afgestemde lineaire algebra-software)

Een van de gratis BLAS.Zoals de naam al doet vermoeden, stelt tuning de optimale parameters in voor de te installeren hardware en realiseert high-speed berekeningen.

Verschil in rekentijd door verschil in BLAS

Het feit dat BLAS dat achter in numpy wordt gebruikt, de verwerkingssnelheid beïnvloedt, betekent dat het gerelateerd is aan de uitvoersnelheid van de bibliotheek die afhankelijk is van numpy.Met andere woorden, het heeft ook invloed op scipy, panda's, scikit-learn en tensorflow.

Veel technici vergelijken benchmarks voor BLAS-verschillen (verschillen tussen conda install en pip install), maar neem als voorbeeld degene die is gepubliceerd in de Intel® Developer Zone.
Matrixberekening door scipy toont de tijd die nodig is voor vermenigvuldiging van gecompliceerde matrices naar rechts, en intel MKL kan sneller worden verwerkt dan ATLAS.

Vergelijking van matrixberekening door scipy in Intel MKL en ATLAS
Vergelijking van matrixberekening door scipy in Intel MKL en ATLAS
Geciteerd door:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

Het volgende is van de Anaconda-functionaris. We vergelijken het aantal afbeeldingen dat per seconde wordt getraind in elk deep learning-model met tensorflow geïnstalleerd door conda install of pip install, en het verschil is maximaal 1 keer.

Verschil tussen pip (OpenBLAS) en conda (intel MKL) in elk deep learning-model
Verschil tussen pip (OpenBLAS) en conda (intel MKL) in elk deep learning-model
(Cpu is Intel® Xeon® Gold 6130)
Geciteerd door:https://www.anaconda.com/tensorflow-in-anaconda/

Andere vergelijkingen zijn panda's en scikit learn (de prestaties van Intel versus Anaconda versus vanille Python - mijn persoonlijke benchmark). Aangezien conda een eigen bibliotheekinstallatie en -beheer heeft, lijkt dit in veel gevallen een gunstig resultaat.

Hoe BLAS in Python te controleren

__config__.show()Ren gewoon.

importeer numpy als 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: \\ Program Files (' x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl ',' C: \\ Program Files (x86) \\ IntelSWTools \\ compilers_en_bibliotheken_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 \\ Bibliotheek \\ include ']

Als mkl_info wordt weergegeven, wordt intel MKL gebruikt.