Python es el lenguaje de programación con más crecimiento en los últimos años, también cuenta con una curva de aprendizaje idónea, para aquellos con poca experiencia en programación gracias a su sintaxis. Actualmente es muy utilizado en Big Data y, gracias a esta necesidad de procesar grandes volúmenes de datos agregando funciones numéricas, ha nacido una nueva opción, Python con Numba es un arma de optimización que lleva el código de python a un desempeño similar a como si estuviera escrito en C o C++.
Para aprender más de esta potente herramienta, hace unos días celebramos un webinar con Alejandro Díaz Santos, un crack de la optimización de código en Python que nos ha enseñado desde cero a manejar Numba. Ahora queremos que tú aprendas y lo lleves a tus proyectos. Para esto empecemos por el principio, debes saber exactamente qué es.
¿Qué encontrarás en este post?
Toggle¿Qué es Numba?
Numba es un compilador de código abierto para Python que se instala con el gestor de paquetes PIP. Se caracteriza por ser fácil de usar y el resultado de optimización es muy bueno. Está enfocado en funciones numéricas y permite acelerarlas ejecutándolas directamente en la GPU. Otra característica importante de esta herramienta es que genera código máquina usando el LLVM compiler. Numba puede compilar un gran subconjunto de código de Python centrado numéricamente, incluidas muchas funciones de NumPy. Además, Numba tiene soporte para la paralelización automática de bucles, generación de código acelerado por GPU y creación de ufuncs y devoluciones de llamada C.Características de Python con Numba
Numba tiene tres características principales que muestran sus ventajas pero también evidencian algunos contras al momento de procesar funciones no numéricas.- Compilador de funciones: Numba Python solo optimiza funciones matemáticas, no optimiza código entero. Si agregaras un script completo, solo optimizaría las funciones matemáticas. Es importante que conozcas si hay funciones propias de Python que pueden resolver tus problemas ya que en algunas ocasiones estas son más rápidas que incluso si se pasan a código máquina, como este compilador de Python.
- Just-in-time: Numba, de manera inmediata transforma el código de Python a un código intermedio y luego a código máquina. Lo cual sirve para ir evaluando el desempeño a medida que vas escribiendo tu código y determinar cuándo es bueno usar Numba Python y cuándo no.
- Funciones numéricas: ya te lo hemos dicho algunas veces, pero es importante que esto lo tengas muy presente: Numba Python solo procesa funciones numéricas como int, float o complex. Si Numba encuentra funciones no numéricas, dejará que se procesen normalmente como código en Python.
Otras alternativas
Para optimizar el código enfocado en el procesamiento a través de GPU existen más opciones:- CUDA C/C++: Es la forma más flexible para programar en CUDA y permite acelerar aplicaciones programadas en C o C++.
- pyCUDA: permite escribir bloques de código de C o C++ en Python. Es más eficiente que Numba, pero es necesario saber escribir en estos lenguajes.
¿Cómo funciona Python con Numba?
- Lo primero que hace es compilar un Kernel de CUDA para ejecutar las funciones en paralelo a las demás puestas en el script.
- Asigna inputs y outputs a la memoria GPU.
- Copia los inputs a la GPU.
- Ejecuta el Kernel de CUDA.
- Copia los resultados obtenidos de la GPU a la CPU.
- Devuelve el resultado como un numpy array.