Introducción a Numba for CUDA (en Python)

Contenido del Bootcamp Dirigido por: | Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Sabes qué es Numba for CUDA? Numba es un compilador de Python específico para funciones numéricas. Te permite acelerar tus aplicaciones con funciones de alto rendimiento escritas directamente en Python.

Numba genera código de máquina optimizado a partir de código Python puro usando LLVM. Con un par de simples cambios, nuestro código Python (orientado a funciones) se puede optimizar «justo a tiempo» para obtener un rendimiento similar al de C o C++ sin tener que cambiar el idioma.

¿Que es Numba?

Numba es un compilador que te permite acelerar código Python (funciones numéricas) tanto para CPU como para GPU. Entre sus funcionalidades están:

  1. El compilador de funciones: Numba compila funciones de Python, no aplicaciones completas o partes de ellas. Básicamente, Numba es otro módulo de Python para mejorar el rendimiento de nuestras funciones.
  2. Just-in-time (traducción dinámica): Numba traduce el bytecode (código intermedio más abstracto que el código de máquina) a código de máquina inmediatamente antes de su ejecución para mejorar la velocidad de ejecución.
  3. Enfocado numéricamente: Numba se enfoca en datos numéricos, como int, float o complex. Por ahora, existen limitaciones para usarlo con datos de cadena.

No existe solo Numba for CUDA, es decir, Numba no es la única forma de programar en CUDA, normalmente se programa en C/C++ directamente para ello. No obstante, Numba nos permite programar directamente en Python y optimizarlo tanto para CPU como para GPU con pocos cambios en nuestro código. Con relación a Python, existen otras alternativas como pyCUDA.

CUDA C/C++:

  • Es el modo más flexible y común de programar en Numba for CUDA.
  • Acelera las aplicaciones en C.

PyCUDA

Como alternativa a Numba for CUDA se encuentra PyCUDA, que nos permite acceder a la API CUDA de Nvidia desde Python. Veamos algunos de sus beneficios:

  • Limpieza de objetos vinculada a la vida útil de los objetos: esto también se llama RAII en C++ y hace que sea mucho más simple escribir código sin errores, libre de fugas o fallas. PyCUDA también conoce las dependencias, por lo que, por ejemplo, no se desconectará de un proceso o contexto antes de que también se libere toda la memoria que se le ha asignado.
  • Conveniencia: abstracciones de PyCUDA como pycuda.driver.SourceModule y pycuda.gpuarray.GPUArray hacen que la programación en CUDA sea aún más conveniente que con el tiempo de ejecución basado en C de Nvidia.
  • Lo completo que puede resultar: PyCUDA pone a su disposición toda la potencia de la API del controlador de CUDA. Asimismo, incluye código para la interoperabilidad con OpenGL.
  • Comprobación automática de errores: todos los errores de CUDA se traducen automáticamente a excepciones en Python.
  • Velocidad: la capa base de PyCUDA está escrita en C++, lo que hace que lo anteriormente escrito se vuelva gratuito.

Numba for CUDA

Numba for CUDA es compatible con la programación de GPU CUDA gracias a la compilación directa que se hace de un subconjunto restringido de código Python en kernels CUDA y funciones de dispositivos siguiendo el modelo de ejecución CUDA.

Los núcleos escritos en Numba for CUDA parecen tener acceso directo a las matrices NumPy. Del mismo modo, las matrices NumPy se transfieren entre la CPU y la GPU de forma automática.

Conceptos a tener en cuenta en la programación de Numba for CUDA

Estos son algunos de los aspectos o terminología importante que debes saber al programar en Numba for CUDA:

  • Host: la CPU.
  • Dispositivo: la GPU.
  • Memoria host: la memoria principal del sistema.
  • Memoria del dispositivo: memoria que viene integrada en la tarjeta GPU.
  • Núcleos: una función de GPU que inicia el host y se ejecuta en el dispositivo.
  • Función de dispositivo: es una función GPU ejecutada en el dispositivo que solo se puede llamar desde allí, desde el propio dispositivo. Esto quiere decir que la función solo puede llamarse desde un núcleo o desde otra función de dispositivo.
Numba for CUDA

¿Quieres seguir aprendiendo?

Ahora que has aprendido algunas cosillas sobre Numba for CUDA, puedes seguir formándote en el mundo del Big Data para convertirte en un experto en el sector. Para acceder a una de las disciplinas más demandadas y con mejores sueldos del mercado laboral, no te pierdas el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación íntegra e intensiva en la que solo necesitarás unos pocos meses para adquirir todos los conocimientos que te ayudarán a obtener tu trabajo soñado. ¡Entra ya para solicitar más información y da el paso que transformará tu carrera!

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado