Python presenta a Numba, un compilador de alto rendimiento

Numba, un compilador público justo a tiempo (JIT) fue publicado recientemente por Anaconda. Convierte ciertos códigos de Python y NumPy en código máquina eficiente.

Cuando se invoca Numba, el nuevo compilador convierte las funciones de Python en código de máquina que es desde dos veces (para operaciones simples de NumPy) hasta cien veces (para bucles sofisticados de Python) más rápido.

Prueba todo lo que Numba tiene para ofrecer desde aquí.

Los “decoradores” de Numba son una poderosa herramienta para automatizar la compilación de tus funciones.

Como resultado, siempre que el código ejecute una función decorado con Numba, puede hacerlo a la misma velocidad que si estuviera escrito en código de máquina.

  • SO: Windows (32 y 64 bits), OSX, Linux (32 y 64 bits). Soporte no oficial en BSD.
  • Arquitectura: x86, x86_64, ppc64le, armv7l, armv8l (aarch64). Soporte no oficial en M1/Arm64.
  • GPU: Nvidia CUDA.
  • CPython
  • NumPy 1.18 – última versión

No se recomienda compilar Numba desde la fuente si eres un usuario primerizo. Debido a su función central, la dependencia de otros componentes está estrictamente limitada.

Sin embargo, se pueden agregar los siguientes paquetes opcionales para ampliar las capacidades del sistema:

  • Scipy hace posible compilar funciones Numpy-.linalg.
  • Colorama permite el uso de resaltado de color en mensajes de error y backtraces.
  • pyyaml admite la configuración de Numba a través de un archivo de configuración YAML.
  • IntelSVML (biblioteca matemática vectorial corta de alto rendimiento, solo x86 64) se puede usar con icc_rt. Los consejos de rendimiento proporcionan instrucciones de instalación.

¿Como funciona Numba?

Para una función decorada escrita en Python, Numba leerá el código de bytes y lo combinará con información sobre los tipos de argumentos pasados a la función.

Cuando termina de analizar y optimizar el código, utiliza la biblioteca del compilador LLVM para generar código de máquina para que tu función se ejecute sin problemas en tu CPU.

Cada vez que utilices esa función, se utilizará esa versión construida.

En la medida en que tu CPU admite la ejecución en modo nopython o al menos la compilación de ciertos bucles, Numba optimizará tu compilación para tu hardware.

Es posible ver un aumento de velocidad importante según la tarea en cuestión.

Numba te ofrece muchas opciones para paralelizar fácilmente el código en CPU y GPU con pocas modificaciones:

  • Racionalización de subprocesos: Numba ejecuta automáticamente expresiones de matriz NumPy en varios núcleos de CPU, lo que simplifica la creación de bucles paralelos.
  • Vectorización SIMD: Numba puede transformar ciertos bucles en instrucciones vectoriales, lo que resulta en aumentos de rendimiento de 2 a 4 veces. Numba se puede ejecutar en CPU compatibles con SSE, AVX o AVX-512, ya que se ajusta automáticamente para aprovechar al máximo las funciones del procesador.
  • Aceleración GPU: Numba es la biblioteca de Python elegida, ya que permite escribir algoritmos de GPU paralelos desde cero sin dejar de ser compatible con NVIDIA CUDA.

Relacionado