24 puntos por GN⁺ 2025-04-05 | 2 comentarios | Compartir por WhatsApp
  • CUDA se está expandiendo más allá de un ecosistema centrado en C/C++ hacia una dirección en la que los desarrolladores de Python puedan manejar de forma más directa la computación en GPU de NVIDIA
  • El nuevo soporte no es un simple binding, sino un intento de integrar interfaces de Python y flujos de scripting en todo el toolkit de CUDA
  • La pila de CUDA Python incluye bindings básicos, compilador en tiempo de ejecución, cuPyNumeric, CUDA Core, NVMath Python, además de perfiladores y herramientas de análisis de código
  • NVIDIA busca aprovechar la compilación JIT y la conexión con código C++ existente para elevar la productividad en Python mientras mantiene pequeña la diferencia de rendimiento
  • La interfaz CuTile es un modelo pensado para que los desarrolladores de Python entiendan y depuren el trabajo en GPU en términos de arreglos y tiles, en lugar de hilos

Python nativo llega a CUDA

  • Python se convirtió en el lenguaje de programación más popular del mundo, superando a JavaScript, según la encuesta de código abierto de GitHub de 2024
  • El toolkit de software CUDA de NVIDIA no había tenido soporte nativo de Python durante años, pero en GTC se anunció el soporte nativo y su integración completa
  • Los desarrolladores podrán escribir directamente en Python computación algorítmica que se ejecute sobre GPUs de NVIDIA
  • El arquitecto de CUDA Stephen Jones señaló que han estado trabajando para llevar “accelerated Python” como soporte de primera clase a la pila de CUDA
  • La nueva dirección no consiste en trasladar C a sintaxis de Python, sino en crear un CUDA Python natural para desarrolladores de Python

Expansión sobre la base de desarrolladores de Python

  • CUDA antes requería conocimientos de C++ o Fortran, y aunque existían algunas herramientas para Python, no eran soporte nativo
  • El soporte nativo de Python abre las herramientas de desarrollo de CUDA a millones de desarrolladores de Python
  • Según The Futurum Group, los usuarios de CUDA crecieron de 2 millones en 2020 a 4 millones en 2023
  • Python es un lenguaje de rápido crecimiento, y NVIDIA también podrá llegar a desarrolladores de Python en países en desarrollo como India y Brasil
  • Una parte importante de las GPUs de NVIDIA está en Estados Unidos y Europa, pero empresas de telecomunicaciones e infraestructura de India están construyendo grandes instalaciones de GPU que se pondrán en operación en el futuro
  • NVIDIA está invirtiendo esfuerzo en atraer programadores y quiere dar soporte a más lenguajes de programación, incluidos Rust y Julia

Cómo se compone la pila Pythonic de CUDA

  • CUDA incluye bibliotecas, SDK, compiladores, runtime del host, herramientas, software preempaquetado y algoritmos
  • NVIDIA está agregando componentes a toda la Pythonic CUDA stack
  • El objetivo central es ofrecer aceleración por GPU sin salir de Python
  • Según Jones, CUDA Python no puede limitarse a ofrecer kernels; necesita un flujo de ejecución fluido a lo largo de toda la pila
    • Debe ser posible escribir un kernel y ponerlo en PyTorch
    • También debe ser posible llamar bibliotecas Pythonic y otros componentes
  • La capa del compilador está estructurada en la práctica alrededor de la compilación JIT, lo que reduce de forma importante el árbol de dependencias de la pila de GPU
  • La interoperabilidad entre capas es clave para mejorar la productividad usando Python de punta a punta

CUDA Core, cuPyNumeric y NVMath Python

  • NVIDIA construyó inicialmente bindings básicos de Python con compilador en tiempo de ejecución, junto con bibliotecas de Python
  • cuPyNumeric es un reemplazo directo de NumPy, la biblioteca de cómputo ampliamente usada en Python
    • Con solo cambiar una instrucción import, el código de NumPy se ejecuta en GPU en lugar de CPU
  • Durante el último año, NVIDIA creó CUDA Core, que Jones considera una reinterpretación del runtime de CUDA en un Python natural y nativo
  • CUDA Core sigue el flujo de ejecución de Python, funciona completamente dentro del proceso y depende en gran medida de la compilación JIT
  • NVIDIA también creó NVMath Python, que ofrece una interfaz unificada para llamadas a bibliotecas tanto del lado del host como del dispositivo
  • Según Jones, la capacidad de fusionar llamadas a bibliotecas puede traducirse en grandes mejoras de rendimiento
  • También se construyeron bibliotecas para acceder directamente desde código Python a bibliotecas C++ aceleradas
    • En lugar de reimplementarlas en Python, se conectan con código C++ existente y cuidadosamente afinado
    • Jones considera que con este enfoque la diferencia de rendimiento se vuelve prácticamente despreciable
  • También se añadieron herramientas para perfiladores y analizadores de código

Modelo de programación CuTile

  • Python facilita programar sin preocuparse demasiado por los detalles del hardware, y NVIDIA está añadiendo una capa de programación orientada a abstracciones de más alto nivel para la ejecución en GPU
  • El nuevo modelo de programación, la interfaz CuTile, se está desarrollando primero para CUDA Pythonic, y después llegará una extensión para C++ CUDA
  • CuTile está diseñado en torno a la idea de que los desarrolladores de Python, a diferencia de los de C++, piensan más en arreglos que en hilos
  • No es posible exportar código Python para aceleración en GPU como si fuera magia
    • CUDA normalmente divide un problema en miles de bloques pequeños
    • Los bloques se dividen en tiles aún más pequeños
    • Dentro de los tiles, miles de hilos procesan elementos individuales
    • Los hilos se agrupan para ejecutar una operación
  • La gran capacidad de cómputo de la GPU proviene de poder procesar en paralelo hasta el nivel de hilo y de elemento individual
  • NVIDIA considera que la ejecución en GPU no necesariamente tiene que bajar hasta el nivel de hilo, sino que también puede manejarse en el nivel intermedio de tiles
  • CuTile mapea arreglos a la GPU de forma eficiente en un nivel menos granular, lo que facilita entender y depurar el código
  • Según Jones, este enfoque conduce esencialmente al mismo rendimiento
  • Los datos de un tile pueden componerse de vectores, tensores o arreglos
  • El compilador puede hacer mejor el trabajo de mapear operaciones sobre arreglos completos desde bloques de hilos hacia la GPU, y Jones considera que muchas veces lo hace mejor que él porque entiende a fondo los detalles de ejecución de la GPU
  • A diferencia de C++, Python no es por diseño un lenguaje detallista, y Jones menciona a Triton de OpenAI como un ejemplo de algo que encaja de forma natural con programas en Python

2 comentarios

 
aer0700 2025-04-06

¿Será más rápido que los wrappers existentes de CUDA como CuPy y PyTorch? La ventaja de CuPy y torch era que su API es casi igual a la de NumPy, así que se podían migrar sin mucho esfuerzo los códigos de prueba escritos con NumPy; con esto, habrá que probar a ver qué tal.

 
iwi19 2025-04-06

¿La primera velocidad de verdad es así? Está demasiado lento...