Parece que la velocidad de cálculo cambia según el BLAS utilizado para Numpy [Python]

2019/6/4

En "numpy", una biblioteca de cálculo numérico llamada BLAS se encarga del procesamiento real.

El BLAS usado depende de si instala numpy con "conda install" o "pip install", y dependiendo de qué BLAS use, la velocidad de procesamiento se verá afectada no solo por numpy sino también por las bibliotecas que dependen de él.

Esta vez, presentaré el BLAS y la diferencia de velocidad real, y cómo verificar qué BLAS está utilizando.

BLAS y sus tipos

¿Qué es BLAS?

En cuanto a BLAS, la explicación en el siguiente sitio fue muy fácil de entender, así que la citaré.

BLAS es una abreviatura de Subprogramas de álgebra lineal básica.Para decirlo sin rodeos, es una biblioteca de operaciones lineales básicas, o simplemente un conjunto de funciones que hacen los cálculos básicos de matrices y vectores.Por ejemplo, multiplicación de matrices, cálculo de normas vectoriales, etc.La idea es dejar de implementar estos cálculos (reinventar la rueda) y usar la biblioteca para una codificación eficiente y eficiente.

BLAS fácil de usar

Dado que BLAS también se usa detrás de numpy, se dice que el tiempo de cálculo diferirá dependiendo de a qué BLAS se llame cuando se ejecute numpy.

Tipo BLAS

Se han desarrollado varios tipos de BLAS.Echemos un vistazo a algunos de los típicos.

AbrirBLAS

Una implementación de código abierto de BLAS.En numpy instalado con pip, OpenBLAS se llama internamente para realizar operaciones.
Es compatible con varias CPU, y se dice que puede ofrecer la misma velocidad que Intel MKL para la CPU Sandy Bridge de Intel.Es bien conocido por su función de subprocesos múltiples, y parece que el número de núcleos y la aceleración son bien proporcionales.

Intel MKL (biblioteca de kernel matemático de Intel)

BLAS desarrollado por Intel. Solo las CPU Intel son compatibles y no se pueden utilizar con CPU fabricadas por otras empresas. Dado que está optimizado para CPU Intel como Xeon, Core i series y Atom, es más rápido usar Intel MKL como una biblioteca aritmética en una computadora que usa estas CPU.Intel MKL se utiliza para muchos instalados por "conda install" con Anaconda o Miniconda.

ATLAS (software de álgebra lineal sintonizado automáticamente)

Uno de los BLAS gratuitos.Como sugiere el nombre, el ajuste establece los parámetros óptimos para el hardware que se instalará y realiza cálculos de alta velocidad.

Diferencia en el tiempo de cálculo debido a la diferencia en BLAS

El hecho de que BLAS se use en la parte posterior de numpy afecte la velocidad de procesamiento significa que está relacionado con la velocidad de ejecución de la biblioteca que depende de numpy.En otras palabras, también afecta a scipy, pandas, scikit-learn y tensorflow.

Muchos técnicos están comparando los puntos de referencia para las diferencias de BLAS (diferencias entre la instalación de conda y la instalación de pip), pero tome el publicado en Intel® Developer Zone como ejemplo.
El cálculo de matrices por scipy muestra el tiempo requerido para la multiplicación de matrices complicadas a medida que avanza hacia la derecha, e Intel MKL puede procesar más rápido que ATLAS.

Comparación del cálculo de matrices por scipy en intel MKL y ATLAS
Comparación del cálculo de matrices por scipy en intel MKL y ATLAS
Fuente:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

Lo siguiente es del funcionario de Anaconda. Comparamos la cantidad de imágenes entrenadas por segundo en cada modelo de aprendizaje profundo con tensorflow instalado por conda install o pip install, y la diferencia es de hasta 1 veces.

Diferencia entre pip (OpenBLAS) y conda (intel MKL) en cada modelo de aprendizaje profundo
Diferencia entre pip (OpenBLAS) y conda (intel MKL) en cada modelo de aprendizaje profundo
(La CPU es Intel® Xeon® Gold 6130)
Fuente:https://www.anaconda.com/tensorflow-in-anaconda/

Otras comparaciones incluyen pandas y scikit learn (el rendimiento de Intel frente a Anaconda frente a vanilla Python: mi punto de referencia personal). Dado que conda tiene su propia instalación y administración de bibliotecas, parece ser un resultado favorable en muchos casos.

Cómo verificar BLAS en Python

__config__.show()Solo corre.

importar numpy como 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: \\ Archivos de programa ( 'C: \\ Archivos de programa (' x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl ',' C: \\ Archivos de programa (x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl \\ include ',' C: \\ Archivos de programa (x86) \\ IntelSWTools \\ compilers_and_libraries_2019.0.117 \\ windows \\ mkl \\ lib ',' C: / Usuarios / programación / Miniconda3 / envs / ML \\ Biblioteca \\ incluir ']

Si se muestra mkl_info, se utiliza intel MKL.